@falai/agent 0.9.0 → 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (654) hide show
  1. package/README.md +304 -72
  2. package/dist/adapters/MemoryAdapter.d.ts.map +1 -0
  3. package/dist/adapters/MemoryAdapter.js.map +1 -0
  4. package/dist/adapters/MongoAdapter.d.ts.map +1 -0
  5. package/dist/adapters/MongoAdapter.js.map +1 -0
  6. package/dist/adapters/OpenSearchAdapter.d.ts.map +1 -0
  7. package/dist/adapters/OpenSearchAdapter.js.map +1 -0
  8. package/dist/adapters/PostgreSQLAdapter.d.ts.map +1 -0
  9. package/dist/adapters/PostgreSQLAdapter.js.map +1 -0
  10. package/dist/adapters/PrismaAdapter.d.ts.map +1 -0
  11. package/dist/{src/adapters → adapters}/PrismaAdapter.js +3 -2
  12. package/dist/adapters/PrismaAdapter.js.map +1 -0
  13. package/dist/adapters/RedisAdapter.d.ts.map +1 -0
  14. package/dist/{src/adapters → adapters}/RedisAdapter.js +3 -3
  15. package/dist/adapters/RedisAdapter.js.map +1 -0
  16. package/dist/adapters/SQLiteAdapter.d.ts.map +1 -0
  17. package/dist/adapters/SQLiteAdapter.js.map +1 -0
  18. package/dist/adapters/index.d.ts.map +1 -0
  19. package/dist/adapters/index.js.map +1 -0
  20. package/dist/cjs/adapters/MemoryAdapter.js.map +1 -0
  21. package/dist/cjs/adapters/MongoAdapter.js.map +1 -0
  22. package/dist/cjs/adapters/OpenSearchAdapter.js.map +1 -0
  23. package/dist/cjs/adapters/PostgreSQLAdapter.js.map +1 -0
  24. package/dist/{src → cjs}/adapters/PrismaAdapter.d.ts.map +1 -1
  25. package/dist/cjs/{src/adapters → adapters}/PrismaAdapter.js +3 -2
  26. package/dist/cjs/adapters/PrismaAdapter.js.map +1 -0
  27. package/dist/cjs/{src/adapters → adapters}/RedisAdapter.js +2 -2
  28. package/dist/cjs/adapters/RedisAdapter.js.map +1 -0
  29. package/dist/cjs/adapters/SQLiteAdapter.js.map +1 -0
  30. package/dist/cjs/adapters/index.js.map +1 -0
  31. package/dist/cjs/constants/index.js.map +1 -0
  32. package/dist/{src → cjs}/core/Agent.d.ts +25 -6
  33. package/dist/cjs/core/Agent.d.ts.map +1 -0
  34. package/dist/cjs/{src/core → core}/Agent.js +121 -37
  35. package/dist/cjs/core/Agent.js.map +1 -0
  36. package/dist/cjs/core/BatchExecutor.d.ts +353 -0
  37. package/dist/cjs/core/BatchExecutor.d.ts.map +1 -0
  38. package/dist/cjs/core/BatchExecutor.js +842 -0
  39. package/dist/cjs/core/BatchExecutor.js.map +1 -0
  40. package/dist/cjs/core/BatchPromptBuilder.d.ts +86 -0
  41. package/dist/cjs/core/BatchPromptBuilder.d.ts.map +1 -0
  42. package/dist/cjs/core/BatchPromptBuilder.js +201 -0
  43. package/dist/cjs/core/BatchPromptBuilder.js.map +1 -0
  44. package/dist/cjs/core/Events.js.map +1 -0
  45. package/dist/cjs/core/PersistenceManager.js.map +1 -0
  46. package/dist/{src → cjs}/core/PromptComposer.d.ts +1 -1
  47. package/dist/cjs/core/PromptComposer.d.ts.map +1 -0
  48. package/dist/cjs/{src/core → core}/PromptComposer.js +44 -7
  49. package/dist/cjs/core/PromptComposer.js.map +1 -0
  50. package/dist/{src → cjs}/core/ResponseEngine.d.ts.map +1 -1
  51. package/dist/cjs/core/ResponseEngine.js +202 -0
  52. package/dist/cjs/core/ResponseEngine.js.map +1 -0
  53. package/dist/{src → cjs}/core/ResponseModal.d.ts +54 -3
  54. package/dist/cjs/core/ResponseModal.d.ts.map +1 -0
  55. package/dist/cjs/{src/core → core}/ResponseModal.js +807 -121
  56. package/dist/cjs/core/ResponseModal.js.map +1 -0
  57. package/dist/{src → cjs}/core/ResponsePipeline.d.ts +10 -6
  58. package/dist/cjs/core/ResponsePipeline.d.ts.map +1 -0
  59. package/dist/cjs/{src/core → core}/ResponsePipeline.js +60 -25
  60. package/dist/cjs/core/ResponsePipeline.js.map +1 -0
  61. package/dist/{src → cjs}/core/Route.d.ts +46 -10
  62. package/dist/cjs/core/Route.d.ts.map +1 -0
  63. package/dist/cjs/core/Route.js +541 -0
  64. package/dist/cjs/core/Route.js.map +1 -0
  65. package/dist/cjs/{src/core → core}/RoutingEngine.d.ts +35 -5
  66. package/dist/cjs/core/RoutingEngine.d.ts.map +1 -0
  67. package/dist/cjs/{src/core → core}/RoutingEngine.js +360 -98
  68. package/dist/cjs/core/RoutingEngine.js.map +1 -0
  69. package/dist/{src → cjs}/core/SessionManager.d.ts +9 -1
  70. package/dist/cjs/core/SessionManager.d.ts.map +1 -0
  71. package/dist/cjs/{src/core → core}/SessionManager.js +27 -5
  72. package/dist/cjs/core/SessionManager.js.map +1 -0
  73. package/dist/cjs/core/Step.d.ts +170 -0
  74. package/dist/cjs/core/Step.d.ts.map +1 -0
  75. package/dist/cjs/core/Step.js +448 -0
  76. package/dist/cjs/core/Step.js.map +1 -0
  77. package/dist/cjs/core/ToolManager.d.ts +234 -0
  78. package/dist/cjs/core/ToolManager.d.ts.map +1 -0
  79. package/dist/cjs/core/ToolManager.js +1117 -0
  80. package/dist/cjs/core/ToolManager.js.map +1 -0
  81. package/dist/{src → cjs}/index.d.ts +5 -3
  82. package/dist/cjs/index.d.ts.map +1 -0
  83. package/dist/cjs/{src/index.js → index.js} +16 -3
  84. package/dist/cjs/index.js.map +1 -0
  85. package/dist/cjs/{src/providers → providers}/AnthropicProvider.js +18 -18
  86. package/dist/cjs/providers/AnthropicProvider.js.map +1 -0
  87. package/dist/{src → cjs}/providers/GeminiProvider.d.ts.map +1 -1
  88. package/dist/cjs/{src/providers → providers}/GeminiProvider.js +123 -51
  89. package/dist/cjs/providers/GeminiProvider.js.map +1 -0
  90. package/dist/cjs/{src/providers → providers}/OpenAIProvider.js +19 -19
  91. package/dist/cjs/providers/OpenAIProvider.js.map +1 -0
  92. package/dist/cjs/{src/providers → providers}/OpenRouterProvider.js +19 -19
  93. package/dist/cjs/providers/OpenRouterProvider.js.map +1 -0
  94. package/dist/cjs/providers/index.js.map +1 -0
  95. package/dist/cjs/{src/types → types}/agent.d.ts +12 -4
  96. package/dist/cjs/types/agent.d.ts.map +1 -0
  97. package/dist/cjs/types/agent.js.map +1 -0
  98. package/dist/{src → cjs}/types/ai.js.map +1 -1
  99. package/dist/cjs/types/history.js.map +1 -0
  100. package/dist/cjs/{src/types → types}/index.d.ts +5 -3
  101. package/dist/{src → cjs}/types/index.d.ts.map +1 -1
  102. package/dist/cjs/{src/types → types}/index.js +8 -1
  103. package/dist/cjs/types/index.js.map +1 -0
  104. package/dist/cjs/types/persistence.js.map +1 -0
  105. package/dist/cjs/{src/types → types}/route.d.ts +116 -15
  106. package/dist/cjs/types/route.d.ts.map +1 -0
  107. package/dist/cjs/{src/types → types}/route.js.map +1 -1
  108. package/dist/cjs/types/session.js.map +1 -0
  109. package/dist/cjs/types/template.d.ts +88 -0
  110. package/dist/cjs/types/template.d.ts.map +1 -0
  111. package/dist/cjs/types/tool.d.ts +130 -0
  112. package/dist/cjs/types/tool.d.ts.map +1 -0
  113. package/dist/cjs/types/tool.js +19 -0
  114. package/dist/cjs/types/tool.js.map +1 -0
  115. package/dist/cjs/utils/clone.js.map +1 -0
  116. package/dist/cjs/utils/condition.d.ts +38 -0
  117. package/dist/cjs/utils/condition.d.ts.map +1 -0
  118. package/dist/cjs/utils/condition.js +168 -0
  119. package/dist/cjs/utils/condition.js.map +1 -0
  120. package/dist/cjs/utils/event.js.map +1 -0
  121. package/dist/cjs/utils/history.js.map +1 -0
  122. package/dist/cjs/utils/id.js.map +1 -0
  123. package/dist/cjs/{src/utils → utils}/index.d.ts +3 -1
  124. package/dist/cjs/utils/index.d.ts.map +1 -0
  125. package/dist/cjs/{src/utils → utils}/index.js +12 -1
  126. package/dist/cjs/utils/index.js.map +1 -0
  127. package/dist/cjs/utils/json.d.ts +16 -0
  128. package/dist/cjs/utils/json.d.ts.map +1 -0
  129. package/dist/cjs/utils/json.js +47 -0
  130. package/dist/cjs/utils/json.js.map +1 -0
  131. package/dist/cjs/utils/logger.js.map +1 -0
  132. package/dist/{src → cjs}/utils/retry.d.ts +0 -3
  133. package/dist/cjs/utils/retry.d.ts.map +1 -0
  134. package/dist/cjs/{src/utils → utils}/retry.js +8 -7
  135. package/dist/cjs/utils/retry.js.map +1 -0
  136. package/dist/cjs/utils/session.js.map +1 -0
  137. package/dist/{src → cjs}/utils/template.d.ts +48 -0
  138. package/dist/cjs/utils/template.d.ts.map +1 -0
  139. package/dist/cjs/{src/utils → utils}/template.js +100 -0
  140. package/dist/cjs/utils/template.js.map +1 -0
  141. package/dist/constants/index.d.ts.map +1 -0
  142. package/dist/constants/index.js.map +1 -0
  143. package/dist/{cjs/src/core → core}/Agent.d.ts +25 -6
  144. package/dist/core/Agent.d.ts.map +1 -0
  145. package/dist/{src/core → core}/Agent.js +122 -38
  146. package/dist/core/Agent.js.map +1 -0
  147. package/dist/core/BatchExecutor.d.ts +353 -0
  148. package/dist/core/BatchExecutor.d.ts.map +1 -0
  149. package/dist/core/BatchExecutor.js +837 -0
  150. package/dist/core/BatchExecutor.js.map +1 -0
  151. package/dist/core/BatchPromptBuilder.d.ts +86 -0
  152. package/dist/core/BatchPromptBuilder.d.ts.map +1 -0
  153. package/dist/core/BatchPromptBuilder.js +197 -0
  154. package/dist/core/BatchPromptBuilder.js.map +1 -0
  155. package/dist/core/Events.d.ts.map +1 -0
  156. package/dist/core/Events.js.map +1 -0
  157. package/dist/core/PersistenceManager.d.ts.map +1 -0
  158. package/dist/core/PersistenceManager.js.map +1 -0
  159. package/dist/{cjs/src/core → core}/PromptComposer.d.ts +1 -1
  160. package/dist/core/PromptComposer.d.ts.map +1 -0
  161. package/dist/{src/core → core}/PromptComposer.js +45 -8
  162. package/dist/core/PromptComposer.js.map +1 -0
  163. package/dist/core/ResponseEngine.d.ts.map +1 -0
  164. package/dist/core/ResponseEngine.js +198 -0
  165. package/dist/core/ResponseEngine.js.map +1 -0
  166. package/dist/{cjs/src/core → core}/ResponseModal.d.ts +54 -3
  167. package/dist/core/ResponseModal.d.ts.map +1 -0
  168. package/dist/{src/core → core}/ResponseModal.js +807 -121
  169. package/dist/core/ResponseModal.js.map +1 -0
  170. package/dist/{cjs/src/core → core}/ResponsePipeline.d.ts +10 -6
  171. package/dist/core/ResponsePipeline.d.ts.map +1 -0
  172. package/dist/{src/core → core}/ResponsePipeline.js +60 -25
  173. package/dist/core/ResponsePipeline.js.map +1 -0
  174. package/dist/{cjs/src/core → core}/Route.d.ts +46 -10
  175. package/dist/core/Route.d.ts.map +1 -0
  176. package/dist/core/Route.js +537 -0
  177. package/dist/core/Route.js.map +1 -0
  178. package/dist/{src/core → core}/RoutingEngine.d.ts +35 -5
  179. package/dist/core/RoutingEngine.d.ts.map +1 -0
  180. package/dist/{src/core → core}/RoutingEngine.js +343 -81
  181. package/dist/core/RoutingEngine.js.map +1 -0
  182. package/dist/{cjs/src/core → core}/SessionManager.d.ts +9 -1
  183. package/dist/core/SessionManager.d.ts.map +1 -0
  184. package/dist/{src/core → core}/SessionManager.js +27 -5
  185. package/dist/core/SessionManager.js.map +1 -0
  186. package/dist/core/Step.d.ts +170 -0
  187. package/dist/core/Step.d.ts.map +1 -0
  188. package/dist/core/Step.js +444 -0
  189. package/dist/core/Step.js.map +1 -0
  190. package/dist/core/ToolManager.d.ts +234 -0
  191. package/dist/core/ToolManager.d.ts.map +1 -0
  192. package/dist/core/ToolManager.js +1111 -0
  193. package/dist/core/ToolManager.js.map +1 -0
  194. package/dist/{cjs/src/index.d.ts → index.d.ts} +5 -3
  195. package/dist/index.d.ts.map +1 -0
  196. package/dist/{src/index.js → index.js} +4 -1
  197. package/dist/index.js.map +1 -0
  198. package/dist/providers/AnthropicProvider.d.ts.map +1 -0
  199. package/dist/{src/providers → providers}/AnthropicProvider.js +17 -17
  200. package/dist/providers/AnthropicProvider.js.map +1 -0
  201. package/dist/providers/GeminiProvider.d.ts.map +1 -0
  202. package/dist/{src/providers → providers}/GeminiProvider.js +123 -51
  203. package/dist/providers/GeminiProvider.js.map +1 -0
  204. package/dist/providers/OpenAIProvider.d.ts.map +1 -0
  205. package/dist/{src/providers → providers}/OpenAIProvider.js +18 -18
  206. package/dist/providers/OpenAIProvider.js.map +1 -0
  207. package/dist/providers/OpenRouterProvider.d.ts.map +1 -0
  208. package/dist/{src/providers → providers}/OpenRouterProvider.js +18 -18
  209. package/dist/providers/OpenRouterProvider.js.map +1 -0
  210. package/dist/providers/index.d.ts.map +1 -0
  211. package/dist/providers/index.js.map +1 -0
  212. package/dist/{src/types → types}/agent.d.ts +12 -4
  213. package/dist/types/agent.d.ts.map +1 -0
  214. package/dist/types/agent.js.map +1 -0
  215. package/dist/types/ai.d.ts.map +1 -0
  216. package/dist/types/ai.js.map +1 -0
  217. package/dist/types/history.d.ts.map +1 -0
  218. package/dist/types/history.js.map +1 -0
  219. package/dist/{src/types → types}/index.d.ts +5 -3
  220. package/dist/types/index.d.ts.map +1 -0
  221. package/dist/{src/types → types}/index.js +2 -0
  222. package/dist/types/index.js.map +1 -0
  223. package/dist/types/persistence.d.ts.map +1 -0
  224. package/dist/types/persistence.js.map +1 -0
  225. package/dist/{src/types → types}/route.d.ts +116 -15
  226. package/dist/types/route.d.ts.map +1 -0
  227. package/dist/{src/types → types}/route.js.map +1 -1
  228. package/dist/types/routing.d.ts.map +1 -0
  229. package/dist/{cjs/src/types → types}/routing.js.map +1 -1
  230. package/dist/types/schema.d.ts.map +1 -0
  231. package/dist/{cjs/src/types → types}/schema.js.map +1 -1
  232. package/dist/types/session.d.ts.map +1 -0
  233. package/dist/{src/types → types}/session.js.map +1 -1
  234. package/dist/types/template.d.ts +88 -0
  235. package/dist/types/template.d.ts.map +1 -0
  236. package/dist/{cjs/src/types → types}/template.js.map +1 -1
  237. package/dist/types/tool.d.ts +130 -0
  238. package/dist/types/tool.d.ts.map +1 -0
  239. package/dist/types/tool.js +16 -0
  240. package/dist/types/tool.js.map +1 -0
  241. package/dist/utils/clone.d.ts.map +1 -0
  242. package/dist/utils/clone.js.map +1 -0
  243. package/dist/utils/condition.d.ts +38 -0
  244. package/dist/utils/condition.d.ts.map +1 -0
  245. package/dist/utils/condition.js +161 -0
  246. package/dist/utils/condition.js.map +1 -0
  247. package/dist/utils/event.d.ts.map +1 -0
  248. package/dist/utils/event.js.map +1 -0
  249. package/dist/utils/history.d.ts.map +1 -0
  250. package/dist/utils/history.js.map +1 -0
  251. package/dist/utils/id.d.ts.map +1 -0
  252. package/dist/utils/id.js.map +1 -0
  253. package/dist/{src/utils → utils}/index.d.ts +3 -1
  254. package/dist/utils/index.d.ts.map +1 -0
  255. package/dist/{src/utils → utils}/index.js +5 -1
  256. package/dist/utils/index.js.map +1 -0
  257. package/dist/utils/json.d.ts +16 -0
  258. package/dist/utils/json.d.ts.map +1 -0
  259. package/dist/utils/json.js +43 -0
  260. package/dist/utils/json.js.map +1 -0
  261. package/dist/utils/logger.d.ts.map +1 -0
  262. package/dist/utils/logger.js.map +1 -0
  263. package/dist/{cjs/src/utils → utils}/retry.d.ts +0 -3
  264. package/dist/utils/retry.d.ts.map +1 -0
  265. package/dist/{src/utils → utils}/retry.js +5 -4
  266. package/dist/utils/retry.js.map +1 -0
  267. package/dist/utils/session.d.ts.map +1 -0
  268. package/dist/utils/session.js.map +1 -0
  269. package/dist/{cjs/src/utils → utils}/template.d.ts +48 -0
  270. package/dist/utils/template.d.ts.map +1 -0
  271. package/dist/{src/utils → utils}/template.js +98 -0
  272. package/dist/utils/template.js.map +1 -0
  273. package/docs/CONTRIBUTING.md +40 -0
  274. package/docs/README.md +12 -5
  275. package/docs/api/README.md +295 -56
  276. package/docs/api/overview.md +272 -31
  277. package/docs/architecture/data-extraction-flow.md +363 -0
  278. package/docs/architecture/multi-step-execution.md +243 -0
  279. package/docs/core/agent/README.md +120 -5
  280. package/docs/core/agent/session-management.md +153 -6
  281. package/docs/core/ai-integration/prompt-composition.md +135 -0
  282. package/docs/core/ai-integration/response-processing.md +261 -4
  283. package/docs/core/conversation-flows/data-collection.md +143 -0
  284. package/docs/core/conversation-flows/routes.md +132 -2
  285. package/docs/core/conversation-flows/step-transitions.md +132 -0
  286. package/docs/core/conversation-flows/steps.md +112 -0
  287. package/docs/core/error-handling.md +831 -0
  288. package/docs/core/routing/intelligent-routing.md +118 -0
  289. package/docs/core/tools/tool-definition.md +684 -60
  290. package/docs/core/tools/tool-scoping.md +244 -53
  291. package/docs/guides/error-handling-patterns.md +578 -0
  292. package/docs/guides/getting-started/README.md +423 -31
  293. package/docs/guides/migration/README.md +23 -0
  294. package/docs/guides/migration/flexible-routing-conditions.md +375 -0
  295. package/docs/guides/migration/multi-step-execution.md +303 -0
  296. package/examples/advanced-patterns/knowledge-based-agent.ts +107 -30
  297. package/examples/advanced-patterns/persistent-onboarding.ts +70 -48
  298. package/examples/advanced-patterns/route-lifecycle-hooks.ts +82 -12
  299. package/examples/advanced-patterns/streaming-responses.ts +2 -2
  300. package/examples/ai-providers/anthropic-integration.ts +13 -9
  301. package/examples/ai-providers/openai-integration.ts +12 -8
  302. package/examples/condition-patterns/function-only-conditions.ts +365 -0
  303. package/examples/condition-patterns/mixed-array-conditions.ts +477 -0
  304. package/examples/condition-patterns/route-skipif-patterns.ts +468 -0
  305. package/examples/condition-patterns/step-skipif-patterns.ts +0 -0
  306. package/examples/condition-patterns/string-only-conditions.ts +296 -0
  307. package/examples/conversation-flows/completion-transitions.ts +48 -7
  308. package/examples/core-concepts/basic-agent.ts +158 -98
  309. package/examples/core-concepts/schema-driven-extraction.ts +43 -16
  310. package/examples/core-concepts/session-management.ts +117 -29
  311. package/examples/integrations/database-integration.ts +6 -6
  312. package/examples/integrations/healthcare-integration.ts +25 -39
  313. package/examples/integrations/search-integration.ts +8 -8
  314. package/examples/integrations/server-session-management.ts +11 -11
  315. package/examples/persistence/database-persistence.ts +15 -15
  316. package/examples/persistence/memory-sessions.ts +6 -6
  317. package/examples/persistence/redis-persistence.ts +7 -9
  318. package/examples/tools/basic-tools.ts +293 -89
  319. package/examples/tools/data-enrichment-tools.ts +189 -79
  320. package/package.json +6 -4
  321. package/src/adapters/PrismaAdapter.ts +3 -2
  322. package/src/adapters/RedisAdapter.ts +3 -3
  323. package/src/core/Agent.ts +152 -46
  324. package/src/core/BatchExecutor.ts +1156 -0
  325. package/src/core/BatchPromptBuilder.ts +275 -0
  326. package/src/core/PromptComposer.ts +53 -16
  327. package/src/core/ResponseEngine.ts +143 -4
  328. package/src/core/ResponseModal.ts +1035 -137
  329. package/src/core/ResponsePipeline.ts +99 -65
  330. package/src/core/Route.ts +262 -34
  331. package/src/core/RoutingEngine.ts +467 -120
  332. package/src/core/SessionManager.ts +39 -7
  333. package/src/core/Step.ts +338 -32
  334. package/src/core/ToolManager.ts +1394 -0
  335. package/src/index.ts +27 -3
  336. package/src/providers/AnthropicProvider.ts +17 -17
  337. package/src/providers/GeminiProvider.ts +129 -60
  338. package/src/providers/OpenAIProvider.ts +18 -18
  339. package/src/providers/OpenRouterProvider.ts +18 -18
  340. package/src/types/agent.ts +12 -4
  341. package/src/types/index.ts +25 -3
  342. package/src/types/route.ts +136 -15
  343. package/src/types/template.ts +70 -2
  344. package/src/types/tool.ts +116 -25
  345. package/src/utils/condition.ts +190 -0
  346. package/src/utils/index.ts +12 -0
  347. package/src/utils/json.ts +46 -0
  348. package/src/utils/retry.ts +5 -4
  349. package/src/utils/template.ts +109 -0
  350. package/dist/cjs/src/adapters/MemoryAdapter.d.ts.map +0 -1
  351. package/dist/cjs/src/adapters/MemoryAdapter.js.map +0 -1
  352. package/dist/cjs/src/adapters/MongoAdapter.d.ts.map +0 -1
  353. package/dist/cjs/src/adapters/MongoAdapter.js.map +0 -1
  354. package/dist/cjs/src/adapters/OpenSearchAdapter.d.ts.map +0 -1
  355. package/dist/cjs/src/adapters/OpenSearchAdapter.js.map +0 -1
  356. package/dist/cjs/src/adapters/PostgreSQLAdapter.d.ts.map +0 -1
  357. package/dist/cjs/src/adapters/PostgreSQLAdapter.js.map +0 -1
  358. package/dist/cjs/src/adapters/PrismaAdapter.d.ts.map +0 -1
  359. package/dist/cjs/src/adapters/PrismaAdapter.js.map +0 -1
  360. package/dist/cjs/src/adapters/RedisAdapter.d.ts.map +0 -1
  361. package/dist/cjs/src/adapters/RedisAdapter.js.map +0 -1
  362. package/dist/cjs/src/adapters/SQLiteAdapter.d.ts.map +0 -1
  363. package/dist/cjs/src/adapters/SQLiteAdapter.js.map +0 -1
  364. package/dist/cjs/src/adapters/index.d.ts.map +0 -1
  365. package/dist/cjs/src/adapters/index.js.map +0 -1
  366. package/dist/cjs/src/constants/index.d.ts.map +0 -1
  367. package/dist/cjs/src/constants/index.js.map +0 -1
  368. package/dist/cjs/src/core/Agent.d.ts.map +0 -1
  369. package/dist/cjs/src/core/Agent.js.map +0 -1
  370. package/dist/cjs/src/core/Events.d.ts.map +0 -1
  371. package/dist/cjs/src/core/Events.js.map +0 -1
  372. package/dist/cjs/src/core/PersistenceManager.d.ts.map +0 -1
  373. package/dist/cjs/src/core/PersistenceManager.js.map +0 -1
  374. package/dist/cjs/src/core/PromptComposer.d.ts.map +0 -1
  375. package/dist/cjs/src/core/PromptComposer.js.map +0 -1
  376. package/dist/cjs/src/core/ResponseEngine.d.ts.map +0 -1
  377. package/dist/cjs/src/core/ResponseEngine.js +0 -84
  378. package/dist/cjs/src/core/ResponseEngine.js.map +0 -1
  379. package/dist/cjs/src/core/ResponseModal.d.ts.map +0 -1
  380. package/dist/cjs/src/core/ResponseModal.js.map +0 -1
  381. package/dist/cjs/src/core/ResponsePipeline.d.ts.map +0 -1
  382. package/dist/cjs/src/core/ResponsePipeline.js.map +0 -1
  383. package/dist/cjs/src/core/Route.d.ts.map +0 -1
  384. package/dist/cjs/src/core/Route.js +0 -343
  385. package/dist/cjs/src/core/Route.js.map +0 -1
  386. package/dist/cjs/src/core/RoutingEngine.d.ts.map +0 -1
  387. package/dist/cjs/src/core/RoutingEngine.js.map +0 -1
  388. package/dist/cjs/src/core/SessionManager.d.ts.map +0 -1
  389. package/dist/cjs/src/core/SessionManager.js.map +0 -1
  390. package/dist/cjs/src/core/Step.d.ts +0 -96
  391. package/dist/cjs/src/core/Step.d.ts.map +0 -1
  392. package/dist/cjs/src/core/Step.js +0 -206
  393. package/dist/cjs/src/core/Step.js.map +0 -1
  394. package/dist/cjs/src/core/ToolExecutor.d.ts +0 -45
  395. package/dist/cjs/src/core/ToolExecutor.d.ts.map +0 -1
  396. package/dist/cjs/src/core/ToolExecutor.js +0 -84
  397. package/dist/cjs/src/core/ToolExecutor.js.map +0 -1
  398. package/dist/cjs/src/index.d.ts.map +0 -1
  399. package/dist/cjs/src/index.js.map +0 -1
  400. package/dist/cjs/src/providers/AnthropicProvider.d.ts.map +0 -1
  401. package/dist/cjs/src/providers/AnthropicProvider.js.map +0 -1
  402. package/dist/cjs/src/providers/GeminiProvider.d.ts.map +0 -1
  403. package/dist/cjs/src/providers/GeminiProvider.js.map +0 -1
  404. package/dist/cjs/src/providers/OpenAIProvider.d.ts.map +0 -1
  405. package/dist/cjs/src/providers/OpenAIProvider.js.map +0 -1
  406. package/dist/cjs/src/providers/OpenRouterProvider.d.ts.map +0 -1
  407. package/dist/cjs/src/providers/OpenRouterProvider.js.map +0 -1
  408. package/dist/cjs/src/providers/index.d.ts.map +0 -1
  409. package/dist/cjs/src/providers/index.js.map +0 -1
  410. package/dist/cjs/src/types/agent.d.ts.map +0 -1
  411. package/dist/cjs/src/types/agent.js.map +0 -1
  412. package/dist/cjs/src/types/ai.d.ts.map +0 -1
  413. package/dist/cjs/src/types/ai.js.map +0 -1
  414. package/dist/cjs/src/types/history.d.ts.map +0 -1
  415. package/dist/cjs/src/types/history.js.map +0 -1
  416. package/dist/cjs/src/types/index.d.ts.map +0 -1
  417. package/dist/cjs/src/types/index.js.map +0 -1
  418. package/dist/cjs/src/types/persistence.d.ts.map +0 -1
  419. package/dist/cjs/src/types/persistence.js.map +0 -1
  420. package/dist/cjs/src/types/route.d.ts.map +0 -1
  421. package/dist/cjs/src/types/routing.d.ts.map +0 -1
  422. package/dist/cjs/src/types/schema.d.ts.map +0 -1
  423. package/dist/cjs/src/types/session.d.ts.map +0 -1
  424. package/dist/cjs/src/types/session.js.map +0 -1
  425. package/dist/cjs/src/types/template.d.ts +0 -30
  426. package/dist/cjs/src/types/template.d.ts.map +0 -1
  427. package/dist/cjs/src/types/tool.d.ts +0 -60
  428. package/dist/cjs/src/types/tool.d.ts.map +0 -1
  429. package/dist/cjs/src/types/tool.js +0 -6
  430. package/dist/cjs/src/types/tool.js.map +0 -1
  431. package/dist/cjs/src/utils/clone.d.ts.map +0 -1
  432. package/dist/cjs/src/utils/clone.js.map +0 -1
  433. package/dist/cjs/src/utils/event.d.ts.map +0 -1
  434. package/dist/cjs/src/utils/event.js.map +0 -1
  435. package/dist/cjs/src/utils/history.d.ts.map +0 -1
  436. package/dist/cjs/src/utils/history.js.map +0 -1
  437. package/dist/cjs/src/utils/id.d.ts.map +0 -1
  438. package/dist/cjs/src/utils/id.js.map +0 -1
  439. package/dist/cjs/src/utils/index.d.ts.map +0 -1
  440. package/dist/cjs/src/utils/index.js.map +0 -1
  441. package/dist/cjs/src/utils/logger.d.ts.map +0 -1
  442. package/dist/cjs/src/utils/logger.js.map +0 -1
  443. package/dist/cjs/src/utils/retry.d.ts.map +0 -1
  444. package/dist/cjs/src/utils/retry.js.map +0 -1
  445. package/dist/cjs/src/utils/session.d.ts.map +0 -1
  446. package/dist/cjs/src/utils/session.js.map +0 -1
  447. package/dist/cjs/src/utils/template.d.ts.map +0 -1
  448. package/dist/cjs/src/utils/template.js.map +0 -1
  449. package/dist/src/adapters/MemoryAdapter.js.map +0 -1
  450. package/dist/src/adapters/MongoAdapter.js.map +0 -1
  451. package/dist/src/adapters/OpenSearchAdapter.js.map +0 -1
  452. package/dist/src/adapters/PostgreSQLAdapter.js.map +0 -1
  453. package/dist/src/adapters/PrismaAdapter.js.map +0 -1
  454. package/dist/src/adapters/RedisAdapter.js.map +0 -1
  455. package/dist/src/adapters/SQLiteAdapter.js.map +0 -1
  456. package/dist/src/adapters/index.js.map +0 -1
  457. package/dist/src/constants/index.js.map +0 -1
  458. package/dist/src/core/Agent.d.ts.map +0 -1
  459. package/dist/src/core/Agent.js.map +0 -1
  460. package/dist/src/core/Events.js.map +0 -1
  461. package/dist/src/core/PersistenceManager.js.map +0 -1
  462. package/dist/src/core/PromptComposer.d.ts.map +0 -1
  463. package/dist/src/core/PromptComposer.js.map +0 -1
  464. package/dist/src/core/ResponseEngine.js +0 -80
  465. package/dist/src/core/ResponseEngine.js.map +0 -1
  466. package/dist/src/core/ResponseModal.d.ts.map +0 -1
  467. package/dist/src/core/ResponseModal.js.map +0 -1
  468. package/dist/src/core/ResponsePipeline.d.ts.map +0 -1
  469. package/dist/src/core/ResponsePipeline.js.map +0 -1
  470. package/dist/src/core/Route.d.ts.map +0 -1
  471. package/dist/src/core/Route.js +0 -339
  472. package/dist/src/core/Route.js.map +0 -1
  473. package/dist/src/core/RoutingEngine.d.ts.map +0 -1
  474. package/dist/src/core/RoutingEngine.js.map +0 -1
  475. package/dist/src/core/SessionManager.d.ts.map +0 -1
  476. package/dist/src/core/SessionManager.js.map +0 -1
  477. package/dist/src/core/Step.d.ts +0 -96
  478. package/dist/src/core/Step.d.ts.map +0 -1
  479. package/dist/src/core/Step.js +0 -202
  480. package/dist/src/core/Step.js.map +0 -1
  481. package/dist/src/core/ToolExecutor.d.ts +0 -45
  482. package/dist/src/core/ToolExecutor.d.ts.map +0 -1
  483. package/dist/src/core/ToolExecutor.js +0 -80
  484. package/dist/src/core/ToolExecutor.js.map +0 -1
  485. package/dist/src/index.d.ts.map +0 -1
  486. package/dist/src/index.js.map +0 -1
  487. package/dist/src/providers/AnthropicProvider.js.map +0 -1
  488. package/dist/src/providers/GeminiProvider.js.map +0 -1
  489. package/dist/src/providers/OpenAIProvider.js.map +0 -1
  490. package/dist/src/providers/OpenRouterProvider.js.map +0 -1
  491. package/dist/src/providers/index.js.map +0 -1
  492. package/dist/src/types/agent.d.ts.map +0 -1
  493. package/dist/src/types/agent.js.map +0 -1
  494. package/dist/src/types/history.js.map +0 -1
  495. package/dist/src/types/index.js.map +0 -1
  496. package/dist/src/types/persistence.js.map +0 -1
  497. package/dist/src/types/route.d.ts.map +0 -1
  498. package/dist/src/types/template.d.ts +0 -30
  499. package/dist/src/types/template.d.ts.map +0 -1
  500. package/dist/src/types/tool.d.ts +0 -60
  501. package/dist/src/types/tool.d.ts.map +0 -1
  502. package/dist/src/types/tool.js +0 -5
  503. package/dist/src/types/tool.js.map +0 -1
  504. package/dist/src/utils/clone.js.map +0 -1
  505. package/dist/src/utils/event.js.map +0 -1
  506. package/dist/src/utils/history.js.map +0 -1
  507. package/dist/src/utils/id.js.map +0 -1
  508. package/dist/src/utils/index.d.ts.map +0 -1
  509. package/dist/src/utils/index.js.map +0 -1
  510. package/dist/src/utils/logger.js.map +0 -1
  511. package/dist/src/utils/retry.d.ts.map +0 -1
  512. package/dist/src/utils/retry.js.map +0 -1
  513. package/dist/src/utils/session.js.map +0 -1
  514. package/dist/src/utils/template.d.ts.map +0 -1
  515. package/dist/src/utils/template.js.map +0 -1
  516. package/docs/core/tools/tool-execution.md +0 -815
  517. package/src/core/ToolExecutor.ts +0 -126
  518. /package/dist/{cjs/src/adapters → adapters}/MemoryAdapter.d.ts +0 -0
  519. /package/dist/{src/adapters → adapters}/MemoryAdapter.js +0 -0
  520. /package/dist/{cjs/src/adapters → adapters}/MongoAdapter.d.ts +0 -0
  521. /package/dist/{src/adapters → adapters}/MongoAdapter.js +0 -0
  522. /package/dist/{cjs/src/adapters → adapters}/OpenSearchAdapter.d.ts +0 -0
  523. /package/dist/{src/adapters → adapters}/OpenSearchAdapter.js +0 -0
  524. /package/dist/{cjs/src/adapters → adapters}/PostgreSQLAdapter.d.ts +0 -0
  525. /package/dist/{src/adapters → adapters}/PostgreSQLAdapter.js +0 -0
  526. /package/dist/{cjs/src/adapters → adapters}/PrismaAdapter.d.ts +0 -0
  527. /package/dist/{cjs/src/adapters → adapters}/RedisAdapter.d.ts +0 -0
  528. /package/dist/{cjs/src/adapters → adapters}/SQLiteAdapter.d.ts +0 -0
  529. /package/dist/{src/adapters → adapters}/SQLiteAdapter.js +0 -0
  530. /package/dist/{cjs/src/adapters → adapters}/index.d.ts +0 -0
  531. /package/dist/{src/adapters → adapters}/index.js +0 -0
  532. /package/dist/{src → cjs}/adapters/MemoryAdapter.d.ts +0 -0
  533. /package/dist/{src → cjs}/adapters/MemoryAdapter.d.ts.map +0 -0
  534. /package/dist/cjs/{src/adapters → adapters}/MemoryAdapter.js +0 -0
  535. /package/dist/{src → cjs}/adapters/MongoAdapter.d.ts +0 -0
  536. /package/dist/{src → cjs}/adapters/MongoAdapter.d.ts.map +0 -0
  537. /package/dist/cjs/{src/adapters → adapters}/MongoAdapter.js +0 -0
  538. /package/dist/{src → cjs}/adapters/OpenSearchAdapter.d.ts +0 -0
  539. /package/dist/{src → cjs}/adapters/OpenSearchAdapter.d.ts.map +0 -0
  540. /package/dist/cjs/{src/adapters → adapters}/OpenSearchAdapter.js +0 -0
  541. /package/dist/{src → cjs}/adapters/PostgreSQLAdapter.d.ts +0 -0
  542. /package/dist/{src → cjs}/adapters/PostgreSQLAdapter.d.ts.map +0 -0
  543. /package/dist/cjs/{src/adapters → adapters}/PostgreSQLAdapter.js +0 -0
  544. /package/dist/{src → cjs}/adapters/PrismaAdapter.d.ts +0 -0
  545. /package/dist/{src → cjs}/adapters/RedisAdapter.d.ts +0 -0
  546. /package/dist/{src → cjs}/adapters/RedisAdapter.d.ts.map +0 -0
  547. /package/dist/{src → cjs}/adapters/SQLiteAdapter.d.ts +0 -0
  548. /package/dist/{src → cjs}/adapters/SQLiteAdapter.d.ts.map +0 -0
  549. /package/dist/cjs/{src/adapters → adapters}/SQLiteAdapter.js +0 -0
  550. /package/dist/{src → cjs}/adapters/index.d.ts +0 -0
  551. /package/dist/{src → cjs}/adapters/index.d.ts.map +0 -0
  552. /package/dist/cjs/{src/adapters → adapters}/index.js +0 -0
  553. /package/dist/cjs/{src/constants → constants}/index.d.ts +0 -0
  554. /package/dist/{src → cjs}/constants/index.d.ts.map +0 -0
  555. /package/dist/cjs/{src/constants → constants}/index.js +0 -0
  556. /package/dist/cjs/{src/core → core}/Events.d.ts +0 -0
  557. /package/dist/{src → cjs}/core/Events.d.ts.map +0 -0
  558. /package/dist/cjs/{src/core → core}/Events.js +0 -0
  559. /package/dist/cjs/{src/core → core}/PersistenceManager.d.ts +0 -0
  560. /package/dist/{src → cjs}/core/PersistenceManager.d.ts.map +0 -0
  561. /package/dist/cjs/{src/core → core}/PersistenceManager.js +0 -0
  562. /package/dist/cjs/{src/core → core}/ResponseEngine.d.ts +0 -0
  563. /package/dist/cjs/{src/providers → providers}/AnthropicProvider.d.ts +0 -0
  564. /package/dist/{src → cjs}/providers/AnthropicProvider.d.ts.map +0 -0
  565. /package/dist/cjs/{src/providers → providers}/GeminiProvider.d.ts +0 -0
  566. /package/dist/cjs/{src/providers → providers}/OpenAIProvider.d.ts +0 -0
  567. /package/dist/{src → cjs}/providers/OpenAIProvider.d.ts.map +0 -0
  568. /package/dist/cjs/{src/providers → providers}/OpenRouterProvider.d.ts +0 -0
  569. /package/dist/{src → cjs}/providers/OpenRouterProvider.d.ts.map +0 -0
  570. /package/dist/cjs/{src/providers → providers}/index.d.ts +0 -0
  571. /package/dist/{src → cjs}/providers/index.d.ts.map +0 -0
  572. /package/dist/cjs/{src/providers → providers}/index.js +0 -0
  573. /package/dist/cjs/{src/types → types}/agent.js +0 -0
  574. /package/dist/cjs/{src/types → types}/ai.d.ts +0 -0
  575. /package/dist/{src → cjs}/types/ai.d.ts.map +0 -0
  576. /package/dist/cjs/{src/types → types}/ai.js +0 -0
  577. /package/dist/cjs/{src/types → types}/history.d.ts +0 -0
  578. /package/dist/{src → cjs}/types/history.d.ts.map +0 -0
  579. /package/dist/cjs/{src/types → types}/history.js +0 -0
  580. /package/dist/cjs/{src/types → types}/persistence.d.ts +0 -0
  581. /package/dist/{src → cjs}/types/persistence.d.ts.map +0 -0
  582. /package/dist/cjs/{src/types → types}/persistence.js +0 -0
  583. /package/dist/cjs/{src/types → types}/route.js +0 -0
  584. /package/dist/cjs/{src/types → types}/routing.d.ts +0 -0
  585. /package/dist/{src → cjs}/types/routing.d.ts.map +0 -0
  586. /package/dist/cjs/{src/types → types}/routing.js +0 -0
  587. /package/dist/{src → cjs}/types/routing.js.map +0 -0
  588. /package/dist/cjs/{src/types → types}/schema.d.ts +0 -0
  589. /package/dist/{src → cjs}/types/schema.d.ts.map +0 -0
  590. /package/dist/cjs/{src/types → types}/schema.js +0 -0
  591. /package/dist/{src → cjs}/types/schema.js.map +0 -0
  592. /package/dist/cjs/{src/types → types}/session.d.ts +0 -0
  593. /package/dist/{src → cjs}/types/session.d.ts.map +0 -0
  594. /package/dist/cjs/{src/types → types}/session.js +0 -0
  595. /package/dist/cjs/{src/types → types}/template.js +0 -0
  596. /package/dist/{src → cjs}/types/template.js.map +0 -0
  597. /package/dist/cjs/{src/utils → utils}/clone.d.ts +0 -0
  598. /package/dist/{src → cjs}/utils/clone.d.ts.map +0 -0
  599. /package/dist/cjs/{src/utils → utils}/clone.js +0 -0
  600. /package/dist/cjs/{src/utils → utils}/event.d.ts +0 -0
  601. /package/dist/{src → cjs}/utils/event.d.ts.map +0 -0
  602. /package/dist/cjs/{src/utils → utils}/event.js +0 -0
  603. /package/dist/cjs/{src/utils → utils}/history.d.ts +0 -0
  604. /package/dist/{src → cjs}/utils/history.d.ts.map +0 -0
  605. /package/dist/cjs/{src/utils → utils}/history.js +0 -0
  606. /package/dist/cjs/{src/utils → utils}/id.d.ts +0 -0
  607. /package/dist/{src → cjs}/utils/id.d.ts.map +0 -0
  608. /package/dist/cjs/{src/utils → utils}/id.js +0 -0
  609. /package/dist/cjs/{src/utils → utils}/logger.d.ts +0 -0
  610. /package/dist/{src → cjs}/utils/logger.d.ts.map +0 -0
  611. /package/dist/cjs/{src/utils → utils}/logger.js +0 -0
  612. /package/dist/cjs/{src/utils → utils}/session.d.ts +0 -0
  613. /package/dist/{src → cjs}/utils/session.d.ts.map +0 -0
  614. /package/dist/cjs/{src/utils → utils}/session.js +0 -0
  615. /package/dist/{src/constants → constants}/index.d.ts +0 -0
  616. /package/dist/{src/constants → constants}/index.js +0 -0
  617. /package/dist/{src/core → core}/Events.d.ts +0 -0
  618. /package/dist/{src/core → core}/Events.js +0 -0
  619. /package/dist/{src/core → core}/PersistenceManager.d.ts +0 -0
  620. /package/dist/{src/core → core}/PersistenceManager.js +0 -0
  621. /package/dist/{src/core → core}/ResponseEngine.d.ts +0 -0
  622. /package/dist/{src/providers → providers}/AnthropicProvider.d.ts +0 -0
  623. /package/dist/{src/providers → providers}/GeminiProvider.d.ts +0 -0
  624. /package/dist/{src/providers → providers}/OpenAIProvider.d.ts +0 -0
  625. /package/dist/{src/providers → providers}/OpenRouterProvider.d.ts +0 -0
  626. /package/dist/{src/providers → providers}/index.d.ts +0 -0
  627. /package/dist/{src/providers → providers}/index.js +0 -0
  628. /package/dist/{src/types → types}/agent.js +0 -0
  629. /package/dist/{src/types → types}/ai.d.ts +0 -0
  630. /package/dist/{src/types → types}/ai.js +0 -0
  631. /package/dist/{src/types → types}/history.d.ts +0 -0
  632. /package/dist/{src/types → types}/history.js +0 -0
  633. /package/dist/{src/types → types}/persistence.d.ts +0 -0
  634. /package/dist/{src/types → types}/persistence.js +0 -0
  635. /package/dist/{src/types → types}/route.js +0 -0
  636. /package/dist/{src/types → types}/routing.d.ts +0 -0
  637. /package/dist/{src/types → types}/routing.js +0 -0
  638. /package/dist/{src/types → types}/schema.d.ts +0 -0
  639. /package/dist/{src/types → types}/schema.js +0 -0
  640. /package/dist/{src/types → types}/session.d.ts +0 -0
  641. /package/dist/{src/types → types}/session.js +0 -0
  642. /package/dist/{src/types → types}/template.js +0 -0
  643. /package/dist/{src/utils → utils}/clone.d.ts +0 -0
  644. /package/dist/{src/utils → utils}/clone.js +0 -0
  645. /package/dist/{src/utils → utils}/event.d.ts +0 -0
  646. /package/dist/{src/utils → utils}/event.js +0 -0
  647. /package/dist/{src/utils → utils}/history.d.ts +0 -0
  648. /package/dist/{src/utils → utils}/history.js +0 -0
  649. /package/dist/{src/utils → utils}/id.d.ts +0 -0
  650. /package/dist/{src/utils → utils}/id.js +0 -0
  651. /package/dist/{src/utils → utils}/logger.d.ts +0 -0
  652. /package/dist/{src/utils → utils}/logger.js +0 -0
  653. /package/dist/{src/utils → utils}/session.d.ts +0 -0
  654. /package/dist/{src/utils → utils}/session.js +0 -0
