@falai/agent 2.6.1 → 3.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 (611) hide show
  1. package/README.md +2 -2
  2. package/dist/adapters/MemoryAdapter.d.ts +1 -1
  3. package/dist/adapters/MemoryAdapter.d.ts.map +1 -1
  4. package/dist/adapters/MemoryAdapter.js +32 -36
  5. package/dist/adapters/MemoryAdapter.js.map +1 -1
  6. package/dist/adapters/MongoAdapter.d.ts +1 -1
  7. package/dist/adapters/MongoAdapter.d.ts.map +1 -1
  8. package/dist/adapters/MongoAdapter.js +2 -2
  9. package/dist/adapters/MongoAdapter.js.map +1 -1
  10. package/dist/adapters/OpenSearchAdapter.d.ts +1 -1
  11. package/dist/adapters/OpenSearchAdapter.d.ts.map +1 -1
  12. package/dist/adapters/OpenSearchAdapter.js +3 -3
  13. package/dist/adapters/OpenSearchAdapter.js.map +1 -1
  14. package/dist/adapters/PostgreSQLAdapter.d.ts +1 -1
  15. package/dist/adapters/PostgreSQLAdapter.d.ts.map +1 -1
  16. package/dist/adapters/PostgreSQLAdapter.js +18 -13
  17. package/dist/adapters/PostgreSQLAdapter.js.map +1 -1
  18. package/dist/adapters/PrismaAdapter.d.ts +1 -1
  19. package/dist/adapters/PrismaAdapter.d.ts.map +1 -1
  20. package/dist/adapters/PrismaAdapter.js +3 -3
  21. package/dist/adapters/PrismaAdapter.js.map +1 -1
  22. package/dist/adapters/RedisAdapter.d.ts +2 -1
  23. package/dist/adapters/RedisAdapter.d.ts.map +1 -1
  24. package/dist/adapters/RedisAdapter.js +77 -27
  25. package/dist/adapters/RedisAdapter.js.map +1 -1
  26. package/dist/adapters/SQLiteAdapter.d.ts +1 -1
  27. package/dist/adapters/SQLiteAdapter.d.ts.map +1 -1
  28. package/dist/adapters/SQLiteAdapter.js +9 -31
  29. package/dist/adapters/SQLiteAdapter.js.map +1 -1
  30. package/dist/adapters/index.d.ts +13 -13
  31. package/dist/adapters/index.d.ts.map +1 -1
  32. package/dist/adapters/index.js +7 -7
  33. package/dist/adapters/index.js.map +1 -1
  34. package/dist/adapters/sessionRow.d.ts +22 -0
  35. package/dist/adapters/sessionRow.d.ts.map +1 -0
  36. package/dist/adapters/sessionRow.js +48 -0
  37. package/dist/adapters/sessionRow.js.map +1 -0
  38. package/dist/cjs/adapters/MemoryAdapter.d.ts +1 -1
  39. package/dist/cjs/adapters/MemoryAdapter.d.ts.map +1 -1
  40. package/dist/cjs/adapters/MemoryAdapter.js +39 -43
  41. package/dist/cjs/adapters/MemoryAdapter.js.map +1 -1
  42. package/dist/cjs/adapters/MongoAdapter.d.ts +1 -1
  43. package/dist/cjs/adapters/MongoAdapter.d.ts.map +1 -1
  44. package/dist/cjs/adapters/MongoAdapter.js +4 -4
  45. package/dist/cjs/adapters/MongoAdapter.js.map +1 -1
  46. package/dist/cjs/adapters/OpenSearchAdapter.d.ts +1 -1
  47. package/dist/cjs/adapters/OpenSearchAdapter.d.ts.map +1 -1
  48. package/dist/cjs/adapters/OpenSearchAdapter.js +6 -6
  49. package/dist/cjs/adapters/OpenSearchAdapter.js.map +1 -1
  50. package/dist/cjs/adapters/PostgreSQLAdapter.d.ts +1 -1
  51. package/dist/cjs/adapters/PostgreSQLAdapter.d.ts.map +1 -1
  52. package/dist/cjs/adapters/PostgreSQLAdapter.js +20 -15
  53. package/dist/cjs/adapters/PostgreSQLAdapter.js.map +1 -1
  54. package/dist/cjs/adapters/PrismaAdapter.d.ts +1 -1
  55. package/dist/cjs/adapters/PrismaAdapter.d.ts.map +1 -1
  56. package/dist/cjs/adapters/PrismaAdapter.js +7 -7
  57. package/dist/cjs/adapters/PrismaAdapter.js.map +1 -1
  58. package/dist/cjs/adapters/RedisAdapter.d.ts +2 -1
  59. package/dist/cjs/adapters/RedisAdapter.d.ts.map +1 -1
  60. package/dist/cjs/adapters/RedisAdapter.js +81 -31
  61. package/dist/cjs/adapters/RedisAdapter.js.map +1 -1
  62. package/dist/cjs/adapters/SQLiteAdapter.d.ts +1 -1
  63. package/dist/cjs/adapters/SQLiteAdapter.d.ts.map +1 -1
  64. package/dist/cjs/adapters/SQLiteAdapter.js +11 -33
  65. package/dist/cjs/adapters/SQLiteAdapter.js.map +1 -1
  66. package/dist/cjs/adapters/index.d.ts +13 -13
  67. package/dist/cjs/adapters/index.d.ts.map +1 -1
  68. package/dist/cjs/adapters/index.js +14 -14
  69. package/dist/cjs/adapters/index.js.map +1 -1
  70. package/dist/cjs/adapters/sessionRow.d.ts +22 -0
  71. package/dist/cjs/adapters/sessionRow.d.ts.map +1 -0
  72. package/dist/cjs/adapters/sessionRow.js +52 -0
  73. package/dist/cjs/adapters/sessionRow.js.map +1 -0
  74. package/dist/cjs/core/Agent.d.ts +19 -11
  75. package/dist/cjs/core/Agent.d.ts.map +1 -1
  76. package/dist/cjs/core/Agent.js +102 -64
  77. package/dist/cjs/core/Agent.js.map +1 -1
  78. package/dist/cjs/core/AutoChainExecutor.d.ts +12 -22
  79. package/dist/cjs/core/AutoChainExecutor.d.ts.map +1 -1
  80. package/dist/cjs/core/AutoChainExecutor.js +46 -49
  81. package/dist/cjs/core/AutoChainExecutor.js.map +1 -1
  82. package/dist/cjs/core/BranchEvaluator.d.ts +4 -4
  83. package/dist/cjs/core/BranchEvaluator.d.ts.map +1 -1
  84. package/dist/cjs/core/BranchEvaluator.js +6 -6
  85. package/dist/cjs/core/BranchEvaluator.js.map +1 -1
  86. package/dist/cjs/core/CompactionEngine.d.ts +16 -3
  87. package/dist/cjs/core/CompactionEngine.d.ts.map +1 -1
  88. package/dist/cjs/core/CompactionEngine.js +30 -6
  89. package/dist/cjs/core/CompactionEngine.js.map +1 -1
  90. package/dist/cjs/core/DirectiveChainTracker.d.ts +1 -1
  91. package/dist/cjs/core/DirectiveChainTracker.d.ts.map +1 -1
  92. package/dist/cjs/core/DirectiveChainTracker.js +5 -5
  93. package/dist/cjs/core/DirectiveChainTracker.js.map +1 -1
  94. package/dist/cjs/core/Events.d.ts +1 -1
  95. package/dist/cjs/core/Events.d.ts.map +1 -1
  96. package/dist/cjs/core/Events.js +15 -15
  97. package/dist/cjs/core/Events.js.map +1 -1
  98. package/dist/cjs/core/Flow.d.ts +4 -4
  99. package/dist/cjs/core/Flow.d.ts.map +1 -1
  100. package/dist/cjs/core/Flow.js +15 -15
  101. package/dist/cjs/core/Flow.js.map +1 -1
  102. package/dist/cjs/core/FlowRouter.d.ts +4 -4
  103. package/dist/cjs/core/FlowRouter.d.ts.map +1 -1
  104. package/dist/cjs/core/FlowRouter.js +92 -70
  105. package/dist/cjs/core/FlowRouter.js.map +1 -1
  106. package/dist/cjs/core/PersistenceManager.d.ts +1 -1
  107. package/dist/cjs/core/PersistenceManager.d.ts.map +1 -1
  108. package/dist/cjs/core/PersistenceManager.js +10 -10
  109. package/dist/cjs/core/PersistenceManager.js.map +1 -1
  110. package/dist/cjs/core/PromptComposer.d.ts +4 -4
  111. package/dist/cjs/core/PromptComposer.d.ts.map +1 -1
  112. package/dist/cjs/core/PromptComposer.js +13 -13
  113. package/dist/cjs/core/PromptComposer.js.map +1 -1
  114. package/dist/cjs/core/PromptSectionCache.d.ts +2 -2
  115. package/dist/cjs/core/PromptSectionCache.d.ts.map +1 -1
  116. package/dist/cjs/core/ResponseEngine.d.ts +4 -4
  117. package/dist/cjs/core/ResponseEngine.d.ts.map +1 -1
  118. package/dist/cjs/core/ResponseEngine.js +7 -7
  119. package/dist/cjs/core/ResponseEngine.js.map +1 -1
  120. package/dist/cjs/core/ResponseGenerationError.d.ts.map +1 -1
  121. package/dist/cjs/core/ResponseGenerationError.js +3 -5
  122. package/dist/cjs/core/ResponseGenerationError.js.map +1 -1
  123. package/dist/cjs/core/ResponseModal.d.ts +39 -10
  124. package/dist/cjs/core/ResponseModal.d.ts.map +1 -1
  125. package/dist/cjs/core/ResponseModal.js +195 -72
  126. package/dist/cjs/core/ResponseModal.js.map +1 -1
  127. package/dist/cjs/core/ResponsePipeline.d.ts +50 -12
  128. package/dist/cjs/core/ResponsePipeline.d.ts.map +1 -1
  129. package/dist/cjs/core/ResponsePipeline.js +301 -158
  130. package/dist/cjs/core/ResponsePipeline.js.map +1 -1
  131. package/dist/cjs/core/SessionFinalizer.d.ts +4 -4
  132. package/dist/cjs/core/SessionFinalizer.d.ts.map +1 -1
  133. package/dist/cjs/core/SessionFinalizer.js +36 -9
  134. package/dist/cjs/core/SessionFinalizer.js.map +1 -1
  135. package/dist/cjs/core/SessionManager.d.ts +15 -6
  136. package/dist/cjs/core/SessionManager.d.ts.map +1 -1
  137. package/dist/cjs/core/SessionManager.js +49 -22
  138. package/dist/cjs/core/SessionManager.js.map +1 -1
  139. package/dist/cjs/core/SignalCoordinator.d.ts +5 -5
  140. package/dist/cjs/core/SignalCoordinator.d.ts.map +1 -1
  141. package/dist/cjs/core/SignalCoordinator.js +12 -12
  142. package/dist/cjs/core/SignalCoordinator.js.map +1 -1
  143. package/dist/cjs/core/SignalEvaluator.d.ts +4 -4
  144. package/dist/cjs/core/SignalEvaluator.d.ts.map +1 -1
  145. package/dist/cjs/core/SignalEvaluator.js +6 -6
  146. package/dist/cjs/core/SignalEvaluator.js.map +1 -1
  147. package/dist/cjs/core/SignalProcessor.d.ts +6 -6
  148. package/dist/cjs/core/SignalProcessor.d.ts.map +1 -1
  149. package/dist/cjs/core/SignalProcessor.js +17 -89
  150. package/dist/cjs/core/SignalProcessor.js.map +1 -1
  151. package/dist/cjs/core/Step.d.ts +5 -5
  152. package/dist/cjs/core/Step.d.ts.map +1 -1
  153. package/dist/cjs/core/Step.js +65 -17
  154. package/dist/cjs/core/Step.js.map +1 -1
  155. package/dist/cjs/core/StepLifecycle.d.ts +18 -8
  156. package/dist/cjs/core/StepLifecycle.d.ts.map +1 -1
  157. package/dist/cjs/core/StepLifecycle.js +103 -20
  158. package/dist/cjs/core/StepLifecycle.js.map +1 -1
  159. package/dist/cjs/core/StreamingToolExecutor.d.ts +1 -1
  160. package/dist/cjs/core/StreamingToolExecutor.d.ts.map +1 -1
  161. package/dist/cjs/core/StreamingToolExecutor.js +30 -6
  162. package/dist/cjs/core/StreamingToolExecutor.js.map +1 -1
  163. package/dist/cjs/core/ToolLoopExecutor.d.ts +8 -4
  164. package/dist/cjs/core/ToolLoopExecutor.d.ts.map +1 -1
  165. package/dist/cjs/core/ToolLoopExecutor.js +189 -97
  166. package/dist/cjs/core/ToolLoopExecutor.js.map +1 -1
  167. package/dist/cjs/core/ToolManager.d.ts +6 -6
  168. package/dist/cjs/core/ToolManager.d.ts.map +1 -1
  169. package/dist/cjs/core/ToolManager.js +102 -79
  170. package/dist/cjs/core/ToolManager.js.map +1 -1
  171. package/dist/cjs/core/createAgent.d.ts +2 -2
  172. package/dist/cjs/core/createAgent.d.ts.map +1 -1
  173. package/dist/cjs/core/createAgent.js +2 -2
  174. package/dist/cjs/core/createAgent.js.map +1 -1
  175. package/dist/cjs/core/flow-namespace.d.ts +16 -1
  176. package/dist/cjs/core/flow-namespace.d.ts.map +1 -1
  177. package/dist/cjs/core/flow-namespace.js +26 -4
  178. package/dist/cjs/core/flow-namespace.js.map +1 -1
  179. package/dist/cjs/core/toolGates.d.ts +1 -1
  180. package/dist/cjs/core/toolGates.d.ts.map +1 -1
  181. package/dist/cjs/core/toolGates.js +3 -3
  182. package/dist/cjs/core/toolGates.js.map +1 -1
  183. package/dist/cjs/index.d.ts +50 -45
  184. package/dist/cjs/index.d.ts.map +1 -1
  185. package/dist/cjs/index.js +96 -88
  186. package/dist/cjs/index.js.map +1 -1
  187. package/dist/cjs/providers/AnthropicProvider.d.ts +25 -35
  188. package/dist/cjs/providers/AnthropicProvider.d.ts.map +1 -1
  189. package/dist/cjs/providers/AnthropicProvider.js +30 -426
  190. package/dist/cjs/providers/AnthropicProvider.js.map +1 -1
  191. package/dist/cjs/providers/DeepSeekProvider.d.ts +13 -34
  192. package/dist/cjs/providers/DeepSeekProvider.d.ts.map +1 -1
  193. package/dist/cjs/providers/DeepSeekProvider.js +17 -51
  194. package/dist/cjs/providers/DeepSeekProvider.js.map +1 -1
  195. package/dist/cjs/providers/GeminiProvider.d.ts +22 -75
  196. package/dist/cjs/providers/GeminiProvider.d.ts.map +1 -1
  197. package/dist/cjs/providers/GeminiProvider.js +32 -558
  198. package/dist/cjs/providers/GeminiProvider.js.map +1 -1
  199. package/dist/cjs/providers/GenericOpenAICompatibleProvider.d.ts +9 -10
  200. package/dist/cjs/providers/GenericOpenAICompatibleProvider.d.ts.map +1 -1
  201. package/dist/cjs/providers/GenericOpenAICompatibleProvider.js +14 -20
  202. package/dist/cjs/providers/GenericOpenAICompatibleProvider.js.map +1 -1
  203. package/dist/cjs/providers/OpenAICompatibleProvider.d.ts +26 -135
  204. package/dist/cjs/providers/OpenAICompatibleProvider.d.ts.map +1 -1
  205. package/dist/cjs/providers/OpenAICompatibleProvider.js +40 -496
  206. package/dist/cjs/providers/OpenAICompatibleProvider.js.map +1 -1
  207. package/dist/cjs/providers/OpenAIProvider.d.ts +14 -20
  208. package/dist/cjs/providers/OpenAIProvider.d.ts.map +1 -1
  209. package/dist/cjs/providers/OpenAIProvider.js +21 -28
  210. package/dist/cjs/providers/OpenAIProvider.js.map +1 -1
  211. package/dist/cjs/providers/OpenRouterProvider.d.ts +20 -24
  212. package/dist/cjs/providers/OpenRouterProvider.d.ts.map +1 -1
  213. package/dist/cjs/providers/OpenRouterProvider.js +22 -38
  214. package/dist/cjs/providers/OpenRouterProvider.js.map +1 -1
  215. package/dist/cjs/providers/ProviderAdapter.d.ts +94 -0
  216. package/dist/cjs/providers/ProviderAdapter.d.ts.map +1 -0
  217. package/dist/cjs/providers/ProviderAdapter.js +257 -0
  218. package/dist/cjs/providers/ProviderAdapter.js.map +1 -0
  219. package/dist/cjs/providers/index.d.ts +21 -18
  220. package/dist/cjs/providers/index.d.ts.map +1 -1
  221. package/dist/cjs/providers/index.js +23 -21
  222. package/dist/cjs/providers/index.js.map +1 -1
  223. package/dist/cjs/types/agent.d.ts +37 -11
  224. package/dist/cjs/types/agent.d.ts.map +1 -1
  225. package/dist/cjs/types/ai.d.ts +11 -21
  226. package/dist/cjs/types/ai.d.ts.map +1 -1
  227. package/dist/cjs/types/compaction.d.ts +2 -2
  228. package/dist/cjs/types/compaction.d.ts.map +1 -1
  229. package/dist/cjs/types/errors.d.ts +16 -20
  230. package/dist/cjs/types/errors.d.ts.map +1 -1
  231. package/dist/cjs/types/errors.js +17 -18
  232. package/dist/cjs/types/errors.js.map +1 -1
  233. package/dist/cjs/types/flow.d.ts +56 -39
  234. package/dist/cjs/types/flow.d.ts.map +1 -1
  235. package/dist/cjs/types/history.d.ts +1 -1
  236. package/dist/cjs/types/history.d.ts.map +1 -1
  237. package/dist/cjs/types/index.d.ts +17 -17
  238. package/dist/cjs/types/index.d.ts.map +1 -1
  239. package/dist/cjs/types/index.js +14 -14
  240. package/dist/cjs/types/index.js.map +1 -1
  241. package/dist/cjs/types/persistence.d.ts +2 -2
  242. package/dist/cjs/types/persistence.d.ts.map +1 -1
  243. package/dist/cjs/types/session.d.ts +4 -4
  244. package/dist/cjs/types/session.d.ts.map +1 -1
  245. package/dist/cjs/types/signals.d.ts +3 -3
  246. package/dist/cjs/types/signals.d.ts.map +1 -1
  247. package/dist/cjs/types/template.d.ts +2 -2
  248. package/dist/cjs/types/template.d.ts.map +1 -1
  249. package/dist/cjs/types/tool.d.ts +4 -2
  250. package/dist/cjs/types/tool.d.ts.map +1 -1
  251. package/dist/cjs/types/tool.js.map +1 -1
  252. package/dist/cjs/utils/condition.d.ts +1 -1
  253. package/dist/cjs/utils/condition.d.ts.map +1 -1
  254. package/dist/cjs/utils/condition.js +6 -6
  255. package/dist/cjs/utils/condition.js.map +1 -1
  256. package/dist/cjs/utils/event.d.ts +1 -1
  257. package/dist/cjs/utils/event.d.ts.map +1 -1
  258. package/dist/cjs/utils/event.js +2 -2
  259. package/dist/cjs/utils/event.js.map +1 -1
  260. package/dist/cjs/utils/history.d.ts +2 -2
  261. package/dist/cjs/utils/history.d.ts.map +1 -1
  262. package/dist/cjs/utils/history.js +15 -15
  263. package/dist/cjs/utils/history.js.map +1 -1
  264. package/dist/cjs/utils/index.d.ts +11 -13
  265. package/dist/cjs/utils/index.d.ts.map +1 -1
  266. package/dist/cjs/utils/index.js +57 -58
  267. package/dist/cjs/utils/index.js.map +1 -1
  268. package/dist/cjs/utils/serialize.d.ts +17 -0
  269. package/dist/cjs/utils/serialize.d.ts.map +1 -1
  270. package/dist/cjs/utils/serialize.js +33 -0
  271. package/dist/cjs/utils/serialize.js.map +1 -1
  272. package/dist/cjs/utils/session.d.ts +23 -3
  273. package/dist/cjs/utils/session.d.ts.map +1 -1
  274. package/dist/cjs/utils/session.js +40 -8
  275. package/dist/cjs/utils/session.js.map +1 -1
  276. package/dist/cjs/utils/template.d.ts +3 -3
  277. package/dist/cjs/utils/template.d.ts.map +1 -1
  278. package/dist/cjs/utils/template.js +5 -5
  279. package/dist/cjs/utils/template.js.map +1 -1
  280. package/dist/constants/index.d.ts +1 -0
  281. package/dist/constants/index.js +1 -1
  282. package/dist/core/Agent.d.ts +19 -11
  283. package/dist/core/Agent.d.ts.map +1 -1
  284. package/dist/core/Agent.js +53 -15
  285. package/dist/core/Agent.js.map +1 -1
  286. package/dist/core/AutoChainExecutor.d.ts +12 -22
  287. package/dist/core/AutoChainExecutor.d.ts.map +1 -1
  288. package/dist/core/AutoChainExecutor.js +27 -30
  289. package/dist/core/AutoChainExecutor.js.map +1 -1
  290. package/dist/core/BranchEvaluator.d.ts +4 -4
  291. package/dist/core/BranchEvaluator.d.ts.map +1 -1
  292. package/dist/core/BranchEvaluator.js +2 -2
  293. package/dist/core/BranchEvaluator.js.map +1 -1
  294. package/dist/core/CompactionEngine.d.ts +16 -3
  295. package/dist/core/CompactionEngine.d.ts.map +1 -1
  296. package/dist/core/CompactionEngine.js +30 -6
  297. package/dist/core/CompactionEngine.js.map +1 -1
  298. package/dist/core/DirectiveChainTracker.d.ts +1 -1
  299. package/dist/core/DirectiveChainTracker.d.ts.map +1 -1
  300. package/dist/core/DirectiveChainTracker.js +2 -2
  301. package/dist/core/DirectiveChainTracker.js.map +1 -1
  302. package/dist/core/Events.d.ts +1 -1
  303. package/dist/core/Events.d.ts.map +1 -1
  304. package/dist/core/Events.js +1 -1
  305. package/dist/core/Events.js.map +1 -1
  306. package/dist/core/Flow.d.ts +4 -4
  307. package/dist/core/Flow.d.ts.map +1 -1
  308. package/dist/core/Flow.js +3 -3
  309. package/dist/core/Flow.js.map +1 -1
  310. package/dist/core/FlowRouter.d.ts +4 -4
  311. package/dist/core/FlowRouter.d.ts.map +1 -1
  312. package/dist/core/FlowRouter.js +36 -14
  313. package/dist/core/FlowRouter.js.map +1 -1
  314. package/dist/core/PersistenceManager.d.ts +1 -1
  315. package/dist/core/PersistenceManager.d.ts.map +1 -1
  316. package/dist/core/PersistenceManager.js +3 -3
  317. package/dist/core/PersistenceManager.js.map +1 -1
  318. package/dist/core/PromptComposer.d.ts +4 -4
  319. package/dist/core/PromptComposer.d.ts.map +1 -1
  320. package/dist/core/PromptComposer.js +3 -3
  321. package/dist/core/PromptComposer.js.map +1 -1
  322. package/dist/core/PromptSectionCache.d.ts +2 -2
  323. package/dist/core/PromptSectionCache.d.ts.map +1 -1
  324. package/dist/core/ResponseEngine.d.ts +4 -4
  325. package/dist/core/ResponseEngine.d.ts.map +1 -1
  326. package/dist/core/ResponseEngine.js +2 -2
  327. package/dist/core/ResponseEngine.js.map +1 -1
  328. package/dist/core/ResponseGenerationError.d.ts.map +1 -1
  329. package/dist/core/ResponseGenerationError.js +3 -5
  330. package/dist/core/ResponseGenerationError.js.map +1 -1
  331. package/dist/core/ResponseModal.d.ts +39 -10
  332. package/dist/core/ResponseModal.d.ts.map +1 -1
  333. package/dist/core/ResponseModal.js +152 -29
  334. package/dist/core/ResponseModal.js.map +1 -1
  335. package/dist/core/ResponsePipeline.d.ts +50 -12
  336. package/dist/core/ResponsePipeline.d.ts.map +1 -1
  337. package/dist/core/ResponsePipeline.js +232 -89
  338. package/dist/core/ResponsePipeline.js.map +1 -1
  339. package/dist/core/SessionFinalizer.d.ts +4 -4
  340. package/dist/core/SessionFinalizer.d.ts.map +1 -1
  341. package/dist/core/SessionFinalizer.js +32 -5
  342. package/dist/core/SessionFinalizer.js.map +1 -1
  343. package/dist/core/SessionManager.d.ts +15 -6
  344. package/dist/core/SessionManager.d.ts.map +1 -1
  345. package/dist/core/SessionManager.js +46 -19
  346. package/dist/core/SessionManager.js.map +1 -1
  347. package/dist/core/SignalCoordinator.d.ts +5 -5
  348. package/dist/core/SignalCoordinator.d.ts.map +1 -1
  349. package/dist/core/SignalCoordinator.js +2 -2
  350. package/dist/core/SignalCoordinator.js.map +1 -1
  351. package/dist/core/SignalEvaluator.d.ts +4 -4
  352. package/dist/core/SignalEvaluator.d.ts.map +1 -1
  353. package/dist/core/SignalEvaluator.js +2 -2
  354. package/dist/core/SignalEvaluator.js.map +1 -1
  355. package/dist/core/SignalProcessor.d.ts +6 -6
  356. package/dist/core/SignalProcessor.d.ts.map +1 -1
  357. package/dist/core/SignalProcessor.js +7 -79
  358. package/dist/core/SignalProcessor.js.map +1 -1
  359. package/dist/core/Step.d.ts +5 -5
  360. package/dist/core/Step.d.ts.map +1 -1
  361. package/dist/core/Step.js +53 -5
  362. package/dist/core/Step.js.map +1 -1
  363. package/dist/core/StepLifecycle.d.ts +18 -8
  364. package/dist/core/StepLifecycle.d.ts.map +1 -1
  365. package/dist/core/StepLifecycle.js +98 -15
  366. package/dist/core/StepLifecycle.js.map +1 -1
  367. package/dist/core/StreamingToolExecutor.d.ts +1 -1
  368. package/dist/core/StreamingToolExecutor.d.ts.map +1 -1
  369. package/dist/core/StreamingToolExecutor.js +29 -5
  370. package/dist/core/StreamingToolExecutor.js.map +1 -1
  371. package/dist/core/ToolLoopExecutor.d.ts +8 -4
  372. package/dist/core/ToolLoopExecutor.d.ts.map +1 -1
  373. package/dist/core/ToolLoopExecutor.js +157 -65
  374. package/dist/core/ToolLoopExecutor.js.map +1 -1
  375. package/dist/core/ToolManager.d.ts +6 -6
  376. package/dist/core/ToolManager.d.ts.map +1 -1
  377. package/dist/core/ToolManager.js +44 -21
  378. package/dist/core/ToolManager.js.map +1 -1
  379. package/dist/core/createAgent.d.ts +2 -2
  380. package/dist/core/createAgent.d.ts.map +1 -1
  381. package/dist/core/createAgent.js +1 -1
  382. package/dist/core/createAgent.js.map +1 -1
  383. package/dist/core/flow-namespace.d.ts +16 -1
  384. package/dist/core/flow-namespace.d.ts.map +1 -1
  385. package/dist/core/flow-namespace.js +23 -1
  386. package/dist/core/flow-namespace.js.map +1 -1
  387. package/dist/core/toolGates.d.ts +1 -1
  388. package/dist/core/toolGates.d.ts.map +1 -1
  389. package/dist/core/toolGates.js +1 -1
  390. package/dist/core/toolGates.js.map +1 -1
  391. package/dist/index.d.ts +50 -45
  392. package/dist/index.d.ts.map +1 -1
  393. package/dist/index.js +34 -30
  394. package/dist/index.js.map +1 -1
  395. package/dist/providers/AnthropicProvider.d.ts +25 -35
  396. package/dist/providers/AnthropicProvider.d.ts.map +1 -1
  397. package/dist/providers/AnthropicProvider.js +30 -423
  398. package/dist/providers/AnthropicProvider.js.map +1 -1
  399. package/dist/providers/DeepSeekProvider.d.ts +13 -34
  400. package/dist/providers/DeepSeekProvider.d.ts.map +1 -1
  401. package/dist/providers/DeepSeekProvider.js +16 -47
  402. package/dist/providers/DeepSeekProvider.js.map +1 -1
  403. package/dist/providers/GeminiProvider.d.ts +22 -75
  404. package/dist/providers/GeminiProvider.d.ts.map +1 -1
  405. package/dist/providers/GeminiProvider.js +32 -558
  406. package/dist/providers/GeminiProvider.js.map +1 -1
  407. package/dist/providers/GenericOpenAICompatibleProvider.d.ts +9 -10
  408. package/dist/providers/GenericOpenAICompatibleProvider.d.ts.map +1 -1
  409. package/dist/providers/GenericOpenAICompatibleProvider.js +13 -16
  410. package/dist/providers/GenericOpenAICompatibleProvider.js.map +1 -1
  411. package/dist/providers/OpenAICompatibleProvider.d.ts +26 -135
  412. package/dist/providers/OpenAICompatibleProvider.d.ts.map +1 -1
  413. package/dist/providers/OpenAICompatibleProvider.js +39 -495
  414. package/dist/providers/OpenAICompatibleProvider.js.map +1 -1
  415. package/dist/providers/OpenAIProvider.d.ts +14 -20
  416. package/dist/providers/OpenAIProvider.d.ts.map +1 -1
  417. package/dist/providers/OpenAIProvider.js +20 -24
  418. package/dist/providers/OpenAIProvider.js.map +1 -1
  419. package/dist/providers/OpenRouterProvider.d.ts +20 -24
  420. package/dist/providers/OpenRouterProvider.d.ts.map +1 -1
  421. package/dist/providers/OpenRouterProvider.js +21 -34
  422. package/dist/providers/OpenRouterProvider.js.map +1 -1
  423. package/dist/providers/ProviderAdapter.d.ts +94 -0
  424. package/dist/providers/ProviderAdapter.d.ts.map +1 -0
  425. package/dist/providers/ProviderAdapter.js +251 -0
  426. package/dist/providers/ProviderAdapter.js.map +1 -0
  427. package/dist/providers/index.d.ts +21 -18
  428. package/dist/providers/index.d.ts.map +1 -1
  429. package/dist/providers/index.js +13 -10
  430. package/dist/providers/index.js.map +1 -1
  431. package/dist/types/agent.d.ts +37 -11
  432. package/dist/types/agent.d.ts.map +1 -1
  433. package/dist/types/ai.d.ts +11 -21
  434. package/dist/types/ai.d.ts.map +1 -1
  435. package/dist/types/compaction.d.ts +2 -2
  436. package/dist/types/compaction.d.ts.map +1 -1
  437. package/dist/types/errors.d.ts +16 -20
  438. package/dist/types/errors.d.ts.map +1 -1
  439. package/dist/types/errors.js +15 -16
  440. package/dist/types/errors.js.map +1 -1
  441. package/dist/types/flow.d.ts +56 -39
  442. package/dist/types/flow.d.ts.map +1 -1
  443. package/dist/types/history.d.ts +1 -1
  444. package/dist/types/history.d.ts.map +1 -1
  445. package/dist/types/index.d.ts +17 -17
  446. package/dist/types/index.d.ts.map +1 -1
  447. package/dist/types/index.js +4 -4
  448. package/dist/types/index.js.map +1 -1
  449. package/dist/types/persistence.d.ts +2 -2
  450. package/dist/types/persistence.d.ts.map +1 -1
  451. package/dist/types/session.d.ts +4 -4
  452. package/dist/types/session.d.ts.map +1 -1
  453. package/dist/types/signals.d.ts +3 -3
  454. package/dist/types/signals.d.ts.map +1 -1
  455. package/dist/types/template.d.ts +2 -2
  456. package/dist/types/template.d.ts.map +1 -1
  457. package/dist/types/tool.d.ts +4 -2
  458. package/dist/types/tool.d.ts.map +1 -1
  459. package/dist/types/tool.js.map +1 -1
  460. package/dist/utils/condition.d.ts +1 -1
  461. package/dist/utils/condition.d.ts.map +1 -1
  462. package/dist/utils/condition.js +2 -2
  463. package/dist/utils/condition.js.map +1 -1
  464. package/dist/utils/event.d.ts +1 -1
  465. package/dist/utils/event.d.ts.map +1 -1
  466. package/dist/utils/event.js +1 -1
  467. package/dist/utils/event.js.map +1 -1
  468. package/dist/utils/history.d.ts +2 -2
  469. package/dist/utils/history.d.ts.map +1 -1
  470. package/dist/utils/history.js +1 -1
  471. package/dist/utils/history.js.map +1 -1
  472. package/dist/utils/index.d.ts +11 -13
  473. package/dist/utils/index.d.ts.map +1 -1
  474. package/dist/utils/index.js +11 -12
  475. package/dist/utils/index.js.map +1 -1
  476. package/dist/utils/serialize.d.ts +17 -0
  477. package/dist/utils/serialize.d.ts.map +1 -1
  478. package/dist/utils/serialize.js +31 -0
  479. package/dist/utils/serialize.js.map +1 -1
  480. package/dist/utils/session.d.ts +23 -3
  481. package/dist/utils/session.d.ts.map +1 -1
  482. package/dist/utils/session.js +35 -6
  483. package/dist/utils/session.js.map +1 -1
  484. package/dist/utils/template.d.ts +3 -3
  485. package/dist/utils/template.d.ts.map +1 -1
  486. package/dist/utils/template.js +1 -1
  487. package/dist/utils/template.js.map +1 -1
  488. package/docs/concepts/architecture.md +3 -3
  489. package/docs/concepts/directives.md +1 -1
  490. package/docs/guides/error-handling.md +46 -45
  491. package/docs/guides/flow-control.md +8 -1
  492. package/docs/guides/instructions.md +15 -6
  493. package/docs/guides/persistence.md +12 -5
  494. package/docs/guides/streaming.md +10 -0
  495. package/docs/migration/README.md +4 -0
  496. package/docs/migration/v2-3-to-v2-4.md +4 -0
  497. package/docs/migration/v2-6-to-v2-7.md +246 -0
  498. package/docs/reference/adapters.md +15 -1
  499. package/docs/reference/branches.md +2 -0
  500. package/docs/reference/create-agent.md +28 -0
  501. package/docs/reference/directive.md +1 -1
  502. package/docs/reference/errors.md +30 -32
  503. package/docs/reference/providers.md +63 -60
  504. package/docs/reference/step.md +28 -21
  505. package/docs/reference/tool.md +14 -5
  506. package/docs/start/02-first-agent.md +8 -4
  507. package/docs/start/03-collect-data.md +19 -10
  508. package/examples/01-quickstart.ts +2 -2
  509. package/examples/02-data-extraction.ts +1 -1
  510. package/examples/03-tools.ts +1 -1
  511. package/examples/04-instructions.ts +2 -2
  512. package/examples/05-branching.ts +3 -3
  513. package/examples/06-flow-control.ts +3 -3
  514. package/examples/07-streaming.ts +1 -1
  515. package/examples/08-persistence.ts +2 -2
  516. package/examples/09-signals.ts +1 -1
  517. package/examples/tsconfig.json +6 -3
  518. package/package.json +9 -7
  519. package/src/adapters/MemoryAdapter.ts +33 -37
  520. package/src/adapters/MongoAdapter.ts +3 -3
  521. package/src/adapters/OpenSearchAdapter.ts +4 -4
  522. package/src/adapters/PostgreSQLAdapter.ts +26 -21
  523. package/src/adapters/PrismaAdapter.ts +4 -4
  524. package/src/adapters/RedisAdapter.ts +84 -37
  525. package/src/adapters/SQLiteAdapter.ts +13 -34
  526. package/src/adapters/index.ts +13 -13
  527. package/src/adapters/sessionRow.ts +57 -0
  528. package/src/core/Agent.ts +64 -18
  529. package/src/core/AutoChainExecutor.ts +44 -57
  530. package/src/core/BranchEvaluator.ts +5 -5
  531. package/src/core/CompactionEngine.ts +42 -8
  532. package/src/core/DirectiveChainTracker.ts +3 -3
  533. package/src/core/Events.ts +2 -2
  534. package/src/core/Flow.ts +9 -9
  535. package/src/core/FlowRouter.ts +46 -20
  536. package/src/core/PersistenceManager.ts +4 -4
  537. package/src/core/PromptComposer.ts +8 -8
  538. package/src/core/PromptSectionCache.ts +2 -2
  539. package/src/core/ResponseEngine.ts +6 -6
  540. package/src/core/ResponseGenerationError.ts +3 -6
  541. package/src/core/ResponseModal.ts +205 -39
  542. package/src/core/ResponsePipeline.ts +301 -107
  543. package/src/core/SessionFinalizer.ts +40 -10
  544. package/src/core/SessionManager.ts +61 -27
  545. package/src/core/SignalCoordinator.ts +7 -7
  546. package/src/core/SignalEvaluator.ts +6 -6
  547. package/src/core/SignalProcessor.ts +13 -93
  548. package/src/core/Step.ts +87 -10
  549. package/src/core/StepLifecycle.ts +129 -26
  550. package/src/core/StreamingToolExecutor.ts +33 -8
  551. package/src/core/ToolLoopExecutor.ts +206 -80
  552. package/src/core/ToolManager.ts +53 -26
  553. package/src/core/createAgent.ts +2 -2
  554. package/src/core/flow-namespace.ts +31 -2
  555. package/src/core/toolGates.ts +2 -2
  556. package/src/index.ts +59 -45
  557. package/src/providers/AnthropicProvider.ts +44 -595
  558. package/src/providers/DeepSeekProvider.ts +27 -92
  559. package/src/providers/GeminiProvider.ts +41 -752
  560. package/src/providers/GenericOpenAICompatibleProvider.ts +19 -27
  561. package/src/providers/OpenAICompatibleProvider.ts +58 -764
  562. package/src/providers/OpenAIProvider.ts +31 -55
  563. package/src/providers/OpenRouterProvider.ts +40 -70
  564. package/src/providers/ProviderAdapter.ts +368 -0
  565. package/src/providers/index.ts +21 -23
  566. package/src/types/agent.ts +36 -11
  567. package/src/types/ai.ts +11 -21
  568. package/src/types/compaction.ts +2 -2
  569. package/src/types/errors.ts +17 -35
  570. package/src/types/flow.ts +44 -46
  571. package/src/types/history.ts +1 -1
  572. package/src/types/index.ts +18 -17
  573. package/src/types/persistence.ts +2 -2
  574. package/src/types/session.ts +4 -4
  575. package/src/types/signals.ts +3 -3
  576. package/src/types/template.ts +2 -2
  577. package/src/types/tool.ts +4 -2
  578. package/src/utils/condition.ts +3 -3
  579. package/src/utils/event.ts +1 -1
  580. package/src/utils/history.ts +3 -3
  581. package/src/utils/index.ts +14 -15
  582. package/src/utils/serialize.ts +38 -0
  583. package/src/utils/session.ts +46 -9
  584. package/src/utils/template.ts +3 -3
  585. package/dist/cjs/core/DirectiveBus.d.ts +0 -88
  586. package/dist/cjs/core/DirectiveBus.d.ts.map +0 -1
  587. package/dist/cjs/core/DirectiveBus.js +0 -196
  588. package/dist/cjs/core/DirectiveBus.js.map +0 -1
  589. package/dist/cjs/providers/errorClassification.d.ts +0 -61
  590. package/dist/cjs/providers/errorClassification.d.ts.map +0 -1
  591. package/dist/cjs/providers/errorClassification.js +0 -123
  592. package/dist/cjs/providers/errorClassification.js.map +0 -1
  593. package/dist/cjs/utils/retry.d.ts +0 -67
  594. package/dist/cjs/utils/retry.d.ts.map +0 -1
  595. package/dist/cjs/utils/retry.js +0 -201
  596. package/dist/cjs/utils/retry.js.map +0 -1
  597. package/dist/core/DirectiveBus.d.ts +0 -88
  598. package/dist/core/DirectiveBus.d.ts.map +0 -1
  599. package/dist/core/DirectiveBus.js +0 -192
  600. package/dist/core/DirectiveBus.js.map +0 -1
  601. package/dist/providers/errorClassification.d.ts +0 -61
  602. package/dist/providers/errorClassification.d.ts.map +0 -1
  603. package/dist/providers/errorClassification.js +0 -116
  604. package/dist/providers/errorClassification.js.map +0 -1
  605. package/dist/utils/retry.d.ts +0 -67
  606. package/dist/utils/retry.d.ts.map +0 -1
  607. package/dist/utils/retry.js +0 -193
  608. package/dist/utils/retry.js.map +0 -1
  609. package/src/core/DirectiveBus.ts +0 -248
  610. package/src/providers/errorClassification.ts +0 -172
  611. package/src/utils/retry.ts +0 -274
