@falai/agent 0.1.0-alpha2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (499) hide show
  1. package/README.md +797 -0
  2. package/dist/cjs/package.json +1 -0
  3. package/dist/cjs/src/adapters/MemoryAdapter.d.ts +47 -0
  4. package/dist/cjs/src/adapters/MemoryAdapter.d.ts.map +1 -0
  5. package/dist/cjs/src/adapters/MemoryAdapter.js +202 -0
  6. package/dist/cjs/src/adapters/MemoryAdapter.js.map +1 -0
  7. package/dist/cjs/src/adapters/MongoAdapter.d.ts +97 -0
  8. package/dist/cjs/src/adapters/MongoAdapter.d.ts.map +1 -0
  9. package/dist/cjs/src/adapters/MongoAdapter.js +168 -0
  10. package/dist/cjs/src/adapters/MongoAdapter.js.map +1 -0
  11. package/dist/cjs/src/adapters/OpenSearchAdapter.d.ts +169 -0
  12. package/dist/cjs/src/adapters/OpenSearchAdapter.d.ts.map +1 -0
  13. package/dist/cjs/src/adapters/OpenSearchAdapter.js +458 -0
  14. package/dist/cjs/src/adapters/OpenSearchAdapter.js.map +1 -0
  15. package/dist/cjs/src/adapters/PostgreSQLAdapter.d.ts +71 -0
  16. package/dist/cjs/src/adapters/PostgreSQLAdapter.d.ts.map +1 -0
  17. package/dist/cjs/src/adapters/PostgreSQLAdapter.js +260 -0
  18. package/dist/cjs/src/adapters/PostgreSQLAdapter.js.map +1 -0
  19. package/dist/cjs/src/adapters/PrismaAdapter.d.ts +115 -0
  20. package/dist/cjs/src/adapters/PrismaAdapter.d.ts.map +1 -0
  21. package/dist/cjs/src/adapters/PrismaAdapter.js +366 -0
  22. package/dist/cjs/src/adapters/PrismaAdapter.js.map +1 -0
  23. package/dist/cjs/src/adapters/RedisAdapter.d.ts +71 -0
  24. package/dist/cjs/src/adapters/RedisAdapter.d.ts.map +1 -0
  25. package/dist/cjs/src/adapters/RedisAdapter.js +231 -0
  26. package/dist/cjs/src/adapters/RedisAdapter.js.map +1 -0
  27. package/dist/cjs/src/adapters/SQLiteAdapter.d.ts +69 -0
  28. package/dist/cjs/src/adapters/SQLiteAdapter.d.ts.map +1 -0
  29. package/dist/cjs/src/adapters/SQLiteAdapter.js +312 -0
  30. package/dist/cjs/src/adapters/SQLiteAdapter.js.map +1 -0
  31. package/dist/cjs/src/adapters/index.d.ts +17 -0
  32. package/dist/cjs/src/adapters/index.d.ts.map +1 -0
  33. package/dist/cjs/src/adapters/index.js +21 -0
  34. package/dist/cjs/src/adapters/index.js.map +1 -0
  35. package/dist/cjs/src/constants/index.d.ts +10 -0
  36. package/dist/cjs/src/constants/index.d.ts.map +1 -0
  37. package/dist/cjs/src/constants/index.js +13 -0
  38. package/dist/cjs/src/constants/index.js.map +1 -0
  39. package/dist/cjs/src/core/Agent.d.ts +232 -0
  40. package/dist/cjs/src/core/Agent.d.ts.map +1 -0
  41. package/dist/cjs/src/core/Agent.js +741 -0
  42. package/dist/cjs/src/core/Agent.js.map +1 -0
  43. package/dist/cjs/src/core/Events.d.ts +26 -0
  44. package/dist/cjs/src/core/Events.d.ts.map +1 -0
  45. package/dist/cjs/src/core/Events.js +144 -0
  46. package/dist/cjs/src/core/Events.js.map +1 -0
  47. package/dist/cjs/src/core/PersistenceManager.d.ts +98 -0
  48. package/dist/cjs/src/core/PersistenceManager.d.ts.map +1 -0
  49. package/dist/cjs/src/core/PersistenceManager.js +261 -0
  50. package/dist/cjs/src/core/PersistenceManager.js.map +1 -0
  51. package/dist/cjs/src/core/PromptComposer.d.ts +27 -0
  52. package/dist/cjs/src/core/PromptComposer.d.ts.map +1 -0
  53. package/dist/cjs/src/core/PromptComposer.js +194 -0
  54. package/dist/cjs/src/core/PromptComposer.js.map +1 -0
  55. package/dist/cjs/src/core/ResponseEngine.d.ts +32 -0
  56. package/dist/cjs/src/core/ResponseEngine.d.ts.map +1 -0
  57. package/dist/cjs/src/core/ResponseEngine.js +202 -0
  58. package/dist/cjs/src/core/ResponseEngine.js.map +1 -0
  59. package/dist/cjs/src/core/ResponseModal.d.ts +222 -0
  60. package/dist/cjs/src/core/ResponseModal.d.ts.map +1 -0
  61. package/dist/cjs/src/core/ResponseModal.js +1588 -0
  62. package/dist/cjs/src/core/ResponseModal.js.map +1 -0
  63. package/dist/cjs/src/core/ResponsePipeline.d.ts +175 -0
  64. package/dist/cjs/src/core/ResponsePipeline.d.ts.map +1 -0
  65. package/dist/cjs/src/core/ResponsePipeline.js +549 -0
  66. package/dist/cjs/src/core/ResponsePipeline.js.map +1 -0
  67. package/dist/cjs/src/core/Route.d.ts +181 -0
  68. package/dist/cjs/src/core/Route.d.ts.map +1 -0
  69. package/dist/cjs/src/core/Route.js +541 -0
  70. package/dist/cjs/src/core/Route.js.map +1 -0
  71. package/dist/cjs/src/core/RoutingEngine.d.ts +159 -0
  72. package/dist/cjs/src/core/RoutingEngine.d.ts.map +1 -0
  73. package/dist/cjs/src/core/RoutingEngine.js +961 -0
  74. package/dist/cjs/src/core/RoutingEngine.js.map +1 -0
  75. package/dist/cjs/src/core/SessionManager.d.ts +94 -0
  76. package/dist/cjs/src/core/SessionManager.d.ts.map +1 -0
  77. package/dist/cjs/src/core/SessionManager.js +239 -0
  78. package/dist/cjs/src/core/SessionManager.js.map +1 -0
  79. package/dist/cjs/src/core/Step.d.ts +170 -0
  80. package/dist/cjs/src/core/Step.d.ts.map +1 -0
  81. package/dist/cjs/src/core/Step.js +448 -0
  82. package/dist/cjs/src/core/Step.js.map +1 -0
  83. package/dist/cjs/src/core/ToolManager.d.ts +234 -0
  84. package/dist/cjs/src/core/ToolManager.d.ts.map +1 -0
  85. package/dist/cjs/src/core/ToolManager.js +1117 -0
  86. package/dist/cjs/src/core/ToolManager.js.map +1 -0
  87. package/dist/cjs/src/index.d.ts +44 -0
  88. package/dist/cjs/src/index.d.ts.map +1 -0
  89. package/dist/cjs/src/index.js +88 -0
  90. package/dist/cjs/src/index.js.map +1 -0
  91. package/dist/cjs/src/providers/AnthropicProvider.d.ts +43 -0
  92. package/dist/cjs/src/providers/AnthropicProvider.d.ts.map +1 -0
  93. package/dist/cjs/src/providers/AnthropicProvider.js +377 -0
  94. package/dist/cjs/src/providers/AnthropicProvider.js.map +1 -0
  95. package/dist/cjs/src/providers/GeminiProvider.d.ts +58 -0
  96. package/dist/cjs/src/providers/GeminiProvider.d.ts.map +1 -0
  97. package/dist/cjs/src/providers/GeminiProvider.js +489 -0
  98. package/dist/cjs/src/providers/GeminiProvider.js.map +1 -0
  99. package/dist/cjs/src/providers/OpenAIProvider.d.ts +52 -0
  100. package/dist/cjs/src/providers/OpenAIProvider.d.ts.map +1 -0
  101. package/dist/cjs/src/providers/OpenAIProvider.js +395 -0
  102. package/dist/cjs/src/providers/OpenAIProvider.js.map +1 -0
  103. package/dist/cjs/src/providers/OpenRouterProvider.d.ts +56 -0
  104. package/dist/cjs/src/providers/OpenRouterProvider.d.ts.map +1 -0
  105. package/dist/cjs/src/providers/OpenRouterProvider.js +409 -0
  106. package/dist/cjs/src/providers/OpenRouterProvider.js.map +1 -0
  107. package/dist/cjs/src/providers/index.d.ts +13 -0
  108. package/dist/cjs/src/providers/index.d.ts.map +1 -0
  109. package/dist/cjs/src/providers/index.js +16 -0
  110. package/dist/cjs/src/providers/index.js.map +1 -0
  111. package/dist/cjs/src/types/agent.d.ts +181 -0
  112. package/dist/cjs/src/types/agent.d.ts.map +1 -0
  113. package/dist/cjs/src/types/agent.js +21 -0
  114. package/dist/cjs/src/types/agent.js.map +1 -0
  115. package/dist/cjs/src/types/ai.d.ts +143 -0
  116. package/dist/cjs/src/types/ai.d.ts.map +1 -0
  117. package/dist/cjs/src/types/ai.js +6 -0
  118. package/dist/cjs/src/types/ai.js.map +1 -0
  119. package/dist/cjs/src/types/history.d.ts +178 -0
  120. package/dist/cjs/src/types/history.d.ts.map +1 -0
  121. package/dist/cjs/src/types/history.js +33 -0
  122. package/dist/cjs/src/types/history.js.map +1 -0
  123. package/dist/cjs/src/types/index.d.ts +22 -0
  124. package/dist/cjs/src/types/index.d.ts.map +1 -0
  125. package/dist/cjs/src/types/index.js +37 -0
  126. package/dist/cjs/src/types/index.js.map +1 -0
  127. package/dist/cjs/src/types/persistence.d.ts +209 -0
  128. package/dist/cjs/src/types/persistence.d.ts.map +1 -0
  129. package/dist/cjs/src/types/persistence.js +7 -0
  130. package/dist/cjs/src/types/persistence.js.map +1 -0
  131. package/dist/cjs/src/types/route.d.ts +238 -0
  132. package/dist/cjs/src/types/route.d.ts.map +1 -0
  133. package/dist/cjs/src/types/route.js +6 -0
  134. package/dist/cjs/src/types/route.js.map +1 -0
  135. package/dist/cjs/src/types/routing.d.ts +16 -0
  136. package/dist/cjs/src/types/routing.d.ts.map +1 -0
  137. package/dist/cjs/src/types/routing.js +3 -0
  138. package/dist/cjs/src/types/routing.js.map +1 -0
  139. package/dist/cjs/src/types/schema.d.ts +22 -0
  140. package/dist/cjs/src/types/schema.d.ts.map +1 -0
  141. package/dist/cjs/src/types/schema.js +3 -0
  142. package/dist/cjs/src/types/schema.js.map +1 -0
  143. package/dist/cjs/src/types/session.d.ts +65 -0
  144. package/dist/cjs/src/types/session.d.ts.map +1 -0
  145. package/dist/cjs/src/types/session.js +6 -0
  146. package/dist/cjs/src/types/session.js.map +1 -0
  147. package/dist/cjs/src/types/template.d.ts +88 -0
  148. package/dist/cjs/src/types/template.d.ts.map +1 -0
  149. package/dist/cjs/src/types/template.js +3 -0
  150. package/dist/cjs/src/types/template.js.map +1 -0
  151. package/dist/cjs/src/types/tool.d.ts +130 -0
  152. package/dist/cjs/src/types/tool.d.ts.map +1 -0
  153. package/dist/cjs/src/types/tool.js +19 -0
  154. package/dist/cjs/src/types/tool.js.map +1 -0
  155. package/dist/cjs/src/utils/clone.d.ts +8 -0
  156. package/dist/cjs/src/utils/clone.d.ts.map +1 -0
  157. package/dist/cjs/src/utils/clone.js +32 -0
  158. package/dist/cjs/src/utils/clone.js.map +1 -0
  159. package/dist/cjs/src/utils/condition.d.ts +38 -0
  160. package/dist/cjs/src/utils/condition.d.ts.map +1 -0
  161. package/dist/cjs/src/utils/condition.js +168 -0
  162. package/dist/cjs/src/utils/condition.js.map +1 -0
  163. package/dist/cjs/src/utils/event.d.ts +6 -0
  164. package/dist/cjs/src/utils/event.d.ts.map +1 -0
  165. package/dist/cjs/src/utils/event.js +20 -0
  166. package/dist/cjs/src/utils/event.js.map +1 -0
  167. package/dist/cjs/src/utils/history.d.ts +60 -0
  168. package/dist/cjs/src/utils/history.d.ts.map +1 -0
  169. package/dist/cjs/src/utils/history.js +274 -0
  170. package/dist/cjs/src/utils/history.js.map +1 -0
  171. package/dist/cjs/src/utils/id.d.ts +25 -0
  172. package/dist/cjs/src/utils/id.d.ts.map +1 -0
  173. package/dist/cjs/src/utils/id.js +70 -0
  174. package/dist/cjs/src/utils/id.js.map +1 -0
  175. package/dist/cjs/src/utils/index.d.ts +15 -0
  176. package/dist/cjs/src/utils/index.d.ts.map +1 -0
  177. package/dist/cjs/src/utils/index.js +64 -0
  178. package/dist/cjs/src/utils/index.js.map +1 -0
  179. package/dist/cjs/src/utils/json.d.ts +16 -0
  180. package/dist/cjs/src/utils/json.d.ts.map +1 -0
  181. package/dist/cjs/src/utils/json.js +47 -0
  182. package/dist/cjs/src/utils/json.js.map +1 -0
  183. package/dist/cjs/src/utils/logger.d.ts +10 -0
  184. package/dist/cjs/src/utils/logger.d.ts.map +1 -0
  185. package/dist/cjs/src/utils/logger.js +23 -0
  186. package/dist/cjs/src/utils/logger.js.map +1 -0
  187. package/dist/cjs/src/utils/retry.d.ts +10 -0
  188. package/dist/cjs/src/utils/retry.d.ts.map +1 -0
  189. package/dist/cjs/src/utils/retry.js +76 -0
  190. package/dist/cjs/src/utils/retry.js.map +1 -0
  191. package/dist/cjs/src/utils/session.d.ts +51 -0
  192. package/dist/cjs/src/utils/session.d.ts.map +1 -0
  193. package/dist/cjs/src/utils/session.js +170 -0
  194. package/dist/cjs/src/utils/session.js.map +1 -0
  195. package/dist/cjs/src/utils/template.d.ts +155 -0
  196. package/dist/cjs/src/utils/template.d.ts.map +1 -0
  197. package/dist/cjs/src/utils/template.js +383 -0
  198. package/dist/cjs/src/utils/template.js.map +1 -0
  199. package/dist/src/adapters/MemoryAdapter.d.ts +47 -0
  200. package/dist/src/adapters/MemoryAdapter.d.ts.map +1 -0
  201. package/dist/src/adapters/MemoryAdapter.js +198 -0
  202. package/dist/src/adapters/MemoryAdapter.js.map +1 -0
  203. package/dist/src/adapters/MongoAdapter.d.ts +97 -0
  204. package/dist/src/adapters/MongoAdapter.d.ts.map +1 -0
  205. package/dist/src/adapters/MongoAdapter.js +164 -0
  206. package/dist/src/adapters/MongoAdapter.js.map +1 -0
  207. package/dist/src/adapters/OpenSearchAdapter.d.ts +169 -0
  208. package/dist/src/adapters/OpenSearchAdapter.d.ts.map +1 -0
  209. package/dist/src/adapters/OpenSearchAdapter.js +454 -0
  210. package/dist/src/adapters/OpenSearchAdapter.js.map +1 -0
  211. package/dist/src/adapters/PostgreSQLAdapter.d.ts +71 -0
  212. package/dist/src/adapters/PostgreSQLAdapter.d.ts.map +1 -0
  213. package/dist/src/adapters/PostgreSQLAdapter.js +256 -0
  214. package/dist/src/adapters/PostgreSQLAdapter.js.map +1 -0
  215. package/dist/src/adapters/PrismaAdapter.d.ts +115 -0
  216. package/dist/src/adapters/PrismaAdapter.d.ts.map +1 -0
  217. package/dist/src/adapters/PrismaAdapter.js +362 -0
  218. package/dist/src/adapters/PrismaAdapter.js.map +1 -0
  219. package/dist/src/adapters/RedisAdapter.d.ts +71 -0
  220. package/dist/src/adapters/RedisAdapter.d.ts.map +1 -0
  221. package/dist/src/adapters/RedisAdapter.js +227 -0
  222. package/dist/src/adapters/RedisAdapter.js.map +1 -0
  223. package/dist/src/adapters/SQLiteAdapter.d.ts +69 -0
  224. package/dist/src/adapters/SQLiteAdapter.d.ts.map +1 -0
  225. package/dist/src/adapters/SQLiteAdapter.js +308 -0
  226. package/dist/src/adapters/SQLiteAdapter.js.map +1 -0
  227. package/dist/src/adapters/index.d.ts +17 -0
  228. package/dist/src/adapters/index.d.ts.map +1 -0
  229. package/dist/src/adapters/index.js +11 -0
  230. package/dist/src/adapters/index.js.map +1 -0
  231. package/dist/src/constants/index.d.ts +10 -0
  232. package/dist/src/constants/index.d.ts.map +1 -0
  233. package/dist/src/constants/index.js +10 -0
  234. package/dist/src/constants/index.js.map +1 -0
  235. package/dist/src/core/Agent.d.ts +232 -0
  236. package/dist/src/core/Agent.d.ts.map +1 -0
  237. package/dist/src/core/Agent.js +737 -0
  238. package/dist/src/core/Agent.js.map +1 -0
  239. package/dist/src/core/Events.d.ts +26 -0
  240. package/dist/src/core/Events.d.ts.map +1 -0
  241. package/dist/src/core/Events.js +137 -0
  242. package/dist/src/core/Events.js.map +1 -0
  243. package/dist/src/core/PersistenceManager.d.ts +98 -0
  244. package/dist/src/core/PersistenceManager.d.ts.map +1 -0
  245. package/dist/src/core/PersistenceManager.js +257 -0
  246. package/dist/src/core/PersistenceManager.js.map +1 -0
  247. package/dist/src/core/PromptComposer.d.ts +27 -0
  248. package/dist/src/core/PromptComposer.d.ts.map +1 -0
  249. package/dist/src/core/PromptComposer.js +190 -0
  250. package/dist/src/core/PromptComposer.js.map +1 -0
  251. package/dist/src/core/ResponseEngine.d.ts +32 -0
  252. package/dist/src/core/ResponseEngine.d.ts.map +1 -0
  253. package/dist/src/core/ResponseEngine.js +198 -0
  254. package/dist/src/core/ResponseEngine.js.map +1 -0
  255. package/dist/src/core/ResponseModal.d.ts +222 -0
  256. package/dist/src/core/ResponseModal.d.ts.map +1 -0
  257. package/dist/src/core/ResponseModal.js +1583 -0
  258. package/dist/src/core/ResponseModal.js.map +1 -0
  259. package/dist/src/core/ResponsePipeline.d.ts +175 -0
  260. package/dist/src/core/ResponsePipeline.d.ts.map +1 -0
  261. package/dist/src/core/ResponsePipeline.js +545 -0
  262. package/dist/src/core/ResponsePipeline.js.map +1 -0
  263. package/dist/src/core/Route.d.ts +181 -0
  264. package/dist/src/core/Route.d.ts.map +1 -0
  265. package/dist/src/core/Route.js +537 -0
  266. package/dist/src/core/Route.js.map +1 -0
  267. package/dist/src/core/RoutingEngine.d.ts +159 -0
  268. package/dist/src/core/RoutingEngine.d.ts.map +1 -0
  269. package/dist/src/core/RoutingEngine.js +957 -0
  270. package/dist/src/core/RoutingEngine.js.map +1 -0
  271. package/dist/src/core/SessionManager.d.ts +94 -0
  272. package/dist/src/core/SessionManager.d.ts.map +1 -0
  273. package/dist/src/core/SessionManager.js +235 -0
  274. package/dist/src/core/SessionManager.js.map +1 -0
  275. package/dist/src/core/Step.d.ts +170 -0
  276. package/dist/src/core/Step.d.ts.map +1 -0
  277. package/dist/src/core/Step.js +444 -0
  278. package/dist/src/core/Step.js.map +1 -0
  279. package/dist/src/core/ToolManager.d.ts +234 -0
  280. package/dist/src/core/ToolManager.d.ts.map +1 -0
  281. package/dist/src/core/ToolManager.js +1111 -0
  282. package/dist/src/core/ToolManager.js.map +1 -0
  283. package/dist/src/index.d.ts +44 -0
  284. package/dist/src/index.d.ts.map +1 -0
  285. package/dist/src/index.js +37 -0
  286. package/dist/src/index.js.map +1 -0
  287. package/dist/src/providers/AnthropicProvider.d.ts +43 -0
  288. package/dist/src/providers/AnthropicProvider.d.ts.map +1 -0
  289. package/dist/src/providers/AnthropicProvider.js +370 -0
  290. package/dist/src/providers/AnthropicProvider.js.map +1 -0
  291. package/dist/src/providers/GeminiProvider.d.ts +58 -0
  292. package/dist/src/providers/GeminiProvider.d.ts.map +1 -0
  293. package/dist/src/providers/GeminiProvider.js +485 -0
  294. package/dist/src/providers/GeminiProvider.js.map +1 -0
  295. package/dist/src/providers/OpenAIProvider.d.ts +52 -0
  296. package/dist/src/providers/OpenAIProvider.d.ts.map +1 -0
  297. package/dist/src/providers/OpenAIProvider.js +388 -0
  298. package/dist/src/providers/OpenAIProvider.js.map +1 -0
  299. package/dist/src/providers/OpenRouterProvider.d.ts +56 -0
  300. package/dist/src/providers/OpenRouterProvider.d.ts.map +1 -0
  301. package/dist/src/providers/OpenRouterProvider.js +402 -0
  302. package/dist/src/providers/OpenRouterProvider.js.map +1 -0
  303. package/dist/src/providers/index.d.ts +13 -0
  304. package/dist/src/providers/index.d.ts.map +1 -0
  305. package/dist/src/providers/index.js +9 -0
  306. package/dist/src/providers/index.js.map +1 -0
  307. package/dist/src/types/agent.d.ts +181 -0
  308. package/dist/src/types/agent.d.ts.map +1 -0
  309. package/dist/src/types/agent.js +18 -0
  310. package/dist/src/types/agent.js.map +1 -0
  311. package/dist/src/types/ai.d.ts +143 -0
  312. package/dist/src/types/ai.d.ts.map +1 -0
  313. package/dist/src/types/ai.js +5 -0
  314. package/dist/src/types/ai.js.map +1 -0
  315. package/dist/src/types/history.d.ts +178 -0
  316. package/dist/src/types/history.d.ts.map +1 -0
  317. package/dist/src/types/history.js +30 -0
  318. package/dist/src/types/history.js.map +1 -0
  319. package/dist/src/types/index.d.ts +22 -0
  320. package/dist/src/types/index.d.ts.map +1 -0
  321. package/dist/src/types/index.js +12 -0
  322. package/dist/src/types/index.js.map +1 -0
  323. package/dist/src/types/persistence.d.ts +209 -0
  324. package/dist/src/types/persistence.d.ts.map +1 -0
  325. package/dist/src/types/persistence.js +6 -0
  326. package/dist/src/types/persistence.js.map +1 -0
  327. package/dist/src/types/route.d.ts +238 -0
  328. package/dist/src/types/route.d.ts.map +1 -0
  329. package/dist/src/types/route.js +5 -0
  330. package/dist/src/types/route.js.map +1 -0
  331. package/dist/src/types/routing.d.ts +16 -0
  332. package/dist/src/types/routing.d.ts.map +1 -0
  333. package/dist/src/types/routing.js +2 -0
  334. package/dist/src/types/routing.js.map +1 -0
  335. package/dist/src/types/schema.d.ts +22 -0
  336. package/dist/src/types/schema.d.ts.map +1 -0
  337. package/dist/src/types/schema.js +2 -0
  338. package/dist/src/types/schema.js.map +1 -0
  339. package/dist/src/types/session.d.ts +65 -0
  340. package/dist/src/types/session.d.ts.map +1 -0
  341. package/dist/src/types/session.js +5 -0
  342. package/dist/src/types/session.js.map +1 -0
  343. package/dist/src/types/template.d.ts +88 -0
  344. package/dist/src/types/template.d.ts.map +1 -0
  345. package/dist/src/types/template.js +2 -0
  346. package/dist/src/types/template.js.map +1 -0
  347. package/dist/src/types/tool.d.ts +130 -0
  348. package/dist/src/types/tool.d.ts.map +1 -0
  349. package/dist/src/types/tool.js +16 -0
  350. package/dist/src/types/tool.js.map +1 -0
  351. package/dist/src/utils/clone.d.ts +8 -0
  352. package/dist/src/utils/clone.d.ts.map +1 -0
  353. package/dist/src/utils/clone.js +29 -0
  354. package/dist/src/utils/clone.js.map +1 -0
  355. package/dist/src/utils/condition.d.ts +38 -0
  356. package/dist/src/utils/condition.d.ts.map +1 -0
  357. package/dist/src/utils/condition.js +161 -0
  358. package/dist/src/utils/condition.js.map +1 -0
  359. package/dist/src/utils/event.d.ts +6 -0
  360. package/dist/src/utils/event.d.ts.map +1 -0
  361. package/dist/src/utils/event.js +17 -0
  362. package/dist/src/utils/event.js.map +1 -0
  363. package/dist/src/utils/history.d.ts +60 -0
  364. package/dist/src/utils/history.d.ts.map +1 -0
  365. package/dist/src/utils/history.js +263 -0
  366. package/dist/src/utils/history.js.map +1 -0
  367. package/dist/src/utils/id.d.ts +25 -0
  368. package/dist/src/utils/id.d.ts.map +1 -0
  369. package/dist/src/utils/id.js +64 -0
  370. package/dist/src/utils/id.js.map +1 -0
  371. package/dist/src/utils/index.d.ts +15 -0
  372. package/dist/src/utils/index.d.ts.map +1 -0
  373. package/dist/src/utils/index.js +23 -0
  374. package/dist/src/utils/index.js.map +1 -0
  375. package/dist/src/utils/json.d.ts +16 -0
  376. package/dist/src/utils/json.d.ts.map +1 -0
  377. package/dist/src/utils/json.js +43 -0
  378. package/dist/src/utils/json.js.map +1 -0
  379. package/dist/src/utils/logger.d.ts +10 -0
  380. package/dist/src/utils/logger.d.ts.map +1 -0
  381. package/dist/src/utils/logger.js +17 -0
  382. package/dist/src/utils/logger.js.map +1 -0
  383. package/dist/src/utils/retry.d.ts +10 -0
  384. package/dist/src/utils/retry.d.ts.map +1 -0
  385. package/dist/src/utils/retry.js +71 -0
  386. package/dist/src/utils/retry.js.map +1 -0
  387. package/dist/src/utils/session.d.ts +51 -0
  388. package/dist/src/utils/session.d.ts.map +1 -0
  389. package/dist/src/utils/session.js +160 -0
  390. package/dist/src/utils/session.js.map +1 -0
  391. package/dist/src/utils/template.d.ts +155 -0
  392. package/dist/src/utils/template.d.ts.map +1 -0
  393. package/dist/src/utils/template.js +374 -0
  394. package/dist/src/utils/template.js.map +1 -0
  395. package/docs/CONTRIBUTING.md +521 -0
  396. package/docs/README.md +228 -0
  397. package/docs/api/README.md +3258 -0
  398. package/docs/api/overview.md +1134 -0
  399. package/docs/architecture/data-extraction-flow.md +363 -0
  400. package/docs/core/agent/README.md +902 -0
  401. package/docs/core/agent/context-management.md +796 -0
  402. package/docs/core/agent/session-management.md +641 -0
  403. package/docs/core/ai-integration/prompt-composition.md +220 -0
  404. package/docs/core/ai-integration/providers.md +515 -0
  405. package/docs/core/ai-integration/response-processing.md +287 -0
  406. package/docs/core/conversation-flows/data-collection.md +623 -0
  407. package/docs/core/conversation-flows/route-dsl.md +502 -0
  408. package/docs/core/conversation-flows/routes.md +247 -0
  409. package/docs/core/conversation-flows/step-transitions.md +595 -0
  410. package/docs/core/conversation-flows/steps.md +154 -0
  411. package/docs/core/error-handling.md +638 -0
  412. package/docs/core/persistence/adapters.md +255 -0
  413. package/docs/core/persistence/session-storage.md +644 -0
  414. package/docs/core/routing/intelligent-routing.md +466 -0
  415. package/docs/core/tools/tool-definition.md +970 -0
  416. package/docs/core/tools/tool-scoping.md +819 -0
  417. package/docs/guides/advanced-patterns/publishing.md +186 -0
  418. package/docs/guides/error-handling-patterns.md +578 -0
  419. package/docs/guides/getting-started/README.md +696 -0
  420. package/docs/guides/migration/README.md +72 -0
  421. package/docs/guides/migration/flexible-routing-conditions.md +375 -0
  422. package/docs/guides/migration/response-modal-refactor.md +518 -0
  423. package/examples/advanced-patterns/knowledge-based-agent.ts +735 -0
  424. package/examples/advanced-patterns/persistent-onboarding.ts +728 -0
  425. package/examples/advanced-patterns/route-lifecycle-hooks.ts +556 -0
  426. package/examples/advanced-patterns/streaming-responses.ts +578 -0
  427. package/examples/ai-providers/anthropic-integration.ts +388 -0
  428. package/examples/ai-providers/openai-integration.ts +228 -0
  429. package/examples/condition-patterns/function-only-conditions.ts +365 -0
  430. package/examples/condition-patterns/mixed-array-conditions.ts +477 -0
  431. package/examples/condition-patterns/route-skipif-patterns.ts +468 -0
  432. package/examples/condition-patterns/step-skipif-patterns.ts +0 -0
  433. package/examples/condition-patterns/string-only-conditions.ts +296 -0
  434. package/examples/conversation-flows/completion-transitions.ts +318 -0
  435. package/examples/core-concepts/basic-agent.ts +503 -0
  436. package/examples/core-concepts/modern-streaming-api.ts +309 -0
  437. package/examples/core-concepts/schema-driven-extraction.ts +332 -0
  438. package/examples/core-concepts/session-management.ts +494 -0
  439. package/examples/integrations/database-integration.ts +630 -0
  440. package/examples/integrations/healthcare-integration.ts +595 -0
  441. package/examples/integrations/search-integration.ts +530 -0
  442. package/examples/integrations/server-session-management.ts +307 -0
  443. package/examples/persistence/custom-adapter.ts +529 -0
  444. package/examples/persistence/database-persistence.ts +583 -0
  445. package/examples/persistence/memory-sessions.ts +495 -0
  446. package/examples/persistence/prisma-schema.example.prisma +74 -0
  447. package/examples/persistence/redis-persistence.ts +488 -0
  448. package/examples/tools/basic-tools.ts +765 -0
  449. package/examples/tools/data-enrichment-tools.ts +593 -0
  450. package/package.json +125 -0
  451. package/src/adapters/MemoryAdapter.ts +273 -0
  452. package/src/adapters/MongoAdapter.ts +304 -0
  453. package/src/adapters/OpenSearchAdapter.ts +670 -0
  454. package/src/adapters/PostgreSQLAdapter.ts +428 -0
  455. package/src/adapters/PrismaAdapter.ts +553 -0
  456. package/src/adapters/RedisAdapter.ts +377 -0
  457. package/src/adapters/SQLiteAdapter.ts +459 -0
  458. package/src/adapters/index.ts +43 -0
  459. package/src/constants/index.ts +10 -0
  460. package/src/core/Agent.ts +970 -0
  461. package/src/core/Events.ts +164 -0
  462. package/src/core/PersistenceManager.ts +353 -0
  463. package/src/core/PromptComposer.ts +253 -0
  464. package/src/core/ResponseEngine.ts +306 -0
  465. package/src/core/ResponseModal.ts +2050 -0
  466. package/src/core/ResponsePipeline.ts +864 -0
  467. package/src/core/Route.ts +677 -0
  468. package/src/core/RoutingEngine.ts +1396 -0
  469. package/src/core/SessionManager.ts +297 -0
  470. package/src/core/Step.ts +593 -0
  471. package/src/core/ToolManager.ts +1394 -0
  472. package/src/index.ts +155 -0
  473. package/src/providers/AnthropicProvider.ts +560 -0
  474. package/src/providers/GeminiProvider.ts +683 -0
  475. package/src/providers/OpenAIProvider.ts +602 -0
  476. package/src/providers/OpenRouterProvider.ts +613 -0
  477. package/src/providers/index.ts +16 -0
  478. package/src/types/agent.ts +196 -0
  479. package/src/types/ai.ts +158 -0
  480. package/src/types/history.ts +206 -0
  481. package/src/types/index.ts +119 -0
  482. package/src/types/persistence.ts +251 -0
  483. package/src/types/route.ts +272 -0
  484. package/src/types/routing.ts +18 -0
  485. package/src/types/schema.ts +23 -0
  486. package/src/types/session.ts +74 -0
  487. package/src/types/template.ts +104 -0
  488. package/src/types/tool.ts +174 -0
  489. package/src/utils/clone.ts +34 -0
  490. package/src/utils/condition.ts +190 -0
  491. package/src/utils/event.ts +16 -0
  492. package/src/utils/history.ts +306 -0
  493. package/src/utils/id.ts +73 -0
  494. package/src/utils/index.ts +69 -0
  495. package/src/utils/json.ts +46 -0
  496. package/src/utils/logger.ts +19 -0
  497. package/src/utils/retry.ts +97 -0
  498. package/src/utils/session.ts +204 -0
  499. package/src/utils/template.ts +444 -0