@@ -1,5 +1,5 @@
1
1
  import type { SessionState } from "./session";
2
- import type { Event } from "./history";
2
+ import type { Event, MessageRole } from "./history";
3
3
 
4
4
  /**
5
5
  * Context object passed to template functions for dynamic rendering.
@@ -24,7 +24,46 @@ export interface TemplateContext<TContext = unknown, TData = unknown> {
24
24
  * The data collected in the current route.
25
25
  * A convenience alias for `session.data`.
26
26
  */
27
- data?: Partial<TData>;
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
+ };
28
67
  }
29
68
 
30
69
  /**
@@ -34,3 +73,32 @@ export interface TemplateContext<TContext = unknown, TData = unknown> {
34
73
  export type Template<TContext = unknown, TData = unknown> =
35
74
  | string
36
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
+ }
package/src/types/tool.ts CHANGED
@@ -1,36 +1,44 @@
1
+ /* eslint @typescript-eslint/no-explicit-any: "off"*/
1
2
  /**
2
3
  * Tool system type definitions
3
4
  */
4
5
 
5
- import type { Event, StepRef } from "./index";
6
+ import type { Event, StepRef, ValidationResult } from "./index";
6
7
 
7
8
  /**
8
9
  * Context provided to tool handlers
9
10
  */