@@ -2,42 +2,42 @@
2
2
  * Database adapters for persistence
3
3
  */
4
4
 
5
- export { PrismaAdapter } from "./PrismaAdapter";
5
+ export { PrismaAdapter } from "./PrismaAdapter.js";
6
6
  export type {
7
7
  PrismaClient,
8
8
  FieldMappings,
9
9
  PrismaAdapterOptions,
10
- } from "./PrismaAdapter";
10
+ } from "./PrismaAdapter.js";
11
11
 
12
- export { RedisAdapter } from "./RedisAdapter";
13
- export type { RedisClient, RedisAdapterOptions } from "./RedisAdapter";
12
+ export { RedisAdapter } from "./RedisAdapter.js";
13
+ export type { RedisClient, RedisAdapterOptions } from "./RedisAdapter.js";
14
14
 
15
- export { MongoAdapter } from "./MongoAdapter";
15
+ export { MongoAdapter } from "./MongoAdapter.js";
16
16
  export type {
17
17
  MongoClient,
18
18
  MongoDatabase,
19
19
  MongoCollection,
20
20
  MongoAdapterOptions,
21
- } from "./MongoAdapter";
21
+ } from "./MongoAdapter.js";
22
22
 
23
- export { PostgreSQLAdapter } from "./PostgreSQLAdapter";
23
+ export { PostgreSQLAdapter } from "./PostgreSQLAdapter.js";
24
24
  export type {
25
25
  PgClient,
26
26
  PgQueryResult,
27
27
  PostgreSQLAdapterOptions,
28
- } from "./PostgreSQLAdapter";
28
+ } from "./PostgreSQLAdapter.js";
29
29
 