@@ -0,0 +1,104 @@
1
+ import type { SessionState } from "./session";
2
+ import type { Event, MessageRole } from "./history";
3
+
4
+ /**
5
+ * Context object passed to template functions for dynamic rendering.
6
+ */
7
+ export interface TemplateContext<TContext = unknown, TData = unknown> {
8
+ /**
9
+ * The agent's static or dynamically-provided context.
10
+ */
11
+ context?: TContext;
12
+
13
+ /**
14
+ * The current session state, including collected data.
15
+ */
16
+ session?: SessionState<TData>;
17
+
18
+ /**
19
+ * The recent interaction history.
20
+ */
21
+ history?: Event[];
22
+
23
+ /**
24
+ * The data collected in the current route.
25
+ * A convenience alias for `session.data`.
26
+ */
27
+ data: Partial<TData>;
28
+
29
+ /**
30
+ * Helper methods for working with history and context.
31
+ */
32
+ helpers: {
33
+ /**
34
+ * Get the last message from history, optionally filtered by role.
35
+ * @param role - Optional role to filter by (user, assistant, etc.)
36
+ * @returns The message content or undefined if not found
37
+ */
38
+ getLastMessage(role?: MessageRole): string | undefined;
39
+
40
+ /**
41
+ * Get the last user message from history.
42
+ * @returns The user message content or undefined if not found
43
+ */
44
+ getLastUserMessage(): string | undefined;
45
+
46
+ /**
47
+ * Get the last assistant message from history.
48
+ * @returns The assistant message content or undefined if not found
49
+ */
50
+ getLastAssistantMessage(): string | undefined;
51
+
52
+ /**
53
+ * Get all messages from history, optionally filtered by role.
54
+ * @param role - Optional role to filter by
55
+ * @returns Array of message contents
56
+ */
57
+ getMessages(role?: MessageRole): string[];
58
+
59
+ /**
60
+ * Check if the last message contains any of the given keywords.
61
+ * @param keywords - Keywords to search for
62
+ * @param caseSensitive - Whether to perform case-sensitive search (default: false)
63
+ * @returns True if any keyword is found
64
+ */
65
+ lastMessageContains(keywords: string | string[], caseSensitive?: boolean): boolean;
66
+ };
67
+ }
68
+
69
+ /**
70
+ * Represents a string that can be either a literal or a function
71
+ * that dynamically generates a string from context.
72
+ */
73
+ export type Template<TContext = unknown, TData = unknown> =
74
+ | string
75
+ | ((params: TemplateContext<TContext, TData>) => string | Promise<string>);
76
+
77
+ /**
78
+ * Represents a condition that can be used for routing decisions.
79
+ * Supports strings (AI context only), boolean functions (programmatic evaluation),
80
+ * and arrays of either for complex condition logic.
81
+ */
82
+ export type ConditionTemplate<TContext = unknown, TData = unknown> =
83
+ | string // AI context only - not evaluated programmatically
84
+ | ((params: TemplateContext<TContext, TData>) => boolean | Promise<boolean>) // Programmatic evaluation
85
+ | ConditionTemplate<TContext, TData>[]; // Array of either
86
+
87
+ /**
88
+ * Result of condition evaluation containing both programmatic results
89
+ * and AI context strings.
90
+ */
91
+ export interface ConditionEvaluationResult {
92
+ /** Result of function evaluations only */
93
+ programmaticResult: boolean;
94
+ /** String values for AI context */
95
+ aiContextStrings: string[];
96
+ /** Whether any functions were evaluated */
97
+ hasProgrammaticConditions: boolean;
98
+ /** Detailed evaluation information for debugging */
99
+ evaluationDetails?: {
100
+ condition: string;
101
+ result?: boolean; // Only present for functions
102
+ type: 'string' | 'function' | 'array';
103
+ }[];
104
+ }
@@ -0,0 +1,174 @@
1
+ /* eslint @typescript-eslint/no-explicit-any: "off"*/
2
+ /**
3
+ * Tool system type definitions
4
+ */
5
+
6
+ import type { Event, StepRef, ValidationResult } from "./index";
7
+
8
+ /**
9
+ * Context provided to tool handlers
10
+ */
11
+ export interface ToolContext<TContext = any, TData = any> {
12
+ /** The agent's context data */
13
+ context: TContext;
14
+ /** Complete agent-level data collected so far */
15
+ data: Partial<TData>;
16
+ /** Interaction history */
17
+ history: Event[];
18
+ /** Current step reference (if in a route) */
19
+ step?: StepRef;
20
+ /** Additional metadata */
21
+ metadata?: Record<string, unknown>;
22
+
23
+ /** Update the agent's context (triggers lifecycle hooks if configured) */
24
+ updateContext: (updates: Partial<TContext>) => Promise<void>;
25
+ /** Update the agent's collected data (triggers lifecycle hooks if configured) */
26
+ updateData: (updates: Partial<TData>) => Promise<void>;
27
+ /** Get a specific field from collected data */
28
+ getField<K extends keyof TData>(key: K): TData[K] | undefined;
29
+ /** Set a specific field in collected data */
30
+ setField<K extends keyof TData>(key: K, value: TData[K]): Promise<void>;
31
+ /** Check if a field exists in collected data */
32
+ hasField<K extends keyof TData>(key: K): boolean;
33
+ }
34
+
35
+ /**
36
+ * Result returned by a tool
37
+ */
38
+ export interface ToolResult<
39
+ TResultData = any,
40
+ TContext = any,
41
+ TData = any
42
+ > {
43
+ /** The result data */
44
+ data?: TResultData;
45
+ /** Optional context update to be merged with current context */
46
+ contextUpdate?: Partial<TContext>;
47
+ /** Optional agent-level data update to be merged with collected data */
48
+ dataUpdate?: Partial<TData>;
49
+ /** Success indicator */
50
+ success?: boolean;
51
+ /** Error message if operation failed */
52
+ error?: string;
53
+ /** Optional metadata about the execution */
54
+ meta?: Record<string, unknown>;
55
+ }
56
+
57
+ /**
58
+ * Handler function for a tool
59
+ */
60
+ export type ToolHandler<
61
+ TContext = any,
62
+ TData = any,
63
+ TResult = any
64
+ > = (
65
+ context: ToolContext<TContext, TData>,
66
+ args?: Record<string, unknown>
67
+ ) =>
68
+ | Promise<TResult | ToolResult<TResult, TContext, TData>>
69
+ | TResult
70
+ | ToolResult<TResult, TContext, TData>;
71
+
72
+ /**
73
+ * Tool definition - plain object interface
74
+ */
75
+ export interface Tool<
76
+ TContext = any,
77
+ TData = any,
78
+ TResult = any
79
+ > {
80
+ /** Tool identifier */
81
+ id: string;
82
+ /** Tool display name (shown to AI models) */
83
+ name?: string;
84
+ /** Tool handler function */
85
+ handler: ToolHandler<TContext, TData, TResult>;
86
+ /** Description of what the tool does (for AI discovery) */
87
+ description?: string;
88
+ /** Parameter schema or description */
89
+ parameters?: unknown;
90
+ }
91
+
92
+
93
+
94
+ /**
95
+ * Tool execution result
96
+ */
97
+ export interface ToolExecutionResult {
98
+ success: boolean;
99
+ data?: unknown;
100
+ error?: string;
101
+ contextUpdate?: Record<string, unknown>;
102
+ dataUpdate?: Record<string, unknown>;
103
+ metadata?: Record<string, unknown>;
104
+ }
105
+
106
+ /**
107
+ * Tool scope enumeration
108
+ */
109
+ export enum ToolScope {
110
+ AGENT = 'agent',
111
+ ROUTE = 'route',
112
+ STEP = 'step',
113
+ REGISTERED = 'registered',
114
+ ALL = 'all'
115
+ }
116
+
117
+
118
+
119
+ /**
120
+ * Configuration for data enrichment tools
121
+ */
122
+ export interface DataEnrichmentConfig<TContext, TData, TFields extends keyof TData> {
123
+ id: string;
124
+ name?: string;
125
+ description?: string;
126
+ fields: TFields[];
127
+ enricher: (
128
+ context: TContext,
129
+ data: Pick<TData, TFields>
130
+ ) => Promise<Partial<TData>> | Partial<TData>;
131
+ }
132
+
133
+ /**
134
+ * Configuration for validation tools
135
+ */
136
+ export interface ValidationConfig<TContext, TData, TFields extends keyof TData> {
137
+ id: string;
138
+ name?: string;
139
+ description?: string;
140
+ fields: TFields[];
141
+ validator: (
142
+ context: TContext,
143
+ data: Pick<TData, TFields>
144
+ ) => Promise<ValidationResult> | ValidationResult;
145
+ }
146
+
147
+ /**
148
+ * Configuration for API call tools
149
+ */
150
+ export interface ApiCallConfig<TContext, TData, TResult> {
151
+ id: string;
152
+ name?: string;
153
+ description?: string;
154
+ endpoint: string | ((context: TContext, data: Partial<TData>) => string);
155
+ method?: 'GET' | 'POST' | 'PUT' | 'DELETE';
156
+ headers?: Record<string, string> | ((context: TContext) => Record<string, string>);
157
+ body?: (context: TContext, data: Partial<TData>, args?: Record<string, unknown>) => unknown;
158
+ transform?: (response: unknown) => TResult;
159
+ }
160
+
161
+ /**
162
+ * Configuration for computation tools
163
+ */
164
+ export interface ComputationConfig<TContext, TData, TResult> {
165
+ id: string;
166
+ name?: string;
167
+ description?: string;
168
+ inputs: (keyof TData)[];
169
+ compute: (
170
+ context: TContext,
171
+ inputs: Partial<TData>,
172
+ args?: Record<string, unknown>
173
+ ) => Promise<TResult> | TResult;
174
+ }
@@ -0,0 +1,34 @@
1
+
2
+ /**
3
+ * Deep clone utility to avoid adding large dependencies like lodash.
4
+ * Handles objects, arrays, dates, and primitives.
5
+ * @param obj - The object to clone
6
+ * @returns A deep copy of the object
7
+ */
8
+ export function cloneDeep<T>(obj: T): T {
9
+ if (obj === null || typeof obj !== "object") {
10
+ return obj;
11
+ }
12
+
13
+ if (obj instanceof Date) {
14
+ return new Date(obj.getTime()) as T;
15
+ }
16
+
17
+ if (Array.isArray(obj)) {
18
+ const arrCopy: unknown[] = [];
19
+ for (let i = 0; i < obj.length; i++) {
20
+
21
+ arrCopy[i] = cloneDeep(obj[i]);
22
+ }
23
+ return arrCopy as T;
24
+ }
25
+
26
+ const objCopy: Record<string, unknown> = {};
27
+ for (const key in obj) {
28
+ if (Object.prototype.hasOwnProperty.call(obj, key)) {
29
+ objCopy[key] = cloneDeep((obj as Record<string, unknown>)[key]);
30
+ }
31
+ }
32
+
33
+ return objCopy as T;
34
+ }
@@ -0,0 +1,190 @@
1
+ import type { TemplateContext, ConditionTemplate, ConditionEvaluationResult } from "../types/template";
2
+ import { createTemplateContext } from "./template";
3
+ import { logger } from './logger'
4
+
5
+ /**
6
+ * Utility class for evaluating ConditionTemplate instances.
7
+ * Handles mixed string/function conditions and separates programmatic
8
+ * evaluation from AI context collection.
9
+ */
10
+ export class ConditionEvaluator<TContext = unknown, TData = unknown> {
11
+ constructor(private templateContext: TemplateContext<TContext, TData>) {}
12
+
13
+ /**
14
+ * Evaluates a condition template and returns both programmatic results
15
+ * and AI context strings.
16
+ *
17
+ * @param condition The condition to evaluate
18
+ * @param logic Logic to apply for arrays ('AND' for when conditions, 'OR' for skipIf)
19
+ * @returns Evaluation result with programmatic result and AI context
20
+ */
21
+ async evaluateCondition(
22
+ condition: ConditionTemplate<TContext, TData>,
23
+ logic: 'AND' | 'OR' = 'AND'
24
+ ): Promise<ConditionEvaluationResult> {
25
+ const result: ConditionEvaluationResult = {
26
+ programmaticResult: logic === 'AND' ? true : false,
27
+ aiContextStrings: [],
28
+ hasProgrammaticConditions: false,
29
+ evaluationDetails: []
30
+ };
31
+
32
+ if (!condition) {
33
+ return result;
34
+ }
35
+
36
+ // Handle array conditions
37
+ if (Array.isArray(condition)) {
38
+ return this.evaluateArrayCondition(condition, logic);
39
+ }
40
+
41
+ // Handle string conditions (AI context only)
42
+ if (typeof condition === 'string') {
43
+ result.aiContextStrings.push(condition);
44
+ result.evaluationDetails?.push({
45
+ condition: condition,
46
+ type: 'string'
47
+ });
48
+ // For string conditions, programmatic result depends on logic:
49
+ // AND logic: true (doesn't affect result)
50
+ // OR logic: false (doesn't trigger skip)
51
+ result.programmaticResult = logic === 'AND' ? true : false;
52
+ return result;
53
+ }
54
+
55
+ // Handle function conditions (programmatic evaluation)
56
+ if (typeof condition === 'function') {
57
+ result.hasProgrammaticConditions = true;
58
+ try {
59
+ const functionResult = await condition(this.templateContext);
60
+ result.programmaticResult = Boolean(functionResult);
61
+ result.evaluationDetails?.push({
62
+ condition: condition.toString(),
63
+ result: result.programmaticResult,
64
+ type: 'function'
65
+ });
66
+ } catch (error) {
67
+ // Log error and default to false for safety
68
+ logger.warn('Condition function evaluation failed:', error);
69
+ result.programmaticResult = false;
70
+ result.evaluationDetails?.push({
71
+ condition: condition.toString(),
72
+ result: false,
73
+ type: 'function'
74
+ });
75
+ }
76
+ return result;
77
+ }
78
+
79
+ // Fallback for unexpected types
80
+ logger.warn('Unexpected condition type:', typeof condition);
81
+ return result;
82
+ }
83
+
84
+ /**
85
+ * Evaluates an array of conditions with the specified logic.
86
+ */
87
+ private async evaluateArrayCondition(
88
+ conditions: ConditionTemplate<TContext, TData>[],
89
+ logic: 'AND' | 'OR'
90
+ ): Promise<ConditionEvaluationResult> {
91
+ const result: ConditionEvaluationResult = {
92
+ programmaticResult: logic === 'AND' ? true : false,
93
+ aiContextStrings: [],
94
+ hasProgrammaticConditions: false,
95
+ evaluationDetails: [{
96
+ condition: `Array[${conditions.length}]`,
97
+ type: 'array'
98
+ }]
99
+ };
100
+
101
+ const functionResults: boolean[] = [];
102
+
103
+ for (const condition of conditions) {
104
+ const conditionResult = await this.evaluateCondition(condition, logic);
105
+
106
+ // Collect AI context strings
107
+ result.aiContextStrings.push(...conditionResult.aiContextStrings);
108
+
109
+ // Track if we have programmatic conditions
110
+ if (conditionResult.hasProgrammaticConditions) {
111
+ result.hasProgrammaticConditions = true;
112
+ functionResults.push(conditionResult.programmaticResult);
113
+ }
114
+
115
+ // Merge evaluation details
116
+ if (conditionResult.evaluationDetails) {
117
+ result.evaluationDetails?.push(...conditionResult.evaluationDetails);
118
+ }
119
+ }
120
+
121
+ // Apply logic to function results only
122
+ if (functionResults.length > 0) {
123
+ if (logic === 'AND') {
124
+ result.programmaticResult = functionResults.every(r => r);
125
+ } else { // OR
126
+ result.programmaticResult = functionResults.some(r => r);
127
+ }
128
+ } else {
129
+ // No programmatic conditions, result depends on logic:
130
+ // AND: true (no functions to fail)
131
+ // OR: false (no functions to succeed)
132
+ result.programmaticResult = logic === 'AND' ? true : false;
133
+ }
134
+
135
+ return result;
136
+ }
137
+ }
138
+
139
+ /**
140
+ * Utility function to create a ConditionEvaluator instance.
141
+ * Ensures the template context has helpers included.
142
+ */
143
+ export function createConditionEvaluator<TContext = unknown, TData = unknown>(
144
+ templateContext: Omit<Partial<TemplateContext<TContext, TData>>, 'helpers'>
145
+ ): ConditionEvaluator<TContext, TData> {
146
+ const contextWithHelpers = createTemplateContext(templateContext);
147
+ return new ConditionEvaluator(contextWithHelpers);
148
+ }
149
+
150
+ /**
151
+ * Utility function to extract AI context strings from a condition without evaluation.
152
+ * Useful for collecting context strings for prompt generation.
153
+ */
154
+ export function extractAIContextStrings<TContext = unknown, TData = unknown>(
155
+ condition: ConditionTemplate<TContext, TData>
156
+ ): string[] {
157
+ const contextStrings: string[] = [];
158
+
159
+ if (!condition) {
160
+ return contextStrings;
161
+ }
162
+
163
+ if (Array.isArray(condition)) {
164
+ for (const subCondition of condition) {
165
+ contextStrings.push(...extractAIContextStrings(subCondition));
166
+ }
167
+ } else if (typeof condition === 'string') {
168
+ contextStrings.push(condition);
169
+ }
170
+ // Functions don't contribute to AI context
171
+
172
+ return contextStrings;
173
+ }
174
+
175
+ /**
176
+ * Utility function to check if a condition has any programmatic components.
177
+ */
178
+ export function hasProgrammaticConditions<TContext = unknown, TData = unknown>(
179
+ condition: ConditionTemplate<TContext, TData>
180
+ ): boolean {
181
+ if (!condition) {
182
+ return false;
183
+ }
184
+
185
+ if (Array.isArray(condition)) {
186
+ return condition.some(subCondition => hasProgrammaticConditions(subCondition));
187
+ }
188
+
189
+ return typeof condition === 'function';
190
+ }
@@ -0,0 +1,16 @@
1
+ import { type Event, EventKind } from "../types";
2
+ /**
3
+ * Helper to extract last message from history
4
+ */
5
+ export function getLastMessageFromHistory(history: Event[]): string {
6
+ for (let i = history.length - 1; i >= 0; i--) {
7
+ const event = history[i];
8
+ if (event.kind === EventKind.MESSAGE) {
9
+ if (!event.data || !("message" in event.data)) {
10
+ continue;
11
+ }
12
+ return event.data.message;
13
+ }
14
+ }
15
+ return "";
16
+ }