10
- export interface ToolContext<TContext = unknown, TData = unknown> {
11
+ export interface ToolContext<TContext = any, TData = any> {
11
12
  /** The agent's context data */
12
13
  context: TContext;
13
- /** Update the agent's context (triggers lifecycle hooks if configured) */
14
- updateContext: (updates: Partial<TContext>) => Promise<void>;
15
- /** Update the agent's collected data (triggers lifecycle hooks if configured) */
16
- updateData: (updates: Partial<TData>) => Promise<void>;
17
- /** Current step reference (if in a route) */
18
- step?: StepRef;
14
+ /** Complete agent-level data collected so far */
15
+ data: Partial<TData>;
19
16
  /** Interaction history */
20
17
  history: Event[];
21
- /** Complete agent-level data collected so far */
22
- data?: Partial<TData>;
18
+ /** Current step reference (if in a route) */
19
+ step?: StepRef;
23
20
  /** Additional metadata */
24
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;
25
33
  }
26
34
 
27
35
  /**
28
36
  * Result returned by a tool
29
37
  */
30
38
  export interface ToolResult<
31
- TResultData = unknown,
32
- TContext = unknown,
33
- TData = unknown
39
+ TResultData = any,
40
+ TContext = any,
41
+ TData = any
34
42
  > {
35
43
  /** The result data */
36
44
  data?: TResultData;
@@ -50,34 +58,117 @@ export interface ToolResult<
50
58
  * Handler function for a tool
51
59
  */
52
60
  export type ToolHandler<
53
- TContext,
54
- TData = unknown,
55
- TArgs extends unknown[] = unknown[],
56
- TResult = unknown
61
+ TContext = any,
62
+ TData = any,
63
+ TResult = any
57
64
  > = (
58
65
  context: ToolContext<TContext, TData>,
59
- ...args: TArgs
66
+ args?: Record<string, unknown>
60
67
  ) =>
61
- | Promise<ToolResult<TResult, TContext, TData>>
62
- | ToolResult<TResult, TContext, TData>;
68
+ | Promise<TResult | ToolResult<TResult, TContext, TData>>
69
+ | TResult
70
+ | ToolResult<TResult, TContext, TData>;
63
71
 
64
72
  /**
65
73
  * Tool definition - plain object interface
66
74
  */
67
75
  export interface Tool<
68
- TContext = unknown,
69
- TData = unknown,
70
- TArgs extends unknown[] = unknown[],
71
- TResult = unknown
76
+ TContext = any,
77
+ TData = any,
78
+ TResult = any
72
79
  > {
73
80
  /** Tool identifier */
74
81
  id: string;
75
82
  /** Tool display name (shown to AI models) */
76
83
  name?: string;
77
84
  /** Tool handler function */
78
- handler: ToolHandler<TContext, TData, TArgs, TResult>;
85
+ handler: ToolHandler<TContext, TData, TResult>;
79
86
  /** Description of what the tool does (for AI discovery) */
80
87
  description?: string;
81
88
  /** Parameter schema or description */
82
89
  parameters?: unknown;
83
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,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
+ }
@@ -28,6 +28,7 @@ export {
28
28
  renderTemplate,
29
29
  renderTemplateObject,
30
30
  formatKnowledgeBase,
31
+ createTemplateContext,
31
32
  } from "./template";
32
33
 
33
34
  // Cloning utilities
@@ -55,3 +56,14 @@ export { LoggerLevel, logger } from "./logger";
55
56
  // Retry utilities
56
57
  export type { RetryOptions } from "./retry";
57
58
  export { retry, withTimeoutAndRetry } from "./retry";
59
+
60
+ // Condition utilities
61
+ export {
62
+ ConditionEvaluator,
63
+ createConditionEvaluator,
64
+ extractAIContextStrings,
65
+ hasProgrammaticConditions,
66
+ } from "./condition";
67
+
68
+ // JSON utilities
69
+ export { parseJSONResponse, tryParseJSONResponse } from "./json";
@@ -0,0 +1,46 @@
1
+ /**
2
+ * JSON parsing utilities
3
+ */
4
+
5
+ /**
6
+ * Clean and parse JSON response that might be wrapped in markdown code blocks
7
+ * Handles cases like:
8
+ * - ```json\n{...}\n```
9
+ * - ```\n{...}\n```
10
+ * - Plain JSON: {...}
11
+ */
12
+ export function parseJSONResponse(text: string): unknown {
13
+ if (!text || typeof text !== 'string') {
14
+ throw new Error('Invalid JSON response: empty or non-string input');
15
+ }
16
+
17
+ // Trim whitespace
18
+ let cleaned = text.trim();
19
+
20
+ // Remove markdown code block markers
21
+ // Match: ```json or ``` at start, and ``` at end
22
+ const codeBlockRegex = /^```(?:json)?\s*\n?([\s\S]*?)\n?```$/;
23
+ const match = cleaned.match(codeBlockRegex);
24
+
25
+ if (match) {
26
+ cleaned = match[1].trim();
27
+ }
28
+
29
+ // Try to parse the cleaned JSON
30
+ try {
31
+ return JSON.parse(cleaned);
32
+ } catch (error) {
33
+ throw new Error(`Failed to parse JSON response: ${error instanceof Error ? error.message : String(error)}\nContent: ${cleaned.substring(0, 200)}...`);
34
+ }
35
+ }
36
+
37
+ /**
38
+ * Safely parse JSON response, returning undefined on failure
39
+ */
40
+ export function tryParseJSONResponse(text: string): unknown {
41
+ try {
42
+ return parseJSONResponse(text);
43
+ } catch {
44
+ return undefined;
45
+ }
46
+ }
@@ -1,6 +1,7 @@
1
1
  /**
2
2
  * Retry utility with exponential backoff
3
3
  */
4
+ import {logger} from './logger'
4
5
 
5
6
  export interface RetryOptions<T> {
6
7
  operation: () => Promise<T>;
@@ -78,18 +79,18 @@ export const withTimeoutAndRetry = async <T>(
78
79
  delay: (attempt: number) => Math.min(1000 * Math.pow(2, attempt), 5000),
79
80
  onRetry: (attempt: number, error: unknown) => {
80
81
  const message = error instanceof Error ? error.message : String(error);
81
- console.error(
82
+ logger.error(
82
83
  `[${operationName}] Failed attempt ${attempt + 1}:`,
83
84
  message
84
85
  );
85
86
  const delay = Math.min(1000 * Math.pow(2, attempt), 5000);
86
- console.log(`[${operationName}] Retrying in ${delay}ms...`);
87
- console.log(
87
+ logger.debug(`[${operationName}] Retrying in ${delay}ms...`);
88
+ logger.debug(
88
89
  `[${operationName}] Attempt ${attempt + 2}/${maxRetries + 1}`
89
90
  );
90
91
  },
91
92
  onFailure: (_error: unknown) => {
92
- console.error(`[${operationName}] All ${maxRetries + 1} attempts failed`);
93
+ logger.error(`[${operationName}] All ${maxRetries + 1} attempts failed`);
93
94
  return true;
94
95
  },
95
96
  });
@@ -1,4 +1,6 @@
1
1
  import type { Template, TemplateContext } from "../types";
2
+ import type { Event, MessageEventData } from "../types/history";
3
+ import { MessageRole, EventKind } from "../types/history";
2
4
 
3
5
  /**
4
6
  * Renders a template, which can be a string or a function, using the provided context.
@@ -204,6 +206,113 @@ export function renderTemplateObject(
204
206
  return obj;
205
207
  }
206
208
 
209
+ /**
210
+ * Creates helper functions for working with history and context in templates.
211
+ * These helpers make it easier to access message content and perform common operations.
212
+ *
213
+ * @param history - The event history array
214
+ * @returns Object containing helper functions
215
+ */
216
+ export function createTemplateHelpers(history?: Event[]) {
217
+ const helpers = {
218
+ /**
219
+ * Get the last message from history, optionally filtered by role.
220
+ * @param role - Optional role to filter by (user, assistant, etc.)
221
+ * @returns The message content or undefined if not found
222
+ */
223
+ getLastMessage(role?: MessageRole): string | undefined {
224
+ if (!history || history.length === 0) return undefined;
225
+
226
+ // Search backwards through history for the most recent message
227
+ for (let i = history.length - 1; i >= 0; i--) {
228
+ const event = history[i];
229
+ if (event.kind === EventKind.MESSAGE) {
230
+ // If no role specified, return the first message found
231
+ if (!role || event.source === role) {
232
+ const messageData = event.data as MessageEventData;
233
+ return messageData.message;
234
+ }
235
+ }
236
+ }
237
+ return undefined;
238
+ },
239
+
240
+ /**
241
+ * Get the last user message from history.
242
+ * @returns The user message content or undefined if not found
243
+ */
244
+ getLastUserMessage(): string | undefined {
245
+ return helpers.getLastMessage(MessageRole.USER);
246
+ },
247
+
248
+ /**
249
+ * Get the last assistant message from history.
250
+ * @returns The assistant message content or undefined if not found
251
+ */
252
+ getLastAssistantMessage(): string | undefined {
253
+ return helpers.getLastMessage(MessageRole.ASSISTANT);
254
+ },
255
+
256
+ /**
257
+ * Get all messages from history, optionally filtered by role.
258
+ * @param role - Optional role to filter by
259
+ * @returns Array of message contents
260
+ */
261
+ getMessages(role?: MessageRole): string[] {
262
+ if (!history || history.length === 0) return [];
263
+
264
+ const messages: string[] = [];
265
+ for (const event of history) {
266
+ if (event.kind === EventKind.MESSAGE) {
267
+ if (!role || event.source === role) {
268
+ const messageData = event.data as MessageEventData;
269
+ messages.push(messageData.message);
270
+ }
271
+ }
272
+ }
273
+ return messages;
274
+ },
275
+
276
+ /**
277
+ * Check if the last message contains any of the given keywords.
278
+ * @param keywords - Keywords to search for
279
+ * @param caseSensitive - Whether to perform case-sensitive search (default: false)
280
+ * @returns True if any keyword is found
281
+ */
282
+ lastMessageContains(keywords: string | string[], caseSensitive: boolean = false): boolean {
283
+ const lastMessage = helpers.getLastMessage();
284
+ if (!lastMessage) return false;
285
+
286
+ const searchText = caseSensitive ? lastMessage : lastMessage.toLowerCase();
287
+ const keywordArray = Array.isArray(keywords) ? keywords : [keywords];
288
+
289
+ return keywordArray.some(keyword => {
290
+ const searchKeyword = caseSensitive ? keyword : keyword.toLowerCase();
291
+ return searchText.includes(searchKeyword);
292
+ });
293
+ },
294
+ };
295
+
296
+ return helpers;
297
+ }
298
+
299
+ /**
300
+ * Creates a complete TemplateContext with helpers included.
301
+ * This is a convenience function for creating template contexts with all the helper methods.
302
+ *
303
+ * @param params - The base template context parameters
304
+ * @returns Complete TemplateContext with helpers
305
+ */
306
+ export function createTemplateContext<TContext = unknown, TData = unknown>(
307
+ params: Omit<Partial<TemplateContext<TContext, TData>>, 'helpers'>
308
+ ): TemplateContext<TContext, TData> {
309
+ return {
310
+ ...params,
311
+ data: params.data || {},
312
+ helpers: createTemplateHelpers(params.history),
313
+ };
314
+ }
315
+
207
316
  /**
208
317
  * Formats a JSON structure into readable markdown format.
209
318
  * Handles nested objects, arrays, and primitive values.
@@ -1 +0,0 @@
1
- {"version":3,"file":"MemoryAdapter.d.ts","sourceRoot":"","sources":["../../../../src/adapters/MemoryAdapter.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAEV,WAAW,EACX,iBAAiB,EACjB,kBAAkB,EAClB,WAAW,EACX,iBAAiB,EAGlB,MAAM,UAAU,CAAC;AAGlB;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,qBAAa,aAAa,CAAC,KAAK,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CACxD,YAAW,kBAAkB,CAAC,KAAK,CAAC;IAEpC,SAAgB,iBAAiB,EAAE,iBAAiB,CAAC,KAAK,CAAC,CAAC;IAC5D,SAAgB,iBAAiB,EAAE,iBAAiB,CAAC;IACrD,OAAO,CAAC,QAAQ,CAAkC;IAClD,OAAO,CAAC,QAAQ,CAA2B;;IAU3C;;OAEG;IACH,KAAK,IAAI,IAAI;IAKb;;OAEG;IACH,WAAW,IAAI;QACb,QAAQ,EAAE,WAAW,CAAC,KAAK,CAAC,EAAE,CAAC;QAC/B,QAAQ,EAAE,WAAW,EAAE,CAAC;KACzB;CAMF"}