30
- export { SQLiteAdapter } from "./SQLiteAdapter";
30
+ export { SQLiteAdapter } from "./SQLiteAdapter.js";
31
31
  export type {
32
32
  SqliteDatabase,
33
33
  SqliteStatement,
34
34
  SQLiteAdapterOptions,
35
- } from "./SQLiteAdapter";
35
+ } from "./SQLiteAdapter.js";
36
36
 
37
- export { MemoryAdapter } from "./MemoryAdapter";
37
+ export { MemoryAdapter } from "./MemoryAdapter.js";
38
38
 
39
- export { OpenSearchAdapter } from "./OpenSearchAdapter";
39
+ export { OpenSearchAdapter } from "./OpenSearchAdapter.js";
40
40
  export type {
41
41
  OpenSearchClient,
42
42
  OpenSearchAdapterOptions,
43
- } from "./OpenSearchAdapter";
43
+ } from "./OpenSearchAdapter.js";
@@ -0,0 +1,57 @@
1
+ /**
2
+ * Shared row-mapping for the SQL-shaped session adapters (PostgreSQL, SQLite)
3
+ * and date coercion for JSON-round-tripped values (Redis).
4
+ *
5
+ * One implementation so the adapters can't drift on what a stored session row
6
+ * means. PostgreSQL's driver returns JSONB pre-parsed and timestamptz as Date
7
+ * instances; SQLite returns strings — both shapes are accepted here.
8
+ */
9
+
10
+ import type {
11
+ CollectedStateData,
12
+ SessionData,
13
+ SessionStatus,
14
+ } from "../types/index.js";
15
+
16
+ /**
17
+ * Coerce a raw stored value into a Date. Drivers variously hand back Date
18
+ * instances (node-postgres timestamptz) or ISO strings (SQLite, JSON blobs).
19
+ * `null`/`undefined` maps to `undefined`.
20
+ */
21
+ export function coerceDate(value: unknown): Date | undefined {
22
+ if (value == null) return undefined;
23
+ return value instanceof Date ? value : new Date(value as string);
24
+ }
25
+
26
+ /**
27
+ * Map a raw snake_case row onto the camelCase SessionData interface.
28
+ * `collected_data` arrives JSONB-parsed on PostgreSQL and as a raw string on
29
+ * SQLite — both are handled. Exported for the adapter mapping tests.
30
+ */
31
+ export function deserializeSessionRow<TData = Record<string, unknown>>(
32
+ row: Record<string, unknown>
33
+ ): SessionData<TData> {
34
+ const collected = row.collected_data;
35
+ return {
36
+ id: row.id as string,
37
+ userId: (row.user_id as string) || undefined,
38
+ agentName: (row.agent_name as string) || undefined,
39
+ status: row.status as SessionStatus,
40
+ currentFlow: (row.current_flow as string) || undefined,
41
+ currentStep: (row.current_step as string) || undefined,
42
+ collectedData:
43
+ collected == null
44
+ ? undefined
45
+ : typeof collected === "string"
46
+ ? (JSON.parse(collected) as CollectedStateData<TData>)
47
+ : (collected as CollectedStateData<TData>),
48
+ messageCount: (row.message_count as number) || 0,
49
+ lastMessageAt: coerceDate(row.last_message_at),
50
+ completedAt: coerceDate(row.completed_at),
51
+ version: (row.version as number | null) ?? undefined,
52
+ // created_at/updated_at are NOT NULL in every adapter's schema; the
53
+ // fallback only covers hand-crafted rows.
54
+ createdAt: coerceDate(row.created_at) ?? new Date(),
55
+ updatedAt: coerceDate(row.updated_at) ?? new Date(),
56
+ };
57
+ }
package/src/core/Agent.ts CHANGED
@@ -18,12 +18,12 @@ import type {
18
18
  AiProvider,
19
19
  CompactionOptions,
20
20
  Directive,
21
- } from "../types";
22
- import type { Signal } from "../types/signals";
23
- import { NotImplementedError } from "../types/errors";
24
- import { SignalProcessor } from "./SignalProcessor";
25
- import { SignalEvaluator } from "./SignalEvaluator";
26
- import type { StreamOptions, GenerateOptions, RespondParams, ResponseModalDeps } from "./ResponseModal";
21
+ } from "../types/index.js";
22
+ import type { Signal } from "../types/signals.js";
23
+ import { NotImplementedError } from "../types/errors.js";
24
+ import { SignalProcessor } from "./SignalProcessor.js";
25
+ import { SignalEvaluator } from "./SignalEvaluator.js";
26
+ import type { StreamOptions, GenerateOptions, RespondParams, ResponseModalDeps } from "./ResponseModal.js";
27
27
  import {
28
28
  mergeCollected,
29
29
  enterFlow,
@@ -32,18 +32,18 @@ import {
32
32
  logger,
33
33
  LoggerLevel,
34
34
  generateSignalId,
35
- } from "../utils";
35
+ } from "../utils/index.js";
36
36
 
