@falai/agent 0.9.2 → 1.0.1

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 (628) hide show
  1. package/README.md +281 -42
  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/cjs/{src/core → core}/Agent.d.ts +16 -1
  33. package/dist/cjs/core/Agent.d.ts.map +1 -0
  34. package/dist/cjs/{src/core → core}/Agent.js +63 -2
  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 +850 -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 +217 -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 +211 -0
  52. package/dist/cjs/core/ResponseEngine.js.map +1 -0
  53. package/dist/{src → cjs}/core/ResponseModal.d.ts +45 -0
  54. package/dist/cjs/core/ResponseModal.d.ts.map +1 -0
  55. package/dist/cjs/{src/core → core}/ResponseModal.js +752 -74
  56. package/dist/cjs/core/ResponseModal.js.map +1 -0
  57. package/dist/{src → cjs}/core/ResponsePipeline.d.ts +2 -2
  58. package/dist/cjs/core/ResponsePipeline.d.ts.map +1 -0
  59. package/dist/cjs/{src/core → core}/ResponsePipeline.js +13 -6
  60. package/dist/cjs/core/ResponsePipeline.js.map +1 -0
  61. package/dist/{src → cjs}/core/Route.d.ts +34 -5
  62. package/dist/cjs/core/Route.d.ts.map +1 -0
  63. package/dist/cjs/{src/core → core}/Route.js +196 -19
  64. package/dist/cjs/core/Route.js.map +1 -0
  65. package/dist/cjs/{src/core → core}/RoutingEngine.d.ts +30 -5
  66. package/dist/cjs/core/RoutingEngine.d.ts.map +1 -0
  67. package/dist/cjs/{src/core → core}/RoutingEngine.js +330 -80
  68. package/dist/cjs/core/RoutingEngine.js.map +1 -0
  69. package/dist/cjs/core/SessionManager.js.map +1 -0
  70. package/dist/{src → cjs}/core/Step.d.ts +31 -10
  71. package/dist/cjs/core/Step.d.ts.map +1 -0
  72. package/dist/cjs/{src/core → core}/Step.js +105 -10
  73. package/dist/cjs/core/Step.js.map +1 -0
  74. package/dist/cjs/core/ToolManager.js.map +1 -0
  75. package/dist/{src → cjs}/index.d.ts +4 -1
  76. package/dist/cjs/index.d.ts.map +1 -0
  77. package/dist/cjs/{src/index.js → index.js} +12 -1
  78. package/dist/cjs/index.js.map +1 -0
  79. package/dist/cjs/{src/providers → providers}/AnthropicProvider.js +18 -18
  80. package/dist/cjs/providers/AnthropicProvider.js.map +1 -0
  81. package/dist/{src → cjs}/providers/GeminiProvider.d.ts.map +1 -1
  82. package/dist/cjs/{src/providers → providers}/GeminiProvider.js +123 -51
  83. package/dist/cjs/providers/GeminiProvider.js.map +1 -0
  84. package/dist/cjs/{src/providers → providers}/OpenAIProvider.js +19 -19
  85. package/dist/cjs/providers/OpenAIProvider.js.map +1 -0
  86. package/dist/cjs/{src/providers → providers}/OpenRouterProvider.js +19 -19
  87. package/dist/cjs/providers/OpenRouterProvider.js.map +1 -0
  88. package/dist/cjs/providers/index.js.map +1 -0
  89. package/dist/cjs/{src/types → types}/agent.d.ts +15 -3
  90. package/dist/cjs/types/agent.d.ts.map +1 -0
  91. package/dist/cjs/types/agent.js.map +1 -0
  92. package/dist/{src → cjs}/types/ai.js.map +1 -1
  93. package/dist/cjs/types/history.js.map +1 -0
  94. package/dist/cjs/{src/types → types}/index.d.ts +2 -1
  95. package/dist/{src → cjs}/types/index.d.ts.map +1 -1
  96. package/dist/cjs/{src/types → types}/index.js +6 -1
  97. package/dist/cjs/types/index.js.map +1 -0
  98. package/dist/cjs/types/persistence.js.map +1 -0
  99. package/dist/cjs/{src/types → types}/route.d.ts +111 -12
  100. package/dist/cjs/types/route.d.ts.map +1 -0
  101. package/dist/cjs/{src/types → types}/route.js.map +1 -1
  102. package/dist/cjs/types/session.js.map +1 -0
  103. package/dist/cjs/types/template.d.ts +88 -0
  104. package/dist/cjs/types/template.d.ts.map +1 -0
  105. package/dist/cjs/types/tool.js.map +1 -0
  106. package/dist/cjs/utils/clone.js.map +1 -0
  107. package/dist/cjs/utils/condition.d.ts +38 -0
  108. package/dist/cjs/utils/condition.d.ts.map +1 -0
  109. package/dist/cjs/utils/condition.js +168 -0
  110. package/dist/cjs/utils/condition.js.map +1 -0
  111. package/dist/cjs/utils/event.js.map +1 -0
  112. package/dist/cjs/utils/history.js.map +1 -0
  113. package/dist/cjs/utils/id.js.map +1 -0
  114. package/dist/cjs/{src/utils → utils}/index.d.ts +3 -1
  115. package/dist/cjs/utils/index.d.ts.map +1 -0
  116. package/dist/cjs/{src/utils → utils}/index.js +12 -1
  117. package/dist/cjs/utils/index.js.map +1 -0
  118. package/dist/cjs/utils/json.d.ts +16 -0
  119. package/dist/cjs/utils/json.d.ts.map +1 -0
  120. package/dist/cjs/utils/json.js +47 -0
  121. package/dist/cjs/utils/json.js.map +1 -0
  122. package/dist/cjs/utils/logger.js.map +1 -0
  123. package/dist/{src → cjs}/utils/retry.d.ts +0 -3
  124. package/dist/cjs/utils/retry.d.ts.map +1 -0
  125. package/dist/cjs/{src/utils → utils}/retry.js +8 -7
  126. package/dist/cjs/utils/retry.js.map +1 -0
  127. package/dist/cjs/utils/session.js.map +1 -0
  128. package/dist/{src → cjs}/utils/template.d.ts +48 -0
  129. package/dist/cjs/utils/template.d.ts.map +1 -0
  130. package/dist/cjs/{src/utils → utils}/template.js +100 -0
  131. package/dist/cjs/utils/template.js.map +1 -0
  132. package/dist/constants/index.d.ts.map +1 -0
  133. package/dist/constants/index.js.map +1 -0
  134. package/dist/{src/core → core}/Agent.d.ts +16 -1
  135. package/dist/core/Agent.d.ts.map +1 -0
  136. package/dist/{src/core → core}/Agent.js +64 -3
  137. package/dist/core/Agent.js.map +1 -0
  138. package/dist/core/BatchExecutor.d.ts +353 -0
  139. package/dist/core/BatchExecutor.d.ts.map +1 -0
  140. package/dist/core/BatchExecutor.js +845 -0
  141. package/dist/core/BatchExecutor.js.map +1 -0
  142. package/dist/core/BatchPromptBuilder.d.ts +86 -0
  143. package/dist/core/BatchPromptBuilder.d.ts.map +1 -0
  144. package/dist/core/BatchPromptBuilder.js +213 -0
  145. package/dist/core/BatchPromptBuilder.js.map +1 -0
  146. package/dist/core/Events.d.ts.map +1 -0
  147. package/dist/core/Events.js.map +1 -0
  148. package/dist/core/PersistenceManager.d.ts.map +1 -0
  149. package/dist/core/PersistenceManager.js.map +1 -0
  150. package/dist/{cjs/src/core → core}/PromptComposer.d.ts +1 -1
  151. package/dist/core/PromptComposer.d.ts.map +1 -0
  152. package/dist/{src/core → core}/PromptComposer.js +45 -8
  153. package/dist/core/PromptComposer.js.map +1 -0
  154. package/dist/core/ResponseEngine.d.ts.map +1 -0
  155. package/dist/core/ResponseEngine.js +207 -0
  156. package/dist/core/ResponseEngine.js.map +1 -0
  157. package/dist/{cjs/src/core → core}/ResponseModal.d.ts +45 -0
  158. package/dist/core/ResponseModal.d.ts.map +1 -0
  159. package/dist/{src/core → core}/ResponseModal.js +752 -74
  160. package/dist/core/ResponseModal.js.map +1 -0
  161. package/dist/{cjs/src/core → core}/ResponsePipeline.d.ts +2 -2
  162. package/dist/core/ResponsePipeline.d.ts.map +1 -0
  163. package/dist/{src/core → core}/ResponsePipeline.js +13 -6
  164. package/dist/core/ResponsePipeline.js.map +1 -0
  165. package/dist/{cjs/src/core → core}/Route.d.ts +34 -5
  166. package/dist/core/Route.d.ts.map +1 -0
  167. package/dist/{src/core → core}/Route.js +195 -18
  168. package/dist/core/Route.js.map +1 -0
  169. package/dist/{src/core → core}/RoutingEngine.d.ts +30 -5
  170. package/dist/core/RoutingEngine.d.ts.map +1 -0
  171. package/dist/{src/core → core}/RoutingEngine.js +310 -60
  172. package/dist/core/RoutingEngine.js.map +1 -0
  173. package/dist/core/SessionManager.d.ts.map +1 -0
  174. package/dist/core/SessionManager.js.map +1 -0
  175. package/dist/{cjs/src/core → core}/Step.d.ts +31 -10
  176. package/dist/core/Step.d.ts.map +1 -0
  177. package/dist/{src/core → core}/Step.js +104 -9
  178. package/dist/core/Step.js.map +1 -0
  179. package/dist/core/ToolManager.d.ts.map +1 -0
  180. package/dist/core/ToolManager.js.map +1 -0
  181. package/dist/{cjs/src/index.d.ts → index.d.ts} +4 -1
  182. package/dist/index.d.ts.map +1 -0
  183. package/dist/{src/index.js → index.js} +3 -0
  184. package/dist/index.js.map +1 -0
  185. package/dist/providers/AnthropicProvider.d.ts.map +1 -0
  186. package/dist/{src/providers → providers}/AnthropicProvider.js +17 -17
  187. package/dist/providers/AnthropicProvider.js.map +1 -0
  188. package/dist/providers/GeminiProvider.d.ts.map +1 -0
  189. package/dist/{src/providers → providers}/GeminiProvider.js +123 -51
  190. package/dist/providers/GeminiProvider.js.map +1 -0
  191. package/dist/providers/OpenAIProvider.d.ts.map +1 -0
  192. package/dist/{src/providers → providers}/OpenAIProvider.js +18 -18
  193. package/dist/providers/OpenAIProvider.js.map +1 -0
  194. package/dist/providers/OpenRouterProvider.d.ts.map +1 -0
  195. package/dist/{src/providers → providers}/OpenRouterProvider.js +18 -18
  196. package/dist/providers/OpenRouterProvider.js.map +1 -0
  197. package/dist/providers/index.d.ts.map +1 -0
  198. package/dist/providers/index.js.map +1 -0
  199. package/dist/{src/types → types}/agent.d.ts +15 -3
  200. package/dist/types/agent.d.ts.map +1 -0
  201. package/dist/types/agent.js.map +1 -0
  202. package/dist/types/ai.d.ts.map +1 -0
  203. package/dist/types/ai.js.map +1 -0
  204. package/dist/types/history.d.ts.map +1 -0
  205. package/dist/types/history.js.map +1 -0
  206. package/dist/{src/types → types}/index.d.ts +2 -1
  207. package/dist/types/index.d.ts.map +1 -0
  208. package/dist/{src/types → types}/index.js +1 -0
  209. package/dist/types/index.js.map +1 -0
  210. package/dist/types/persistence.d.ts.map +1 -0
  211. package/dist/types/persistence.js.map +1 -0
  212. package/dist/{src/types → types}/route.d.ts +111 -12
  213. package/dist/types/route.d.ts.map +1 -0
  214. package/dist/{src/types → types}/route.js.map +1 -1
  215. package/dist/types/routing.d.ts.map +1 -0
  216. package/dist/{cjs/src/types → types}/routing.js.map +1 -1
  217. package/dist/types/schema.d.ts.map +1 -0
  218. package/dist/{cjs/src/types → types}/schema.js.map +1 -1
  219. package/dist/types/session.d.ts.map +1 -0
  220. package/dist/{src/types → types}/session.js.map +1 -1
  221. package/dist/types/template.d.ts +88 -0
  222. package/dist/types/template.d.ts.map +1 -0
  223. package/dist/{cjs/src/types → types}/template.js.map +1 -1
  224. package/dist/types/tool.d.ts.map +1 -0
  225. package/dist/types/tool.js.map +1 -0
  226. package/dist/utils/clone.d.ts.map +1 -0
  227. package/dist/utils/clone.js.map +1 -0
  228. package/dist/utils/condition.d.ts +38 -0
  229. package/dist/utils/condition.d.ts.map +1 -0
  230. package/dist/utils/condition.js +161 -0
  231. package/dist/utils/condition.js.map +1 -0
  232. package/dist/utils/event.d.ts.map +1 -0
  233. package/dist/utils/event.js.map +1 -0
  234. package/dist/utils/history.d.ts.map +1 -0
  235. package/dist/utils/history.js.map +1 -0
  236. package/dist/utils/id.d.ts.map +1 -0
  237. package/dist/utils/id.js.map +1 -0
  238. package/dist/{src/utils → utils}/index.d.ts +3 -1
  239. package/dist/utils/index.d.ts.map +1 -0
  240. package/dist/{src/utils → utils}/index.js +5 -1
  241. package/dist/utils/index.js.map +1 -0
  242. package/dist/utils/json.d.ts +16 -0
  243. package/dist/utils/json.d.ts.map +1 -0
  244. package/dist/utils/json.js +43 -0
  245. package/dist/utils/json.js.map +1 -0
  246. package/dist/utils/logger.d.ts.map +1 -0
  247. package/dist/utils/logger.js.map +1 -0
  248. package/dist/{cjs/src/utils → utils}/retry.d.ts +0 -3
  249. package/dist/utils/retry.d.ts.map +1 -0
  250. package/dist/{src/utils → utils}/retry.js +5 -4
  251. package/dist/utils/retry.js.map +1 -0
  252. package/dist/utils/session.d.ts.map +1 -0
  253. package/dist/utils/session.js.map +1 -0
  254. package/dist/{cjs/src/utils → utils}/template.d.ts +48 -0
  255. package/dist/utils/template.d.ts.map +1 -0
  256. package/dist/{src/utils → utils}/template.js +98 -0
  257. package/dist/utils/template.js.map +1 -0
  258. package/docs/README.md +1 -0
  259. package/docs/api/README.md +237 -12
  260. package/docs/api/overview.md +206 -3
  261. package/docs/architecture/data-extraction-flow.md +363 -0
  262. package/docs/architecture/multi-step-execution.md +243 -0
  263. package/docs/core/agent/README.md +156 -5
  264. package/docs/core/agent/rules-and-prohibitions.md +113 -0
  265. package/docs/core/agent/session-management.md +1 -1
  266. package/docs/core/ai-integration/prompt-composition.md +135 -0
  267. package/docs/core/ai-integration/response-processing.md +146 -0
  268. package/docs/core/conversation-flows/data-collection.md +143 -0
  269. package/docs/core/conversation-flows/routes.md +2 -2
  270. package/docs/core/conversation-flows/step-transitions.md +132 -0
  271. package/docs/core/conversation-flows/steps.md +112 -0
  272. package/docs/core/error-handling.md +193 -0
  273. package/docs/core/routing/intelligent-routing.md +118 -0
  274. package/docs/guides/getting-started/README.md +284 -3
  275. package/docs/guides/migration/README.md +27 -0
  276. package/docs/guides/migration/flexible-routing-conditions.md +375 -0
  277. package/docs/guides/migration/multi-step-execution.md +373 -0
  278. package/examples/advanced-patterns/knowledge-based-agent.ts +101 -24
  279. package/examples/advanced-patterns/persistent-onboarding.ts +40 -5
  280. package/examples/advanced-patterns/route-lifecycle-hooks.ts +82 -12
  281. package/examples/advanced-patterns/streaming-responses.ts +2 -2
  282. package/examples/ai-providers/anthropic-integration.ts +4 -4
  283. package/examples/ai-providers/openai-integration.ts +1 -1
  284. package/examples/condition-patterns/function-only-conditions.ts +365 -0
  285. package/examples/condition-patterns/mixed-array-conditions.ts +477 -0
  286. package/examples/condition-patterns/route-skipif-patterns.ts +468 -0
  287. package/examples/condition-patterns/step-skipif-patterns.ts +0 -0
  288. package/examples/condition-patterns/string-only-conditions.ts +296 -0
  289. package/examples/conversation-flows/completion-transitions.ts +48 -7
  290. package/examples/core-concepts/basic-agent.ts +54 -33
  291. package/examples/core-concepts/schema-driven-extraction.ts +33 -9
  292. package/examples/core-concepts/session-management.ts +51 -16
  293. package/examples/integrations/database-integration.ts +6 -6
  294. package/examples/integrations/healthcare-integration.ts +10 -10
  295. package/examples/integrations/search-integration.ts +8 -8
  296. package/examples/integrations/server-session-management.ts +8 -8
  297. package/examples/persistence/database-persistence.ts +15 -15
  298. package/examples/persistence/memory-sessions.ts +3 -3
  299. package/examples/persistence/redis-persistence.ts +7 -9
  300. package/examples/tools/data-enrichment-tools.ts +4 -4
  301. package/package.json +6 -4
  302. package/src/adapters/PrismaAdapter.ts +3 -2
  303. package/src/adapters/RedisAdapter.ts +3 -3
  304. package/src/core/Agent.ts +78 -2
  305. package/src/core/BatchExecutor.ts +1166 -0
  306. package/src/core/BatchPromptBuilder.ts +293 -0
  307. package/src/core/PromptComposer.ts +53 -16
  308. package/src/core/ResponseEngine.ts +168 -29
  309. package/src/core/ResponseModal.ts +954 -74
  310. package/src/core/ResponsePipeline.ts +17 -9
  311. package/src/core/Route.ts +223 -22
  312. package/src/core/RoutingEngine.ts +426 -83
  313. package/src/core/Step.ts +144 -16
  314. package/src/index.ts +19 -0
  315. package/src/providers/AnthropicProvider.ts +17 -17
  316. package/src/providers/GeminiProvider.ts +129 -60
  317. package/src/providers/OpenAIProvider.ts +18 -18
  318. package/src/providers/OpenRouterProvider.ts +18 -18
  319. package/src/types/agent.ts +15 -3
  320. package/src/types/index.ts +12 -1
  321. package/src/types/route.ts +131 -12
  322. package/src/types/template.ts +70 -2
  323. package/src/utils/condition.ts +190 -0
  324. package/src/utils/index.ts +12 -0
  325. package/src/utils/json.ts +46 -0
  326. package/src/utils/retry.ts +5 -4
  327. package/src/utils/template.ts +109 -0
  328. package/dist/cjs/src/adapters/MemoryAdapter.d.ts.map +0 -1
  329. package/dist/cjs/src/adapters/MemoryAdapter.js.map +0 -1
  330. package/dist/cjs/src/adapters/MongoAdapter.d.ts.map +0 -1
  331. package/dist/cjs/src/adapters/MongoAdapter.js.map +0 -1
  332. package/dist/cjs/src/adapters/OpenSearchAdapter.d.ts.map +0 -1
  333. package/dist/cjs/src/adapters/OpenSearchAdapter.js.map +0 -1
  334. package/dist/cjs/src/adapters/PostgreSQLAdapter.d.ts.map +0 -1
  335. package/dist/cjs/src/adapters/PostgreSQLAdapter.js.map +0 -1
  336. package/dist/cjs/src/adapters/PrismaAdapter.d.ts.map +0 -1
  337. package/dist/cjs/src/adapters/PrismaAdapter.js.map +0 -1
  338. package/dist/cjs/src/adapters/RedisAdapter.d.ts.map +0 -1
  339. package/dist/cjs/src/adapters/RedisAdapter.js.map +0 -1
  340. package/dist/cjs/src/adapters/SQLiteAdapter.d.ts.map +0 -1
  341. package/dist/cjs/src/adapters/SQLiteAdapter.js.map +0 -1
  342. package/dist/cjs/src/adapters/index.d.ts.map +0 -1
  343. package/dist/cjs/src/adapters/index.js.map +0 -1
  344. package/dist/cjs/src/constants/index.d.ts.map +0 -1
  345. package/dist/cjs/src/constants/index.js.map +0 -1
  346. package/dist/cjs/src/core/Agent.d.ts.map +0 -1
  347. package/dist/cjs/src/core/Agent.js.map +0 -1
  348. package/dist/cjs/src/core/Events.d.ts.map +0 -1
  349. package/dist/cjs/src/core/Events.js.map +0 -1
  350. package/dist/cjs/src/core/PersistenceManager.d.ts.map +0 -1
  351. package/dist/cjs/src/core/PersistenceManager.js.map +0 -1
  352. package/dist/cjs/src/core/PromptComposer.d.ts.map +0 -1
  353. package/dist/cjs/src/core/PromptComposer.js.map +0 -1
  354. package/dist/cjs/src/core/ResponseEngine.d.ts.map +0 -1
  355. package/dist/cjs/src/core/ResponseEngine.js +0 -84
  356. package/dist/cjs/src/core/ResponseEngine.js.map +0 -1
  357. package/dist/cjs/src/core/ResponseModal.d.ts.map +0 -1
  358. package/dist/cjs/src/core/ResponseModal.js.map +0 -1
  359. package/dist/cjs/src/core/ResponsePipeline.d.ts.map +0 -1
  360. package/dist/cjs/src/core/ResponsePipeline.js.map +0 -1
  361. package/dist/cjs/src/core/Route.d.ts.map +0 -1
  362. package/dist/cjs/src/core/Route.js.map +0 -1
  363. package/dist/cjs/src/core/RoutingEngine.d.ts.map +0 -1
  364. package/dist/cjs/src/core/RoutingEngine.js.map +0 -1
  365. package/dist/cjs/src/core/SessionManager.d.ts.map +0 -1
  366. package/dist/cjs/src/core/SessionManager.js.map +0 -1
  367. package/dist/cjs/src/core/Step.d.ts.map +0 -1
  368. package/dist/cjs/src/core/Step.js.map +0 -1
  369. package/dist/cjs/src/core/ToolManager.d.ts.map +0 -1
  370. package/dist/cjs/src/core/ToolManager.js.map +0 -1
  371. package/dist/cjs/src/index.d.ts.map +0 -1
  372. package/dist/cjs/src/index.js.map +0 -1
  373. package/dist/cjs/src/providers/AnthropicProvider.d.ts.map +0 -1
  374. package/dist/cjs/src/providers/AnthropicProvider.js.map +0 -1
  375. package/dist/cjs/src/providers/GeminiProvider.d.ts.map +0 -1
  376. package/dist/cjs/src/providers/GeminiProvider.js.map +0 -1
  377. package/dist/cjs/src/providers/OpenAIProvider.d.ts.map +0 -1
  378. package/dist/cjs/src/providers/OpenAIProvider.js.map +0 -1
  379. package/dist/cjs/src/providers/OpenRouterProvider.d.ts.map +0 -1
  380. package/dist/cjs/src/providers/OpenRouterProvider.js.map +0 -1
  381. package/dist/cjs/src/providers/index.d.ts.map +0 -1
  382. package/dist/cjs/src/providers/index.js.map +0 -1
  383. package/dist/cjs/src/types/agent.d.ts.map +0 -1
  384. package/dist/cjs/src/types/agent.js.map +0 -1
  385. package/dist/cjs/src/types/ai.d.ts.map +0 -1
  386. package/dist/cjs/src/types/ai.js.map +0 -1
  387. package/dist/cjs/src/types/history.d.ts.map +0 -1
  388. package/dist/cjs/src/types/history.js.map +0 -1
  389. package/dist/cjs/src/types/index.d.ts.map +0 -1
  390. package/dist/cjs/src/types/index.js.map +0 -1
  391. package/dist/cjs/src/types/persistence.d.ts.map +0 -1
  392. package/dist/cjs/src/types/persistence.js.map +0 -1
  393. package/dist/cjs/src/types/route.d.ts.map +0 -1
  394. package/dist/cjs/src/types/routing.d.ts.map +0 -1
  395. package/dist/cjs/src/types/schema.d.ts.map +0 -1
  396. package/dist/cjs/src/types/session.d.ts.map +0 -1
  397. package/dist/cjs/src/types/session.js.map +0 -1
  398. package/dist/cjs/src/types/template.d.ts +0 -30
  399. package/dist/cjs/src/types/template.d.ts.map +0 -1
  400. package/dist/cjs/src/types/tool.d.ts.map +0 -1
  401. package/dist/cjs/src/types/tool.js.map +0 -1
  402. package/dist/cjs/src/utils/clone.d.ts.map +0 -1
  403. package/dist/cjs/src/utils/clone.js.map +0 -1
  404. package/dist/cjs/src/utils/event.d.ts.map +0 -1
  405. package/dist/cjs/src/utils/event.js.map +0 -1
  406. package/dist/cjs/src/utils/history.d.ts.map +0 -1
  407. package/dist/cjs/src/utils/history.js.map +0 -1
  408. package/dist/cjs/src/utils/id.d.ts.map +0 -1
  409. package/dist/cjs/src/utils/id.js.map +0 -1
  410. package/dist/cjs/src/utils/index.d.ts.map +0 -1
  411. package/dist/cjs/src/utils/index.js.map +0 -1
  412. package/dist/cjs/src/utils/logger.d.ts.map +0 -1
  413. package/dist/cjs/src/utils/logger.js.map +0 -1
  414. package/dist/cjs/src/utils/retry.d.ts.map +0 -1
  415. package/dist/cjs/src/utils/retry.js.map +0 -1
  416. package/dist/cjs/src/utils/session.d.ts.map +0 -1
  417. package/dist/cjs/src/utils/session.js.map +0 -1
  418. package/dist/cjs/src/utils/template.d.ts.map +0 -1
  419. package/dist/cjs/src/utils/template.js.map +0 -1
  420. package/dist/src/adapters/MemoryAdapter.js.map +0 -1
  421. package/dist/src/adapters/MongoAdapter.js.map +0 -1
  422. package/dist/src/adapters/OpenSearchAdapter.js.map +0 -1
  423. package/dist/src/adapters/PostgreSQLAdapter.js.map +0 -1
  424. package/dist/src/adapters/PrismaAdapter.js.map +0 -1
  425. package/dist/src/adapters/RedisAdapter.js.map +0 -1
  426. package/dist/src/adapters/SQLiteAdapter.js.map +0 -1
  427. package/dist/src/adapters/index.js.map +0 -1
  428. package/dist/src/constants/index.js.map +0 -1
  429. package/dist/src/core/Agent.d.ts.map +0 -1
  430. package/dist/src/core/Agent.js.map +0 -1
  431. package/dist/src/core/Events.js.map +0 -1
  432. package/dist/src/core/PersistenceManager.js.map +0 -1
  433. package/dist/src/core/PromptComposer.d.ts.map +0 -1
  434. package/dist/src/core/PromptComposer.js.map +0 -1
  435. package/dist/src/core/ResponseEngine.js +0 -80
  436. package/dist/src/core/ResponseEngine.js.map +0 -1
  437. package/dist/src/core/ResponseModal.d.ts.map +0 -1
  438. package/dist/src/core/ResponseModal.js.map +0 -1
  439. package/dist/src/core/ResponsePipeline.d.ts.map +0 -1
  440. package/dist/src/core/ResponsePipeline.js.map +0 -1
  441. package/dist/src/core/Route.d.ts.map +0 -1
  442. package/dist/src/core/Route.js.map +0 -1
  443. package/dist/src/core/RoutingEngine.d.ts.map +0 -1
  444. package/dist/src/core/RoutingEngine.js.map +0 -1
  445. package/dist/src/core/SessionManager.js.map +0 -1
  446. package/dist/src/core/Step.d.ts.map +0 -1
  447. package/dist/src/core/Step.js.map +0 -1
  448. package/dist/src/core/ToolManager.js.map +0 -1
  449. package/dist/src/index.d.ts.map +0 -1
  450. package/dist/src/index.js.map +0 -1
  451. package/dist/src/providers/AnthropicProvider.js.map +0 -1
  452. package/dist/src/providers/GeminiProvider.js.map +0 -1
  453. package/dist/src/providers/OpenAIProvider.js.map +0 -1
  454. package/dist/src/providers/OpenRouterProvider.js.map +0 -1
  455. package/dist/src/providers/index.js.map +0 -1
  456. package/dist/src/types/agent.d.ts.map +0 -1
  457. package/dist/src/types/agent.js.map +0 -1
  458. package/dist/src/types/history.js.map +0 -1
  459. package/dist/src/types/index.js.map +0 -1
  460. package/dist/src/types/persistence.js.map +0 -1
  461. package/dist/src/types/route.d.ts.map +0 -1
  462. package/dist/src/types/template.d.ts +0 -30
  463. package/dist/src/types/template.d.ts.map +0 -1
  464. package/dist/src/types/tool.js.map +0 -1
  465. package/dist/src/utils/clone.js.map +0 -1
  466. package/dist/src/utils/event.js.map +0 -1
  467. package/dist/src/utils/history.js.map +0 -1
  468. package/dist/src/utils/id.js.map +0 -1
  469. package/dist/src/utils/index.d.ts.map +0 -1
  470. package/dist/src/utils/index.js.map +0 -1
  471. package/dist/src/utils/logger.js.map +0 -1
  472. package/dist/src/utils/retry.d.ts.map +0 -1
  473. package/dist/src/utils/retry.js.map +0 -1
  474. package/dist/src/utils/session.js.map +0 -1
  475. package/dist/src/utils/template.d.ts.map +0 -1
  476. package/dist/src/utils/template.js.map +0 -1
  477. /package/dist/{cjs/src/adapters → adapters}/MemoryAdapter.d.ts +0 -0
  478. /package/dist/{src/adapters → adapters}/MemoryAdapter.js +0 -0
  479. /package/dist/{cjs/src/adapters → adapters}/MongoAdapter.d.ts +0 -0
  480. /package/dist/{src/adapters → adapters}/MongoAdapter.js +0 -0
  481. /package/dist/{cjs/src/adapters → adapters}/OpenSearchAdapter.d.ts +0 -0
  482. /package/dist/{src/adapters → adapters}/OpenSearchAdapter.js +0 -0
  483. /package/dist/{cjs/src/adapters → adapters}/PostgreSQLAdapter.d.ts +0 -0
  484. /package/dist/{src/adapters → adapters}/PostgreSQLAdapter.js +0 -0
  485. /package/dist/{cjs/src/adapters → adapters}/PrismaAdapter.d.ts +0 -0
  486. /package/dist/{cjs/src/adapters → adapters}/RedisAdapter.d.ts +0 -0
  487. /package/dist/{cjs/src/adapters → adapters}/SQLiteAdapter.d.ts +0 -0
  488. /package/dist/{src/adapters → adapters}/SQLiteAdapter.js +0 -0
  489. /package/dist/{cjs/src/adapters → adapters}/index.d.ts +0 -0
  490. /package/dist/{src/adapters → adapters}/index.js +0 -0
  491. /package/dist/{src → cjs}/adapters/MemoryAdapter.d.ts +0 -0
  492. /package/dist/{src → cjs}/adapters/MemoryAdapter.d.ts.map +0 -0
  493. /package/dist/cjs/{src/adapters → adapters}/MemoryAdapter.js +0 -0
  494. /package/dist/{src → cjs}/adapters/MongoAdapter.d.ts +0 -0
  495. /package/dist/{src → cjs}/adapters/MongoAdapter.d.ts.map +0 -0
  496. /package/dist/cjs/{src/adapters → adapters}/MongoAdapter.js +0 -0
  497. /package/dist/{src → cjs}/adapters/OpenSearchAdapter.d.ts +0 -0
  498. /package/dist/{src → cjs}/adapters/OpenSearchAdapter.d.ts.map +0 -0
  499. /package/dist/cjs/{src/adapters → adapters}/OpenSearchAdapter.js +0 -0
  500. /package/dist/{src → cjs}/adapters/PostgreSQLAdapter.d.ts +0 -0
  501. /package/dist/{src → cjs}/adapters/PostgreSQLAdapter.d.ts.map +0 -0
  502. /package/dist/cjs/{src/adapters → adapters}/PostgreSQLAdapter.js +0 -0
  503. /package/dist/{src → cjs}/adapters/PrismaAdapter.d.ts +0 -0
  504. /package/dist/{src → cjs}/adapters/RedisAdapter.d.ts +0 -0
  505. /package/dist/{src → cjs}/adapters/RedisAdapter.d.ts.map +0 -0
  506. /package/dist/{src → cjs}/adapters/SQLiteAdapter.d.ts +0 -0
  507. /package/dist/{src → cjs}/adapters/SQLiteAdapter.d.ts.map +0 -0
  508. /package/dist/cjs/{src/adapters → adapters}/SQLiteAdapter.js +0 -0
  509. /package/dist/{src → cjs}/adapters/index.d.ts +0 -0
  510. /package/dist/{src → cjs}/adapters/index.d.ts.map +0 -0
  511. /package/dist/cjs/{src/adapters → adapters}/index.js +0 -0
  512. /package/dist/cjs/{src/constants → constants}/index.d.ts +0 -0
  513. /package/dist/{src → cjs}/constants/index.d.ts.map +0 -0
  514. /package/dist/cjs/{src/constants → constants}/index.js +0 -0
  515. /package/dist/cjs/{src/core → core}/Events.d.ts +0 -0
  516. /package/dist/{src → cjs}/core/Events.d.ts.map +0 -0
  517. /package/dist/cjs/{src/core → core}/Events.js +0 -0
  518. /package/dist/cjs/{src/core → core}/PersistenceManager.d.ts +0 -0
  519. /package/dist/{src → cjs}/core/PersistenceManager.d.ts.map +0 -0
  520. /package/dist/cjs/{src/core → core}/PersistenceManager.js +0 -0
  521. /package/dist/cjs/{src/core → core}/ResponseEngine.d.ts +0 -0
  522. /package/dist/cjs/{src/core → core}/SessionManager.d.ts +0 -0
  523. /package/dist/{src → cjs}/core/SessionManager.d.ts.map +0 -0
  524. /package/dist/cjs/{src/core → core}/SessionManager.js +0 -0
  525. /package/dist/cjs/{src/core → core}/ToolManager.d.ts +0 -0
  526. /package/dist/{src → cjs}/core/ToolManager.d.ts.map +0 -0
  527. /package/dist/cjs/{src/core → core}/ToolManager.js +0 -0
  528. /package/dist/cjs/{src/providers → providers}/AnthropicProvider.d.ts +0 -0
  529. /package/dist/{src → cjs}/providers/AnthropicProvider.d.ts.map +0 -0
  530. /package/dist/cjs/{src/providers → providers}/GeminiProvider.d.ts +0 -0
  531. /package/dist/cjs/{src/providers → providers}/OpenAIProvider.d.ts +0 -0
  532. /package/dist/{src → cjs}/providers/OpenAIProvider.d.ts.map +0 -0
  533. /package/dist/cjs/{src/providers → providers}/OpenRouterProvider.d.ts +0 -0
  534. /package/dist/{src → cjs}/providers/OpenRouterProvider.d.ts.map +0 -0
  535. /package/dist/cjs/{src/providers → providers}/index.d.ts +0 -0
  536. /package/dist/{src → cjs}/providers/index.d.ts.map +0 -0
  537. /package/dist/cjs/{src/providers → providers}/index.js +0 -0
  538. /package/dist/cjs/{src/types → types}/agent.js +0 -0
  539. /package/dist/cjs/{src/types → types}/ai.d.ts +0 -0
  540. /package/dist/{src → cjs}/types/ai.d.ts.map +0 -0
  541. /package/dist/cjs/{src/types → types}/ai.js +0 -0
  542. /package/dist/cjs/{src/types → types}/history.d.ts +0 -0
  543. /package/dist/{src → cjs}/types/history.d.ts.map +0 -0
  544. /package/dist/cjs/{src/types → types}/history.js +0 -0
  545. /package/dist/cjs/{src/types → types}/persistence.d.ts +0 -0
  546. /package/dist/{src → cjs}/types/persistence.d.ts.map +0 -0
  547. /package/dist/cjs/{src/types → types}/persistence.js +0 -0
  548. /package/dist/cjs/{src/types → types}/route.js +0 -0
  549. /package/dist/cjs/{src/types → types}/routing.d.ts +0 -0
  550. /package/dist/{src → cjs}/types/routing.d.ts.map +0 -0
  551. /package/dist/cjs/{src/types → types}/routing.js +0 -0
  552. /package/dist/{src → cjs}/types/routing.js.map +0 -0
  553. /package/dist/cjs/{src/types → types}/schema.d.ts +0 -0
  554. /package/dist/{src → cjs}/types/schema.d.ts.map +0 -0
  555. /package/dist/cjs/{src/types → types}/schema.js +0 -0
  556. /package/dist/{src → cjs}/types/schema.js.map +0 -0
  557. /package/dist/cjs/{src/types → types}/session.d.ts +0 -0
  558. /package/dist/{src → cjs}/types/session.d.ts.map +0 -0
  559. /package/dist/cjs/{src/types → types}/session.js +0 -0
  560. /package/dist/cjs/{src/types → types}/template.js +0 -0
  561. /package/dist/{src → cjs}/types/template.js.map +0 -0
  562. /package/dist/cjs/{src/types → types}/tool.d.ts +0 -0
  563. /package/dist/{src → cjs}/types/tool.d.ts.map +0 -0
  564. /package/dist/cjs/{src/types → types}/tool.js +0 -0
  565. /package/dist/cjs/{src/utils → utils}/clone.d.ts +0 -0
  566. /package/dist/{src → cjs}/utils/clone.d.ts.map +0 -0
  567. /package/dist/cjs/{src/utils → utils}/clone.js +0 -0
  568. /package/dist/cjs/{src/utils → utils}/event.d.ts +0 -0
  569. /package/dist/{src → cjs}/utils/event.d.ts.map +0 -0
  570. /package/dist/cjs/{src/utils → utils}/event.js +0 -0
  571. /package/dist/cjs/{src/utils → utils}/history.d.ts +0 -0
  572. /package/dist/{src → cjs}/utils/history.d.ts.map +0 -0
  573. /package/dist/cjs/{src/utils → utils}/history.js +0 -0
  574. /package/dist/cjs/{src/utils → utils}/id.d.ts +0 -0
  575. /package/dist/{src → cjs}/utils/id.d.ts.map +0 -0
  576. /package/dist/cjs/{src/utils → utils}/id.js +0 -0
  577. /package/dist/cjs/{src/utils → utils}/logger.d.ts +0 -0
  578. /package/dist/{src → cjs}/utils/logger.d.ts.map +0 -0
  579. /package/dist/cjs/{src/utils → utils}/logger.js +0 -0
  580. /package/dist/cjs/{src/utils → utils}/session.d.ts +0 -0
  581. /package/dist/{src → cjs}/utils/session.d.ts.map +0 -0
  582. /package/dist/cjs/{src/utils → utils}/session.js +0 -0
  583. /package/dist/{src/constants → constants}/index.d.ts +0 -0
  584. /package/dist/{src/constants → constants}/index.js +0 -0
  585. /package/dist/{src/core → core}/Events.d.ts +0 -0
  586. /package/dist/{src/core → core}/Events.js +0 -0
  587. /package/dist/{src/core → core}/PersistenceManager.d.ts +0 -0
  588. /package/dist/{src/core → core}/PersistenceManager.js +0 -0
  589. /package/dist/{src/core → core}/ResponseEngine.d.ts +0 -0
  590. /package/dist/{src/core → core}/SessionManager.d.ts +0 -0
  591. /package/dist/{src/core → core}/SessionManager.js +0 -0
  592. /package/dist/{src/core → core}/ToolManager.d.ts +0 -0
  593. /package/dist/{src/core → core}/ToolManager.js +0 -0
  594. /package/dist/{src/providers → providers}/AnthropicProvider.d.ts +0 -0
  595. /package/dist/{src/providers → providers}/GeminiProvider.d.ts +0 -0
  596. /package/dist/{src/providers → providers}/OpenAIProvider.d.ts +0 -0
  597. /package/dist/{src/providers → providers}/OpenRouterProvider.d.ts +0 -0
  598. /package/dist/{src/providers → providers}/index.d.ts +0 -0
  599. /package/dist/{src/providers → providers}/index.js +0 -0
  600. /package/dist/{src/types → types}/agent.js +0 -0
  601. /package/dist/{src/types → types}/ai.d.ts +0 -0
  602. /package/dist/{src/types → types}/ai.js +0 -0
  603. /package/dist/{src/types → types}/history.d.ts +0 -0
  604. /package/dist/{src/types → types}/history.js +0 -0
  605. /package/dist/{src/types → types}/persistence.d.ts +0 -0
  606. /package/dist/{src/types → types}/persistence.js +0 -0
  607. /package/dist/{src/types → types}/route.js +0 -0
  608. /package/dist/{src/types → types}/routing.d.ts +0 -0
  609. /package/dist/{src/types → types}/routing.js +0 -0
  610. /package/dist/{src/types → types}/schema.d.ts +0 -0
  611. /package/dist/{src/types → types}/schema.js +0 -0
  612. /package/dist/{src/types → types}/session.d.ts +0 -0
  613. /package/dist/{src/types → types}/session.js +0 -0
  614. /package/dist/{src/types → types}/template.js +0 -0
  615. /package/dist/{src/types → types}/tool.d.ts +0 -0
  616. /package/dist/{src/types → types}/tool.js +0 -0
  617. /package/dist/{src/utils → utils}/clone.d.ts +0 -0
  618. /package/dist/{src/utils → utils}/clone.js +0 -0
  619. /package/dist/{src/utils → utils}/event.d.ts +0 -0
  620. /package/dist/{src/utils → utils}/event.js +0 -0
  621. /package/dist/{src/utils → utils}/history.d.ts +0 -0
  622. /package/dist/{src/utils → utils}/history.js +0 -0
  623. /package/dist/{src/utils → utils}/id.d.ts +0 -0
  624. /package/dist/{src/utils → utils}/id.js +0 -0
  625. /package/dist/{src/utils → utils}/logger.d.ts +0 -0
  626. /package/dist/{src/utils → utils}/logger.js +0 -0
  627. /package/dist/{src/utils → utils}/session.d.ts +0 -0
  628. /package/dist/{src/utils → utils}/session.js +0 -0