37
- import { Flow } from "./Flow";
38
- import { Step, FlowConfigurationError as StepFlowConfigurationError } from "./Step";
39
- import { PersistenceManager } from "./PersistenceManager";
40
- import { SessionManager } from "./SessionManager";
41
- import { FlowRouter } from "./FlowRouter";
42
- import { PromptSectionCache } from "./PromptSectionCache";
37
+ import { Flow } from "./Flow.js";
38
+ import { Step, FlowConfigurationError as StepFlowConfigurationError } from "./Step.js";
39
+ import { PersistenceManager } from "./PersistenceManager.js";
40
+ import { SessionManager } from "./SessionManager.js";
41
+ import { FlowRouter } from "./FlowRouter.js";
42
+ import { PromptSectionCache } from "./PromptSectionCache.js";
43
43
 
44
- import { ResponseModal } from "./ResponseModal";
45
- import { ToolManager } from "./ToolManager";
46
- import { CompactionEngine } from "./CompactionEngine";
44
+ import { ResponseModal } from "./ResponseModal.js";
45
+ import { ToolManager } from "./ToolManager.js";
46
+ import { CompactionEngine } from "./CompactionEngine.js";
47
47
 
48
48
  /**
49
49
  * Error thrown when data validation fails
@@ -205,8 +205,14 @@ export class Agent<TContext = unknown, TData = unknown> implements ResponseModal
205
205
  this.signalProcessor = undefined;
206
206
  }
207
207
 
208
- // Set log level based on debug option
208
+ // Set log level based on debug option. NOTE: loglevel's default logger is
209
+ // process-global — one agent enabling debug turns on DEBUG for every agent
210
+ // in the process. Warned so multi-tenant embedders aren't surprised.
209
211
  if (options.debug) {
212
+ logger.warn(
213
+ `[Agent] "${options.name}" enabled debug logging via the PROCESS-GLOBAL loglevel level. ` +
214
+ `Every agent in this process now logs at DEBUG. Scope logging in your host if needed.`
215
+ );
210
216
  logger.setLevel(LoggerLevel.DEBUG);
211
217
  }
212
218
 
@@ -868,6 +874,26 @@ export class Agent<TContext = unknown, TData = unknown> implements ResponseModal
868
874
  }
869
875
  }
870
876
 
877
+ // Overlap detection: warn (don't throw) when the incoming flow's
878
+ // requiredFields intersect another registered flow's — the schema is
879
+ // agent-level, so both flows complete together and one is silently
880
+ // excluded from routing.
881
+ if (options.requiredFields && options.requiredFields.length > 0) {
882
+ const incoming = new Set(options.requiredFields.map(String));
883
+ for (const existing of this._flows) {
884
+ const shared = (existing.requiredFields ?? [])
885
+ .map(String)
886
+ .filter((f) => incoming.has(f));
887
+ if (shared.length > 0) {
888
+ logger.warn(
889
+ `[FlowConfigurationError] Overlapping requiredFields: flows "${existing.title}" and "${options.title}" share [${shared.join(', ')}]. ` +
890
+ `The schema is agent-level, so data collected for one flow marks the other complete and excludes it from routing. ` +
891
+ `Give each flow distinct requiredFields, or set \`reentrant: true\` on flows that legitimately share fields.`
892
+ );
893
+ }
894
+ }
895
+ }
896
+
871
897
  const flow = new Flow<TContext, TData>(options, this);
872
898
 
873
899
  // Validate that step collect fields reference valid schema keys
@@ -1151,12 +1177,20 @@ export class Agent<TContext = unknown, TData = unknown> implements ResponseModal
1151
1177
  *
1152
1178
  * String form desugars to `{ goTo: target }`.
1153
1179
  *
1180
+ * Durability: with a persistence adapter and autoSave configured (the
1181
+ * defaults), the queued directive is persisted immediately — safe for
1182
+ * out-of-process callers like webhooks or cron. Without an adapter it is
1183
+ * memory-only, as is `persistence.autoSave: false` (then persisting before
1184
+ * the next turn is the caller's job).
1185
+ *
1154
1186
  * @param target - Flow ID/title string (desugars to `{ goTo: target }`) or a full Directive
1155
1187
  * @param session - Session to update (uses current session if not provided)
1156
1188
  * @returns Updated session with `pendingDirective` set
1157
1189
  *
1158
1190
  * @throws FlowConfigurationError if the string target doesn't match any flow
1159
1191
  * @throws FlowConfigurationError if the directive fails validation
1192
+ * @throws SessionConflictError when persistence is enabled and another writer
1193
+ * moved the stored session since this copy was loaded
1160
1194
  *
1161
1195
  * @example
1162
1196
  * // String shorthand — desugars to { goTo: 'Feedback' }
@@ -1166,7 +1200,6 @@ export class Agent<TContext = unknown, TData = unknown> implements ResponseModal
1166
1200
  * // Full directive
1167
1201
  * const updated = await agent.dispatch({ goTo: 'Billing', reply: 'Transferring you now.' }, session);
1168
1202
  */
1169
- // eslint-disable-next-line @typescript-eslint/require-await
1170
1203
  async dispatch(
1171
1204
  target: string | Directive<TContext, TData>,
1172
1205
  session?: SessionState<TData>
@@ -1225,6 +1258,19 @@ export class Agent<TContext = unknown, TData = unknown> implements ResponseModal
1225
1258
  },
1226
1259
  };
1227
1260
 
1261
+ // Durability: with an adapter + autoSave configured, dispatch persists
1262
+ // immediately — webhooks/cron run out-of-process from the responder, and a
1263
+ // memory-only queue would evaporate with this process. The save stamps the
1264
+ // new version back onto updatedSession, so the next turn's auto-save CAS
1265
+ // stays clean. Persisting BEFORE the in-memory sync keeps the existing
1266
+ // invariant: a throwing dispatch leaves the session untouched.
1267
+ if (this._persistenceManager && this.options.persistence?.autoSave !== false) {
1268
+ await this._persistenceManager.saveSessionState(updatedSession.id, updatedSession);
1269
+ logger.debug(
1270
+ `[Agent] Dispatched directive persisted to adapter for session ${updatedSession.id}`
1271
+ );
1272
+ }
1273
+
1228
1274
  // Update current session in place if no explicit session was passed
1229
1275
  if (!session && this.session.current) {
1230
1276
  this.session.syncSession(updatedSession);
@@ -15,36 +15,30 @@
15
15
  * Implements Algorithm 1 from `.kiro/specs/auto-steps/design.md`.
16
16
  */
17
17
 
18
- import type { SessionState } from "../types";
19
- import type { Event } from "../types/history";
20
- import { FlowConfigurationError, Step } from "./Step";
21
- import { Flow } from "./Flow";
22
- import { enterStep, mergeCollected, logger } from "../utils";
23
- import { createTemplateContext } from "../utils/template";
18
+ import type { Directive, SessionState } from "../types/index.js";
19
+ import type { Event } from "../types/history.js";
20
+ import { FlowConfigurationError, Step } from "./Step.js";
21
+ import { Flow } from "./Flow.js";
22
+ import { flow } from "./flow-namespace.js";
23
+ import { enterStep, mergeCollected, logger } from "../utils/index.js";
24
+ import { createTemplateContext } from "../utils/template.js";
24
25
  import type {
25
26
  StoppedReason,
26
27
  BranchMap,
27
28
  BranchEntry,
28
29
  BranchPredicateContext,
29
- } from "../types/flow";
30
- import { evaluateIfPredicates } from "../utils/condition";
30
+ } from "../types/flow.js";
31
+ import { evaluateIfPredicates } from "../utils/condition.js";
31
32
 