@@ -4,11 +4,11 @@
4
4
 
5
5
  import type { AgentStructuredResponse, AiProvider } from "./ai";
6
6
  import type { Tool } from "./tool";
7
- import type { RouteOptions } from "./route";
7
+ import type { RouteOptions, StepRef, StoppedReason } from "./route";
8
8
  import type { PersistenceConfig } from "./persistence";
9
9
  import type { SessionState } from "./session";
10
10
  import type { StructuredSchema } from "./schema";
11
- import { Template } from "./template";
11
+ import { Template, ConditionTemplate } from "./template";
12
12
 
13
13
  /**
14
14
  * Composition mode determines how the agent processes and structures responses
@@ -106,6 +106,10 @@ export interface AgentOptions<TContext = unknown, TData = unknown> {
106
106
  persistence?: PersistenceConfig<TData>;
107
107
  /** Knowledge base containing any JSON structure the AI should know */
108
108
  knowledgeBase?: Record<string, unknown>;
109
+ /** Absolute rules the agent must follow across all routes */
110
+ rules?: Template<TContext, TData>[];
111
+ /** Absolute prohibitions the agent must never do across all routes */
112
+ prohibitions?: Template<TContext, TData>[];
109
113
  /** Agent-level data schema defining the complete data structure for collection */