32
33
  /**
33
34
  * The directive-like object that `prepare` may return on auto-steps.
34
- * This is a structural subset of Directive (pre-LLM fields).
35
+ * A structural subset of Directive (pre-LLM + position fields), so results
36
+ * merge through the canonical Algorithm 4 (`flow.merge`).
35
37
  */
36
- export interface AutoStepPrepareResult {
37
- dataUpdate?: Record<string, unknown>;
38
- contextUpdate?: Record<string, unknown>;
39
- halt?: boolean;
40
- reply?: string;
41
- /** Position-changing: jump to a step within the current flow. */
42
- goToStep?: string;
43
- /** Position-changing: jump to another flow. */
44
- goTo?: string;
45
- /** Position-changing: mark the flow as complete. */
46
- complete?: boolean;
47
- }
38
+ export type AutoStepPrepareResult<TContext = unknown, TData = unknown> = Pick<
39
+ Directive<TContext, TData>,
40
+ "dataUpdate" | "contextUpdate" | "halt" | "reply" | "goToStep" | "goTo" | "complete"
41
+ >;
48
42
 
49
43
  /**
50
44
  * Result of running the auto-chain.
@@ -53,7 +47,7 @@ export interface AutoChainResult<TContext = unknown, TData = unknown> {
53
47
  /** The interactive step to hand off to the LLM path (undefined if chain ended without one). */
54
48
  resolvedStep?: Step<TContext, TData>;
55
49
  /** The merged directive from the halting auto-step's prepare (only set when stoppedReason = 'halt'). */
56
- mergedDirective?: AutoStepPrepareResult;
50
+ mergedDirective?: AutoStepPrepareResult<TContext, TData>;
57
51
  /** Why the chain stopped, if it didn't reach an interactive step normally. */
58
52
  stoppedReason?: StoppedReason;
59
53
  /** Updated session after all auto-step state writes. */
@@ -192,10 +186,24 @@ export class AutoChainExecutor<TContext = unknown, TData = unknown> {
192
186
 
193
187
  // STEP 5: position-changing directive (goToStep, goTo, complete)
194
188
  if (merged.goToStep) {
195
- const targetStep = flow.getStep(merged.goToStep);
189
+ // String form targets the current flow; object form carrying
190
+ // a different `flow` defers to the pipeline for cross-flow
191
+ // resolution (same as goTo).
192
+ const goTarget = typeof merged.goToStep === "string"
193
+ ? { step: merged.goToStep, flowId: undefined }
194
+ : { step: merged.goToStep.step, flowId: merged.goToStep.flow };
195
+ if (goTarget.flowId && goTarget.flowId !== flow.id) {
196
+ return {
197
+ resolvedStep: step,
198
+ mergedDirective: merged,
199
+ stoppedReason: 'goto',
200
+ session,
201
+ };
202
+ }
203
+ const targetStep = flow.getStep(goTarget.step);
196
204
  if (!targetStep) {
197
205
  throw new FlowConfigurationError(
198
- `[FlowConfigurationError] Auto-step "${step.id}" goToStep targets unknown step: "${merged.goToStep}" does not exist in the current flow. ` +
206
+ `[FlowConfigurationError] Auto-step "${step.id}" goToStep targets unknown step: "${goTarget.step}" does not exist in the current flow. ` +
199
207
  `Check the step id or use goTo to target a different flow.`
200
208
  );
201
209
  }
@@ -263,26 +271,15 @@ export class AutoChainExecutor<TContext = unknown, TData = unknown> {
263
271
  }
264
272
 
265
273
  /**
266
- * Run onEnter and prepare hooks for an auto-step, collecting any
274
+ * Run the prepare hook for an auto-step, collecting any
267
275
  * Directive return values (pre-LLM fields honored).
268
276
  */
269
277
  private async runStepHooks(
270
278
  step: Step<TContext, TData>,
271
279
  session: SessionState<TData>,
272
280
  context: TContext
273
- ): Promise<AutoStepPrepareResult | undefined> {
274
- let merged: AutoStepPrepareResult | undefined;
275
-
276
- // onEnter (future hook — not yet in StepOptions, but handle if present)
277
- const stepWithHooks = step as Step<TContext, TData> & {
278
- onEnter?: (context: TContext, data: Partial<TData> | undefined) => Promise<unknown>;
279
- };
280
- if (typeof stepWithHooks.onEnter === 'function') {
281
- const onEnterResult = await stepWithHooks.onEnter(context, session.data);
282
- if (onEnterResult && typeof onEnterResult === 'object') {
283
- merged = this.mergeDirectives(merged, onEnterResult as AutoStepPrepareResult);
284
- }
285
- }
281
+ ): Promise<AutoStepPrepareResult<TContext, TData> | undefined> {
282
+ let merged: AutoStepPrepareResult<TContext, TData> | undefined;
286
283
 
287
284
  // prepare hook — for auto-steps, prepare may return a Directive with pre-LLM fields
288
285
  if (step.prepare) {
@@ -296,7 +293,7 @@ export class AutoChainExecutor<TContext = unknown, TData = unknown> {
296
293
  );
297
294
  // prepare may return void or a directive-like object
298
295
  if (prepareResult && typeof prepareResult === 'object') {
299
- merged = this.mergeDirectives(merged, prepareResult as AutoStepPrepareResult);
296
+ merged = this.mergeDirectives(merged, prepareResult as AutoStepPrepareResult<TContext, TData>);
300
297
  }
301
298
  } else {
302
299
  // Tool reference (string or Tool object) — for auto-steps, tool-based
@@ -312,27 +309,17 @@ export class AutoChainExecutor<TContext = unknown, TData = unknown> {
312
309
  }
313
310
 
314
311
  /**
315
- * Merge two directive-like objects. Later values override earlier ones
316
- * for scalar fields; object fields (dataUpdate, contextUpdate) are deep-merged.
312
+ * Merge two directive-like objects via the canonical Algorithm 4 merge —
313
+ * one algorithm shared with tools, hooks and signals.
317
314
  */
318
315
  private mergeDirectives(
319
- base: AutoStepPrepareResult | undefined,
320
- incoming: AutoStepPrepareResult
321
- ): AutoStepPrepareResult {
316
+ base: AutoStepPrepareResult<TContext, TData> | undefined,
317
+ incoming: AutoStepPrepareResult<TContext, TData>
318
+ ): AutoStepPrepareResult<TContext, TData> {
322
319
  if (!base) return { ...incoming };
323
- return {
324
- dataUpdate: incoming.dataUpdate
325
- ? { ...(base.dataUpdate || {}), ...incoming.dataUpdate }
326
- : base.dataUpdate,
327
- contextUpdate: incoming.contextUpdate
328
- ? { ...(base.contextUpdate || {}), ...incoming.contextUpdate }
329
- : base.contextUpdate,
330
- halt: incoming.halt ?? base.halt,
331
- reply: incoming.reply ?? base.reply,
332
- goTo: incoming.goTo ?? base.goTo,
333
- goToStep: incoming.goToStep ?? base.goToStep,
334
- complete: incoming.complete ?? base.complete,
335
- };
320
+ // AutoStepPrepareResult is a structural subset of Directive, so both
321
+ // sides flow through the canonical merge directly — no casts needed.
322
+ return flow.merge<TContext, TData>(base, incoming);
336
323
  }
337
324
 
338
325
  /**
@@ -12,11 +12,11 @@ import type {
12
12
  BranchMap,
13
13
  BranchPredicateContext,
14
14
  Directive,
15
- } from "../types/flow";
16
- import type { AiProvider } from "../types/ai";
17
- import type { Event } from "../types/history";
18
- import { eventsToHistory, logger } from "../utils";
19
- import { splitWhenConditions, evaluateIfPredicates, type WhenConditionGroups } from "../utils/condition";
15
+ } from "../types/flow.js";
16
+ import type { AiProvider } from "../types/ai.js";
17
+ import type { Event } from "../types/history.js";
18
+ import { eventsToHistory, logger } from "../utils/index.js";
19
+ import { splitWhenConditions, evaluateIfPredicates, type WhenConditionGroups } from "../utils/condition.js";
20
20
 
21
21
  /**
22
22
  * The AI condition evaluator function signature.
@@ -9,8 +9,8 @@
9
9
  */
10
10
 
11
11
  import log from "loglevel";
12
- import type { HistoryItem } from "../types/history";
13
- import type { CompactionOptions, CompactionResult } from "../types/compaction";
12
+ import type { HistoryItem } from "../types/history.js";
13
+ import type { CompactionOptions, CompactionResult } from "../types/compaction.js";
14
14
 
15
15
  export class CompactionEngine {
16
16
  /**
@@ -180,6 +180,27 @@ export class CompactionEngine {
180
180
  }
181
181
  }
182
182
 
183
+ /**
184
+ * Adjust the left edge of a preserved window so it never begins with an
185
+ * orphaned tool result — a role:'tool' message whose assistant tool_calls
186
+ * parent lies outside the window. Providers reject such histories at the
187
+ * next request.
188
+ *
189
+ * The preserve count is a target, not a hard guarantee: when the naive
190
+ * message-count boundary would split an assistant/tool pair, the window
191
+ * grows left just enough to keep the pair together.
192
+ */
193
+ private static alignPreserveStart(
194
+ history: HistoryItem[],
195
+ start: number
196
+ ): number {
197
+ let aligned = Math.max(0, Math.min(start, history.length));
198
+ while (aligned > 0 && history[aligned].role === "tool") {
199
+ aligned--;
200
+ }
201
+ return aligned;
202
+ }
203
+
183
204
  /**
184
205
  * Aggressive truncation fallback: remove oldest messages (no LLM needed).
185
206
  * Keeps only the most recent messages that fit within the token budget.
@@ -191,11 +212,16 @@ export class CompactionEngine {
191
212
  const threshold = options.maxTokens * options.compactionThreshold;
192
213
  const preserveCount = options.preserveRecentCount;
193
214
 
194
- // Always preserve the last preserveRecentCount messages
195
- const preserved = history.slice(-preserveCount);
215
+ // Always preserve the last ~preserveRecentCount messages (aligned so
216
+ // the window never opens on an orphaned tool result)
217
+ const preserveStart = CompactionEngine.alignPreserveStart(
218
+ history,
219
+ Math.max(0, history.length - preserveCount)
220
+ );
221
+ const preserved = history.slice(preserveStart);
196
222
 
197
223
  // Try to keep as many older messages as fit within budget
198
- const older = history.slice(0, -preserveCount);
224
+ const older = history.slice(0, preserveStart);
199
225
  const result: HistoryItem[] = [];
200
226
 
201
227
  // Add older messages from most recent backwards until we'd exceed budget
@@ -219,7 +245,9 @@ export class CompactionEngine {
219
245
  * Layer 3 (micro_compact): Compress verbose tool outputs inline
220
246
  * Layer 4 (auto_compact): Summarize old messages via LLM provider
221
247
  *
222
- * The last `preserveRecentCount` messages are NEVER modified or removed.
248
+ * The last `preserveRecentCount` messages are NEVER modified or removed
249
+ * (the preserved window may extend slightly further left so it never
250
+ * splits an assistant/tool pair at its boundary).
223
251
  */
224
252
  static async checkAndCompact(
225
253
  history: HistoryItem[],
@@ -277,8 +305,14 @@ export class CompactionEngine {
277
305
  }
278
306
 
279
307
  // Layer 4: Auto-compact (summarize old messages via LLM)
280
- const oldMessages = microCompacted.slice(0, -preserveCount);
281
- const recentMessages = microCompacted.slice(-preserveCount);
308
+ // preserveRecentCount is a target, not a hard guarantee: the window's
309
+ // left edge is aligned so it never opens on an orphaned tool result.
310
+ const preserveStart = CompactionEngine.alignPreserveStart(
311
+ microCompacted,
312
+ Math.max(0, microCompacted.length - preserveCount)
313
+ );
314
+ const oldMessages = microCompacted.slice(0, preserveStart);
315
+ const recentMessages = microCompacted.slice(preserveStart);
282
316
 
283
317
  const summary = await CompactionEngine.summarizeMessages(
284
318
  oldMessages,
@@ -12,9 +12,9 @@
12
12
  * Validates: Requirements 22.1, 22.2, 22.3
13
13
  */
14
14
 
15
- import { FlowConfigurationError } from "./Step";
16
- import { logger } from "../utils";
17
- import type { Directive } from "../types/flow";
15
+ import { FlowConfigurationError } from "./Step.js";
16
+ import { logger } from "../utils/index.js";
17
+ import type { Directive } from "../types/flow.js";
18
18
 
19
19
  /**
20
20
  * Entry in the directive chain log — records what was emitted and by whom.
@@ -11,8 +11,8 @@ import type {
11
11
  MessageData,
12
12
  HistoryItem,
13
13
  History,
14
- } from "../types";
15
- import { EventKind, MessageRole } from "../types";
14
+ } from "../types/index.js";
15
+ import { EventKind, MessageRole } from "../types/index.js";
16
16
 
17
17
  /**
18
18
  * Convert a simple JSON history message to an internal Event
package/src/core/Flow.ts CHANGED
@@ -13,16 +13,16 @@ import type {
13
13
  TemplateContext,
14
14
  ConditionEvaluationResult,
15
15
  Directive,
16
- } from "../types";
17
- import type { SessionState } from "../types/session";
18
- import type { StepResult } from "../types/flow";
19
- import type { ConditionWhen, ConditionIf } from "../types/flow";
16
+ } from "../types/index.js";
17
+ import type { SessionState } from "../types/session.js";
18
+ import type { StepResult } from "../types/flow.js";
19
+ import type { ConditionWhen, ConditionIf } from "../types/flow.js";
20
20
 
21
- import { generateFlowId, logger } from "../utils";
22
- import { splitWhenConditions } from "../utils/condition";
21
+ import { generateFlowId, logger } from "../utils/index.js";
22
+ import { splitWhenConditions } from "../utils/condition.js";
23
23
 
24
- import { Step, FlowConfigurationError } from "./Step";
25
- import { Agent } from './Agent'
24
+ import { Step, FlowConfigurationError } from "./Step.js";
25
+ import { Agent } from './Agent.js'
26
26
 
27
27
  /**
28
28
  * Represents a conversational flow/journey
@@ -647,7 +647,7 @@ export class Flow<TContext = unknown, TData = unknown> {
647
647
  context: context as TContext,
648
648
  data: session.data ?? {} as Partial<TData>,
649
649
  session: {} as SessionState<TData>,
650
- history: [] as import("../types/history").Event[],
650
+ history: [] as import("../types/history.js").Event[],
651
651
  dispatch: () => { },
652
652
  };
653
653
  const result = await this.hooks.onComplete(hookCtx);