110
114
  schema?: StructuredSchema;
111
115
  /** Initial data to pre-populate when creating the agent */
@@ -131,7 +135,7 @@ export interface Guideline<TContext = unknown, TData = unknown> {
131
135
  /** Unique identifier */
132
136
  id?: string;
133
137
  /** Condition that triggers this guideline (optional for always-active guidelines) */
134
- condition?: Template<TContext, TData>;
138
+ condition?: ConditionTemplate<TContext, TData>;
135
139
  /** Action the agent should take when the condition is met */
136
140
  action: Template<TContext, TData>;
137
141
  /** Whether this guideline is currently enabled */
@@ -157,6 +161,10 @@ export interface AgentResponse<TData = Record<string, unknown>> {
157
161
  session?: SessionState<TData>;
158
162
  toolCalls?: Array<{ toolName: string; arguments: Record<string, unknown> }>;
159
163
  isRouteComplete?: boolean;
164
+ /** Steps executed in this response (for multi-step execution) */
165
+ executedSteps?: StepRef[];
166
+ /** Why execution stopped (for multi-step execution) */
167
+ stoppedReason?: StoppedReason;
160
168
  }
161
169
 
162
170
  export interface AgentResponseStreamChunk<TData = Record<string, unknown>> {
@@ -166,6 +174,10 @@ export interface AgentResponseStreamChunk<TData = Record<string, unknown>> {
166
174
  session?: SessionState<TData>;
167
175
  toolCalls?: Array<{ toolName: string; arguments: Record<string, unknown> }>;
168
176
  isRouteComplete?: boolean;
177
+ /** Steps executed in this response (for multi-step execution) */
178
+ executedSteps?: StepRef[];
179
+ /** Why execution stopped (for multi-step execution) */
180
+ stoppedReason?: StoppedReason;
169
181
  metadata?: {
170
182
  model?: string;
171
183
  tokensUsed?: number;
@@ -105,4 +105,15 @@ export type {
105
105
  export * from "./persistence";
106
106
 
107
107
  // Template types
108
- export type { Template, TemplateContext } from "./template";
108
+ export type {
109
+ Template,
110
+ TemplateContext,
111
+ ConditionTemplate,
112
+ ConditionEvaluationResult
113
+ } from "./template";
114
+ export {
115
+ ConditionEvaluator,
116
+ createConditionEvaluator,
117
+ extractAIContextStrings,
118
+ hasProgrammaticConditions
119
+ } from "../utils/condition";
@@ -4,7 +4,79 @@
4
4
 
5
5
  import type { Tool } from "./tool";
6
6
  import type { StructuredSchema } from "./schema";
7
- import { Template } from "./template";
7
+ import type { Guideline, Term } from "./agent";
8
+ import { Template, ConditionTemplate } from "./template";
9
+
10
+ /**
11
+ * Reason why batch execution stopped
12
+ * Used to indicate the stopping condition for multi-step execution
13
+ */
14
+ export type StoppedReason =
15
+ | 'needs_input' // Step requires uncollected data
16
+ | 'end_route' // Reached END_ROUTE
17
+ | 'route_complete' // All Steps processed
18
+ | 'prepare_error' // Error in prepare hook
19
+ | 'llm_error' // Error during LLM call
20
+ | 'validation_error' // Error validating collected data
21
+ | 'finalize_error'; // Error in finalize hook (non-fatal, logged)
22
+
23
+ /**
24
+ * Event types for batch execution observability
25
+ */
26
+ export type BatchExecutionEventType =
27
+ | 'batch_start'
28
+ | 'step_included'
29
+ | 'step_skipped'
30
+ | 'batch_stop'
31
+ | 'batch_complete';
32
+
33
+ /**
34
+ * Event emitted during batch execution for debugging and observability
35
+ *
36
+ * **Validates: Requirements 11.3**
37
+ */
38
+ export interface BatchExecutionEvent {
39
+ /** Type of batch execution event */
40
+ type: BatchExecutionEventType;
41
+ /** Timestamp when the event occurred */
42
+ timestamp: Date;
43
+ /** Event-specific details */
44
+ details: {
45
+ /** Step ID related to this event (for step_included, step_skipped) */
46
+ stepId?: string;
47
+ /** Reason for the event (e.g., why step was skipped or batch stopped) */
48
+ reason?: string;
49
+ /** Current batch size (for batch_start, batch_complete) */
50
+ batchSize?: number;
51
+ /** Stopped reason (for batch_stop, batch_complete) */
52
+ stoppedReason?: StoppedReason;
53
+ /** Phase timing information (for batch_complete) */
54
+ timing?: BatchExecutionTiming;
55
+ };
56
+ }
57
+
58
+ /**
59
+ * Timing information for batch execution phases
60
+ */
61
+ export interface BatchExecutionTiming {
62
+ /** Total batch execution time in milliseconds */
63
+ totalMs: number;
64
+ /** Time spent in batch determination phase */
65
+ determinationMs?: number;
66
+ /** Time spent executing prepare hooks */
67
+ prepareHooksMs?: number;
68
+ /** Time spent in LLM call */
69
+ llmCallMs?: number;
70
+ /** Time spent collecting data */
71
+ dataCollectionMs?: number;
72
+ /** Time spent executing finalize hooks */
73
+ finalizeHooksMs?: number;
74
+ }
75
+
76
+ /**
77
+ * Callback type for batch execution event listeners
78
+ */
79
+ export type BatchExecutionEventListener = (event: BatchExecutionEvent) => void;
8
80
 
9
81
  /**
10
82
  * Reference to a route
@@ -25,9 +97,52 @@ export interface StepRef {
25
97
  }
26
98
 
27
99
  /**
28
- * Forward declare Guideline and Term for circular dependency
100
+ * Result of batch determination - which steps can execute together
101
+ * @template TContext - Type of context data
102
+ * @template TData - Type of collected data
29
103
  */
30
- import type { Guideline, Term } from "./agent";
104
+ export interface BatchResult<TContext = unknown, TData = unknown> {
105
+ /** Steps included in this batch */
106
+ steps: StepOptions<TContext, TData>[];
107
+ /** Why the batch stopped */
108
+ stoppedReason: StoppedReason;
109
+ /** The Step that caused the stop (if applicable) */
110
+ stoppedAtStep?: StepOptions<TContext, TData>;
111
+ }
112
+
113
+ /**
114
+ * Error details for batch execution failures
115
+ */
116
+ export interface BatchExecutionError {
117
+ /** Type of error that occurred */
118
+ type: 'pre_extraction' | 'skipif_evaluation' | 'prepare_hook' |
119
+ 'llm_call' | 'data_validation' | 'finalize_hook';
120
+ /** Error message */
121
+ message: string;
122
+ /** Step where error occurred (if applicable) */
123
+ stepId?: string;
124
+ /** Additional error details */
125
+ details?: unknown;
126
+ }
127
+
128
+ /**
129
+ * Result of executing a batch of steps
130
+ * @template TData - Type of collected data
131
+ */
132
+ export interface BatchExecutionResult<TData = unknown> {
133
+ /** The generated message */
134
+ message: string;
135
+ /** Updated session state */
136
+ session: import('./session').SessionState<TData>;
137
+ /** Steps that were executed */
138
+ executedSteps: StepRef[];
139
+ /** Why execution stopped */
140
+ stoppedReason: StoppedReason;
141
+ /** Collected data from the batch */
142
+ collectedData?: Partial<TData>;
143
+ /** Any errors that occurred */
144
+ error?: BatchExecutionError;
145
+ }
31
146
 
32
147
  /**
33
148
  * Route lifecycle hooks for managing route-specific data and behavior
@@ -98,13 +213,15 @@ export interface RouteOptions<TContext = unknown, TData = unknown> {
98
213
  /** Optional personality prompt defining the agent's communication style for this route */
99
214
  personality?: Template<TContext, TData>;
100
215
  /** Conditions that activate this route */
101
- conditions?: Template<TContext, TData>[];
216
+ when?: ConditionTemplate<TContext, TData>;
217
+ /** Conditions that prevent this route from being considered */
218
+ skipIf?: ConditionTemplate<TContext, TData>;
102
219
  /** Initial guidelines for this route */
103
- guidelines?: Guideline<TContext>[];
220
+ guidelines?: Guideline<TContext, TData>[];
104
221
  /** Initial terms for the route's domain glossary */
105
222
  terms?: Term<TContext>[];
106
223
  /** Tools available in this route */
107
- tools?: Tool<TContext, TData>[];
224
+ tools?: (string | Tool<TContext, TData>)[];
108
225
  /** Absolute rules the agent must follow in this route */
109
226
  rules?: Template<TContext, TData>[];
110
227
  /** Absolute prohibitions the agent must never do in this route */
@@ -216,12 +333,11 @@ export interface StepOptions<TContext = unknown, TData = unknown> {
216
333
  */
217
334
  collect?: (keyof TData)[];
218
335
  /**
219
- * Function to determine if this step should be skipped
220
- * If returns true, the step will be bypassed
221
- * @param data - Currently collected agent-level data
222
- * @returns true if step should be skipped, false otherwise
336
+ * Condition to determine if this step should be skipped
337
+ * If evaluates to true, the step will be bypassed
338
+ * Supports strings (AI context), functions (programmatic), and arrays
223
339
  */
224
- skipIf?: (data: Partial<TData>) => boolean;
340
+ skipIf?: ConditionTemplate<TContext, TData>;
225
341
  /**
226
342
  * Required data fields that must be present before entering this step
227
343
  * If any required field is missing, step cannot be entered
@@ -231,8 +347,11 @@ export interface StepOptions<TContext = unknown, TData = unknown> {
231
347
  /**
232
348
  * Optional condition for this transition
233
349
  * Description of when this transition should be taken
350
+ * Supports strings (AI context), functions (programmatic), and arrays
234
351
  */
235
- when?: Template<TContext, TData>;
352
+ when?: ConditionTemplate<TContext, TData>;
353
+ /** Initial guidelines for this step */
354
+ guidelines?: Guideline<TContext, TData>[];
236
355
  }
237
356
 
238
357
  /**
@@ -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
+ }
@@ -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
  });