@falai/agent 0.1.0-alpha2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (499) hide show
  1. package/README.md +797 -0
  2. package/dist/cjs/package.json +1 -0
  3. package/dist/cjs/src/adapters/MemoryAdapter.d.ts +47 -0
  4. package/dist/cjs/src/adapters/MemoryAdapter.d.ts.map +1 -0
  5. package/dist/cjs/src/adapters/MemoryAdapter.js +202 -0
  6. package/dist/cjs/src/adapters/MemoryAdapter.js.map +1 -0
  7. package/dist/cjs/src/adapters/MongoAdapter.d.ts +97 -0
  8. package/dist/cjs/src/adapters/MongoAdapter.d.ts.map +1 -0
  9. package/dist/cjs/src/adapters/MongoAdapter.js +168 -0
  10. package/dist/cjs/src/adapters/MongoAdapter.js.map +1 -0
  11. package/dist/cjs/src/adapters/OpenSearchAdapter.d.ts +169 -0
  12. package/dist/cjs/src/adapters/OpenSearchAdapter.d.ts.map +1 -0
  13. package/dist/cjs/src/adapters/OpenSearchAdapter.js +458 -0
  14. package/dist/cjs/src/adapters/OpenSearchAdapter.js.map +1 -0
  15. package/dist/cjs/src/adapters/PostgreSQLAdapter.d.ts +71 -0
  16. package/dist/cjs/src/adapters/PostgreSQLAdapter.d.ts.map +1 -0
  17. package/dist/cjs/src/adapters/PostgreSQLAdapter.js +260 -0
  18. package/dist/cjs/src/adapters/PostgreSQLAdapter.js.map +1 -0
  19. package/dist/cjs/src/adapters/PrismaAdapter.d.ts +115 -0
  20. package/dist/cjs/src/adapters/PrismaAdapter.d.ts.map +1 -0
  21. package/dist/cjs/src/adapters/PrismaAdapter.js +366 -0
  22. package/dist/cjs/src/adapters/PrismaAdapter.js.map +1 -0
  23. package/dist/cjs/src/adapters/RedisAdapter.d.ts +71 -0
  24. package/dist/cjs/src/adapters/RedisAdapter.d.ts.map +1 -0
  25. package/dist/cjs/src/adapters/RedisAdapter.js +231 -0
  26. package/dist/cjs/src/adapters/RedisAdapter.js.map +1 -0
  27. package/dist/cjs/src/adapters/SQLiteAdapter.d.ts +69 -0
  28. package/dist/cjs/src/adapters/SQLiteAdapter.d.ts.map +1 -0
  29. package/dist/cjs/src/adapters/SQLiteAdapter.js +312 -0
  30. package/dist/cjs/src/adapters/SQLiteAdapter.js.map +1 -0
  31. package/dist/cjs/src/adapters/index.d.ts +17 -0
  32. package/dist/cjs/src/adapters/index.d.ts.map +1 -0
  33. package/dist/cjs/src/adapters/index.js +21 -0
  34. package/dist/cjs/src/adapters/index.js.map +1 -0
  35. package/dist/cjs/src/constants/index.d.ts +10 -0
  36. package/dist/cjs/src/constants/index.d.ts.map +1 -0
  37. package/dist/cjs/src/constants/index.js +13 -0
  38. package/dist/cjs/src/constants/index.js.map +1 -0
  39. package/dist/cjs/src/core/Agent.d.ts +232 -0
  40. package/dist/cjs/src/core/Agent.d.ts.map +1 -0
  41. package/dist/cjs/src/core/Agent.js +741 -0
  42. package/dist/cjs/src/core/Agent.js.map +1 -0
  43. package/dist/cjs/src/core/Events.d.ts +26 -0
  44. package/dist/cjs/src/core/Events.d.ts.map +1 -0
  45. package/dist/cjs/src/core/Events.js +144 -0
  46. package/dist/cjs/src/core/Events.js.map +1 -0
  47. package/dist/cjs/src/core/PersistenceManager.d.ts +98 -0
  48. package/dist/cjs/src/core/PersistenceManager.d.ts.map +1 -0
  49. package/dist/cjs/src/core/PersistenceManager.js +261 -0
  50. package/dist/cjs/src/core/PersistenceManager.js.map +1 -0
  51. package/dist/cjs/src/core/PromptComposer.d.ts +27 -0
  52. package/dist/cjs/src/core/PromptComposer.d.ts.map +1 -0
  53. package/dist/cjs/src/core/PromptComposer.js +194 -0
  54. package/dist/cjs/src/core/PromptComposer.js.map +1 -0
  55. package/dist/cjs/src/core/ResponseEngine.d.ts +32 -0
  56. package/dist/cjs/src/core/ResponseEngine.d.ts.map +1 -0
  57. package/dist/cjs/src/core/ResponseEngine.js +202 -0
  58. package/dist/cjs/src/core/ResponseEngine.js.map +1 -0
  59. package/dist/cjs/src/core/ResponseModal.d.ts +222 -0
  60. package/dist/cjs/src/core/ResponseModal.d.ts.map +1 -0
  61. package/dist/cjs/src/core/ResponseModal.js +1588 -0
  62. package/dist/cjs/src/core/ResponseModal.js.map +1 -0
  63. package/dist/cjs/src/core/ResponsePipeline.d.ts +175 -0
  64. package/dist/cjs/src/core/ResponsePipeline.d.ts.map +1 -0
  65. package/dist/cjs/src/core/ResponsePipeline.js +549 -0
  66. package/dist/cjs/src/core/ResponsePipeline.js.map +1 -0
  67. package/dist/cjs/src/core/Route.d.ts +181 -0
  68. package/dist/cjs/src/core/Route.d.ts.map +1 -0
  69. package/dist/cjs/src/core/Route.js +541 -0
  70. package/dist/cjs/src/core/Route.js.map +1 -0
  71. package/dist/cjs/src/core/RoutingEngine.d.ts +159 -0
  72. package/dist/cjs/src/core/RoutingEngine.d.ts.map +1 -0
  73. package/dist/cjs/src/core/RoutingEngine.js +961 -0
  74. package/dist/cjs/src/core/RoutingEngine.js.map +1 -0
  75. package/dist/cjs/src/core/SessionManager.d.ts +94 -0
  76. package/dist/cjs/src/core/SessionManager.d.ts.map +1 -0
  77. package/dist/cjs/src/core/SessionManager.js +239 -0
  78. package/dist/cjs/src/core/SessionManager.js.map +1 -0
  79. package/dist/cjs/src/core/Step.d.ts +170 -0
  80. package/dist/cjs/src/core/Step.d.ts.map +1 -0
  81. package/dist/cjs/src/core/Step.js +448 -0
  82. package/dist/cjs/src/core/Step.js.map +1 -0
  83. package/dist/cjs/src/core/ToolManager.d.ts +234 -0
  84. package/dist/cjs/src/core/ToolManager.d.ts.map +1 -0
  85. package/dist/cjs/src/core/ToolManager.js +1117 -0
  86. package/dist/cjs/src/core/ToolManager.js.map +1 -0
  87. package/dist/cjs/src/index.d.ts +44 -0
  88. package/dist/cjs/src/index.d.ts.map +1 -0
  89. package/dist/cjs/src/index.js +88 -0
  90. package/dist/cjs/src/index.js.map +1 -0
  91. package/dist/cjs/src/providers/AnthropicProvider.d.ts +43 -0
  92. package/dist/cjs/src/providers/AnthropicProvider.d.ts.map +1 -0
  93. package/dist/cjs/src/providers/AnthropicProvider.js +377 -0
  94. package/dist/cjs/src/providers/AnthropicProvider.js.map +1 -0
  95. package/dist/cjs/src/providers/GeminiProvider.d.ts +58 -0
  96. package/dist/cjs/src/providers/GeminiProvider.d.ts.map +1 -0
  97. package/dist/cjs/src/providers/GeminiProvider.js +489 -0
  98. package/dist/cjs/src/providers/GeminiProvider.js.map +1 -0
  99. package/dist/cjs/src/providers/OpenAIProvider.d.ts +52 -0
  100. package/dist/cjs/src/providers/OpenAIProvider.d.ts.map +1 -0
  101. package/dist/cjs/src/providers/OpenAIProvider.js +395 -0
  102. package/dist/cjs/src/providers/OpenAIProvider.js.map +1 -0
  103. package/dist/cjs/src/providers/OpenRouterProvider.d.ts +56 -0
  104. package/dist/cjs/src/providers/OpenRouterProvider.d.ts.map +1 -0
  105. package/dist/cjs/src/providers/OpenRouterProvider.js +409 -0
  106. package/dist/cjs/src/providers/OpenRouterProvider.js.map +1 -0
  107. package/dist/cjs/src/providers/index.d.ts +13 -0
  108. package/dist/cjs/src/providers/index.d.ts.map +1 -0
  109. package/dist/cjs/src/providers/index.js +16 -0
  110. package/dist/cjs/src/providers/index.js.map +1 -0
  111. package/dist/cjs/src/types/agent.d.ts +181 -0
  112. package/dist/cjs/src/types/agent.d.ts.map +1 -0
  113. package/dist/cjs/src/types/agent.js +21 -0
  114. package/dist/cjs/src/types/agent.js.map +1 -0
  115. package/dist/cjs/src/types/ai.d.ts +143 -0
  116. package/dist/cjs/src/types/ai.d.ts.map +1 -0
  117. package/dist/cjs/src/types/ai.js +6 -0
  118. package/dist/cjs/src/types/ai.js.map +1 -0
  119. package/dist/cjs/src/types/history.d.ts +178 -0
  120. package/dist/cjs/src/types/history.d.ts.map +1 -0
  121. package/dist/cjs/src/types/history.js +33 -0
  122. package/dist/cjs/src/types/history.js.map +1 -0
  123. package/dist/cjs/src/types/index.d.ts +22 -0
  124. package/dist/cjs/src/types/index.d.ts.map +1 -0
  125. package/dist/cjs/src/types/index.js +37 -0
  126. package/dist/cjs/src/types/index.js.map +1 -0
  127. package/dist/cjs/src/types/persistence.d.ts +209 -0
  128. package/dist/cjs/src/types/persistence.d.ts.map +1 -0
  129. package/dist/cjs/src/types/persistence.js +7 -0
  130. package/dist/cjs/src/types/persistence.js.map +1 -0
  131. package/dist/cjs/src/types/route.d.ts +238 -0
  132. package/dist/cjs/src/types/route.d.ts.map +1 -0
  133. package/dist/cjs/src/types/route.js +6 -0
  134. package/dist/cjs/src/types/route.js.map +1 -0
  135. package/dist/cjs/src/types/routing.d.ts +16 -0
  136. package/dist/cjs/src/types/routing.d.ts.map +1 -0
  137. package/dist/cjs/src/types/routing.js +3 -0
  138. package/dist/cjs/src/types/routing.js.map +1 -0
  139. package/dist/cjs/src/types/schema.d.ts +22 -0
  140. package/dist/cjs/src/types/schema.d.ts.map +1 -0
  141. package/dist/cjs/src/types/schema.js +3 -0
  142. package/dist/cjs/src/types/schema.js.map +1 -0
  143. package/dist/cjs/src/types/session.d.ts +65 -0
  144. package/dist/cjs/src/types/session.d.ts.map +1 -0
  145. package/dist/cjs/src/types/session.js +6 -0
  146. package/dist/cjs/src/types/session.js.map +1 -0
  147. package/dist/cjs/src/types/template.d.ts +88 -0
  148. package/dist/cjs/src/types/template.d.ts.map +1 -0
  149. package/dist/cjs/src/types/template.js +3 -0
  150. package/dist/cjs/src/types/template.js.map +1 -0
  151. package/dist/cjs/src/types/tool.d.ts +130 -0
  152. package/dist/cjs/src/types/tool.d.ts.map +1 -0
  153. package/dist/cjs/src/types/tool.js +19 -0
  154. package/dist/cjs/src/types/tool.js.map +1 -0
  155. package/dist/cjs/src/utils/clone.d.ts +8 -0
  156. package/dist/cjs/src/utils/clone.d.ts.map +1 -0
  157. package/dist/cjs/src/utils/clone.js +32 -0
  158. package/dist/cjs/src/utils/clone.js.map +1 -0
  159. package/dist/cjs/src/utils/condition.d.ts +38 -0
  160. package/dist/cjs/src/utils/condition.d.ts.map +1 -0
  161. package/dist/cjs/src/utils/condition.js +168 -0
  162. package/dist/cjs/src/utils/condition.js.map +1 -0
  163. package/dist/cjs/src/utils/event.d.ts +6 -0
  164. package/dist/cjs/src/utils/event.d.ts.map +1 -0
  165. package/dist/cjs/src/utils/event.js +20 -0
  166. package/dist/cjs/src/utils/event.js.map +1 -0
  167. package/dist/cjs/src/utils/history.d.ts +60 -0
  168. package/dist/cjs/src/utils/history.d.ts.map +1 -0
  169. package/dist/cjs/src/utils/history.js +274 -0
  170. package/dist/cjs/src/utils/history.js.map +1 -0
  171. package/dist/cjs/src/utils/id.d.ts +25 -0
  172. package/dist/cjs/src/utils/id.d.ts.map +1 -0
  173. package/dist/cjs/src/utils/id.js +70 -0
  174. package/dist/cjs/src/utils/id.js.map +1 -0
  175. package/dist/cjs/src/utils/index.d.ts +15 -0
  176. package/dist/cjs/src/utils/index.d.ts.map +1 -0
  177. package/dist/cjs/src/utils/index.js +64 -0
  178. package/dist/cjs/src/utils/index.js.map +1 -0
  179. package/dist/cjs/src/utils/json.d.ts +16 -0
  180. package/dist/cjs/src/utils/json.d.ts.map +1 -0
  181. package/dist/cjs/src/utils/json.js +47 -0
  182. package/dist/cjs/src/utils/json.js.map +1 -0
  183. package/dist/cjs/src/utils/logger.d.ts +10 -0
  184. package/dist/cjs/src/utils/logger.d.ts.map +1 -0
  185. package/dist/cjs/src/utils/logger.js +23 -0
  186. package/dist/cjs/src/utils/logger.js.map +1 -0
  187. package/dist/cjs/src/utils/retry.d.ts +10 -0
  188. package/dist/cjs/src/utils/retry.d.ts.map +1 -0
  189. package/dist/cjs/src/utils/retry.js +76 -0
  190. package/dist/cjs/src/utils/retry.js.map +1 -0
  191. package/dist/cjs/src/utils/session.d.ts +51 -0
  192. package/dist/cjs/src/utils/session.d.ts.map +1 -0
  193. package/dist/cjs/src/utils/session.js +170 -0
  194. package/dist/cjs/src/utils/session.js.map +1 -0
  195. package/dist/cjs/src/utils/template.d.ts +155 -0
  196. package/dist/cjs/src/utils/template.d.ts.map +1 -0
  197. package/dist/cjs/src/utils/template.js +383 -0
  198. package/dist/cjs/src/utils/template.js.map +1 -0
  199. package/dist/src/adapters/MemoryAdapter.d.ts +47 -0
  200. package/dist/src/adapters/MemoryAdapter.d.ts.map +1 -0
  201. package/dist/src/adapters/MemoryAdapter.js +198 -0
  202. package/dist/src/adapters/MemoryAdapter.js.map +1 -0
  203. package/dist/src/adapters/MongoAdapter.d.ts +97 -0
  204. package/dist/src/adapters/MongoAdapter.d.ts.map +1 -0
  205. package/dist/src/adapters/MongoAdapter.js +164 -0
  206. package/dist/src/adapters/MongoAdapter.js.map +1 -0
  207. package/dist/src/adapters/OpenSearchAdapter.d.ts +169 -0
  208. package/dist/src/adapters/OpenSearchAdapter.d.ts.map +1 -0
  209. package/dist/src/adapters/OpenSearchAdapter.js +454 -0
  210. package/dist/src/adapters/OpenSearchAdapter.js.map +1 -0
  211. package/dist/src/adapters/PostgreSQLAdapter.d.ts +71 -0
  212. package/dist/src/adapters/PostgreSQLAdapter.d.ts.map +1 -0
  213. package/dist/src/adapters/PostgreSQLAdapter.js +256 -0
  214. package/dist/src/adapters/PostgreSQLAdapter.js.map +1 -0
  215. package/dist/src/adapters/PrismaAdapter.d.ts +115 -0
  216. package/dist/src/adapters/PrismaAdapter.d.ts.map +1 -0
  217. package/dist/src/adapters/PrismaAdapter.js +362 -0
  218. package/dist/src/adapters/PrismaAdapter.js.map +1 -0
  219. package/dist/src/adapters/RedisAdapter.d.ts +71 -0
  220. package/dist/src/adapters/RedisAdapter.d.ts.map +1 -0
  221. package/dist/src/adapters/RedisAdapter.js +227 -0
  222. package/dist/src/adapters/RedisAdapter.js.map +1 -0
  223. package/dist/src/adapters/SQLiteAdapter.d.ts +69 -0
  224. package/dist/src/adapters/SQLiteAdapter.d.ts.map +1 -0
  225. package/dist/src/adapters/SQLiteAdapter.js +308 -0
  226. package/dist/src/adapters/SQLiteAdapter.js.map +1 -0
  227. package/dist/src/adapters/index.d.ts +17 -0
  228. package/dist/src/adapters/index.d.ts.map +1 -0
  229. package/dist/src/adapters/index.js +11 -0
  230. package/dist/src/adapters/index.js.map +1 -0
  231. package/dist/src/constants/index.d.ts +10 -0
  232. package/dist/src/constants/index.d.ts.map +1 -0
  233. package/dist/src/constants/index.js +10 -0
  234. package/dist/src/constants/index.js.map +1 -0
  235. package/dist/src/core/Agent.d.ts +232 -0
  236. package/dist/src/core/Agent.d.ts.map +1 -0
  237. package/dist/src/core/Agent.js +737 -0
  238. package/dist/src/core/Agent.js.map +1 -0
  239. package/dist/src/core/Events.d.ts +26 -0
  240. package/dist/src/core/Events.d.ts.map +1 -0
  241. package/dist/src/core/Events.js +137 -0
  242. package/dist/src/core/Events.js.map +1 -0
  243. package/dist/src/core/PersistenceManager.d.ts +98 -0
  244. package/dist/src/core/PersistenceManager.d.ts.map +1 -0
  245. package/dist/src/core/PersistenceManager.js +257 -0
  246. package/dist/src/core/PersistenceManager.js.map +1 -0
  247. package/dist/src/core/PromptComposer.d.ts +27 -0
  248. package/dist/src/core/PromptComposer.d.ts.map +1 -0
  249. package/dist/src/core/PromptComposer.js +190 -0
  250. package/dist/src/core/PromptComposer.js.map +1 -0
  251. package/dist/src/core/ResponseEngine.d.ts +32 -0
  252. package/dist/src/core/ResponseEngine.d.ts.map +1 -0
  253. package/dist/src/core/ResponseEngine.js +198 -0
  254. package/dist/src/core/ResponseEngine.js.map +1 -0
  255. package/dist/src/core/ResponseModal.d.ts +222 -0
  256. package/dist/src/core/ResponseModal.d.ts.map +1 -0
  257. package/dist/src/core/ResponseModal.js +1583 -0
  258. package/dist/src/core/ResponseModal.js.map +1 -0
  259. package/dist/src/core/ResponsePipeline.d.ts +175 -0
  260. package/dist/src/core/ResponsePipeline.d.ts.map +1 -0
  261. package/dist/src/core/ResponsePipeline.js +545 -0
  262. package/dist/src/core/ResponsePipeline.js.map +1 -0
  263. package/dist/src/core/Route.d.ts +181 -0
  264. package/dist/src/core/Route.d.ts.map +1 -0
  265. package/dist/src/core/Route.js +537 -0
  266. package/dist/src/core/Route.js.map +1 -0
  267. package/dist/src/core/RoutingEngine.d.ts +159 -0
  268. package/dist/src/core/RoutingEngine.d.ts.map +1 -0
  269. package/dist/src/core/RoutingEngine.js +957 -0
  270. package/dist/src/core/RoutingEngine.js.map +1 -0
  271. package/dist/src/core/SessionManager.d.ts +94 -0
  272. package/dist/src/core/SessionManager.d.ts.map +1 -0
  273. package/dist/src/core/SessionManager.js +235 -0
  274. package/dist/src/core/SessionManager.js.map +1 -0
  275. package/dist/src/core/Step.d.ts +170 -0
  276. package/dist/src/core/Step.d.ts.map +1 -0
  277. package/dist/src/core/Step.js +444 -0
  278. package/dist/src/core/Step.js.map +1 -0
  279. package/dist/src/core/ToolManager.d.ts +234 -0
  280. package/dist/src/core/ToolManager.d.ts.map +1 -0
  281. package/dist/src/core/ToolManager.js +1111 -0
  282. package/dist/src/core/ToolManager.js.map +1 -0
  283. package/dist/src/index.d.ts +44 -0
  284. package/dist/src/index.d.ts.map +1 -0
  285. package/dist/src/index.js +37 -0
  286. package/dist/src/index.js.map +1 -0
  287. package/dist/src/providers/AnthropicProvider.d.ts +43 -0
  288. package/dist/src/providers/AnthropicProvider.d.ts.map +1 -0
  289. package/dist/src/providers/AnthropicProvider.js +370 -0
  290. package/dist/src/providers/AnthropicProvider.js.map +1 -0
  291. package/dist/src/providers/GeminiProvider.d.ts +58 -0
  292. package/dist/src/providers/GeminiProvider.d.ts.map +1 -0
  293. package/dist/src/providers/GeminiProvider.js +485 -0
  294. package/dist/src/providers/GeminiProvider.js.map +1 -0
  295. package/dist/src/providers/OpenAIProvider.d.ts +52 -0
  296. package/dist/src/providers/OpenAIProvider.d.ts.map +1 -0
  297. package/dist/src/providers/OpenAIProvider.js +388 -0
  298. package/dist/src/providers/OpenAIProvider.js.map +1 -0
  299. package/dist/src/providers/OpenRouterProvider.d.ts +56 -0
  300. package/dist/src/providers/OpenRouterProvider.d.ts.map +1 -0
  301. package/dist/src/providers/OpenRouterProvider.js +402 -0
  302. package/dist/src/providers/OpenRouterProvider.js.map +1 -0
  303. package/dist/src/providers/index.d.ts +13 -0
  304. package/dist/src/providers/index.d.ts.map +1 -0
  305. package/dist/src/providers/index.js +9 -0
  306. package/dist/src/providers/index.js.map +1 -0
  307. package/dist/src/types/agent.d.ts +181 -0
  308. package/dist/src/types/agent.d.ts.map +1 -0
  309. package/dist/src/types/agent.js +18 -0
  310. package/dist/src/types/agent.js.map +1 -0
  311. package/dist/src/types/ai.d.ts +143 -0
  312. package/dist/src/types/ai.d.ts.map +1 -0
  313. package/dist/src/types/ai.js +5 -0
  314. package/dist/src/types/ai.js.map +1 -0
  315. package/dist/src/types/history.d.ts +178 -0
  316. package/dist/src/types/history.d.ts.map +1 -0
  317. package/dist/src/types/history.js +30 -0
  318. package/dist/src/types/history.js.map +1 -0
  319. package/dist/src/types/index.d.ts +22 -0
  320. package/dist/src/types/index.d.ts.map +1 -0
  321. package/dist/src/types/index.js +12 -0
  322. package/dist/src/types/index.js.map +1 -0
  323. package/dist/src/types/persistence.d.ts +209 -0
  324. package/dist/src/types/persistence.d.ts.map +1 -0
  325. package/dist/src/types/persistence.js +6 -0
  326. package/dist/src/types/persistence.js.map +1 -0
  327. package/dist/src/types/route.d.ts +238 -0
  328. package/dist/src/types/route.d.ts.map +1 -0
  329. package/dist/src/types/route.js +5 -0
  330. package/dist/src/types/route.js.map +1 -0
  331. package/dist/src/types/routing.d.ts +16 -0
  332. package/dist/src/types/routing.d.ts.map +1 -0
  333. package/dist/src/types/routing.js +2 -0
  334. package/dist/src/types/routing.js.map +1 -0
  335. package/dist/src/types/schema.d.ts +22 -0
  336. package/dist/src/types/schema.d.ts.map +1 -0
  337. package/dist/src/types/schema.js +2 -0
  338. package/dist/src/types/schema.js.map +1 -0
  339. package/dist/src/types/session.d.ts +65 -0
  340. package/dist/src/types/session.d.ts.map +1 -0
  341. package/dist/src/types/session.js +5 -0
  342. package/dist/src/types/session.js.map +1 -0
  343. package/dist/src/types/template.d.ts +88 -0
  344. package/dist/src/types/template.d.ts.map +1 -0
  345. package/dist/src/types/template.js +2 -0
  346. package/dist/src/types/template.js.map +1 -0
  347. package/dist/src/types/tool.d.ts +130 -0
  348. package/dist/src/types/tool.d.ts.map +1 -0
  349. package/dist/src/types/tool.js +16 -0
  350. package/dist/src/types/tool.js.map +1 -0
  351. package/dist/src/utils/clone.d.ts +8 -0
  352. package/dist/src/utils/clone.d.ts.map +1 -0
  353. package/dist/src/utils/clone.js +29 -0
  354. package/dist/src/utils/clone.js.map +1 -0
  355. package/dist/src/utils/condition.d.ts +38 -0
  356. package/dist/src/utils/condition.d.ts.map +1 -0
  357. package/dist/src/utils/condition.js +161 -0
  358. package/dist/src/utils/condition.js.map +1 -0
  359. package/dist/src/utils/event.d.ts +6 -0
  360. package/dist/src/utils/event.d.ts.map +1 -0
  361. package/dist/src/utils/event.js +17 -0
  362. package/dist/src/utils/event.js.map +1 -0
  363. package/dist/src/utils/history.d.ts +60 -0
  364. package/dist/src/utils/history.d.ts.map +1 -0
  365. package/dist/src/utils/history.js +263 -0
  366. package/dist/src/utils/history.js.map +1 -0
  367. package/dist/src/utils/id.d.ts +25 -0
  368. package/dist/src/utils/id.d.ts.map +1 -0
  369. package/dist/src/utils/id.js +64 -0
  370. package/dist/src/utils/id.js.map +1 -0
  371. package/dist/src/utils/index.d.ts +15 -0
  372. package/dist/src/utils/index.d.ts.map +1 -0
  373. package/dist/src/utils/index.js +23 -0
  374. package/dist/src/utils/index.js.map +1 -0
  375. package/dist/src/utils/json.d.ts +16 -0
  376. package/dist/src/utils/json.d.ts.map +1 -0
  377. package/dist/src/utils/json.js +43 -0
  378. package/dist/src/utils/json.js.map +1 -0
  379. package/dist/src/utils/logger.d.ts +10 -0
  380. package/dist/src/utils/logger.d.ts.map +1 -0
  381. package/dist/src/utils/logger.js +17 -0
  382. package/dist/src/utils/logger.js.map +1 -0
  383. package/dist/src/utils/retry.d.ts +10 -0
  384. package/dist/src/utils/retry.d.ts.map +1 -0
  385. package/dist/src/utils/retry.js +71 -0
  386. package/dist/src/utils/retry.js.map +1 -0
  387. package/dist/src/utils/session.d.ts +51 -0
  388. package/dist/src/utils/session.d.ts.map +1 -0
  389. package/dist/src/utils/session.js +160 -0
  390. package/dist/src/utils/session.js.map +1 -0
  391. package/dist/src/utils/template.d.ts +155 -0
  392. package/dist/src/utils/template.d.ts.map +1 -0
  393. package/dist/src/utils/template.js +374 -0
  394. package/dist/src/utils/template.js.map +1 -0
  395. package/docs/CONTRIBUTING.md +521 -0
  396. package/docs/README.md +228 -0
  397. package/docs/api/README.md +3258 -0
  398. package/docs/api/overview.md +1134 -0
  399. package/docs/architecture/data-extraction-flow.md +363 -0
  400. package/docs/core/agent/README.md +902 -0
  401. package/docs/core/agent/context-management.md +796 -0
  402. package/docs/core/agent/session-management.md +641 -0
  403. package/docs/core/ai-integration/prompt-composition.md +220 -0
  404. package/docs/core/ai-integration/providers.md +515 -0
  405. package/docs/core/ai-integration/response-processing.md +287 -0
  406. package/docs/core/conversation-flows/data-collection.md +623 -0
  407. package/docs/core/conversation-flows/route-dsl.md +502 -0
  408. package/docs/core/conversation-flows/routes.md +247 -0
  409. package/docs/core/conversation-flows/step-transitions.md +595 -0
  410. package/docs/core/conversation-flows/steps.md +154 -0
  411. package/docs/core/error-handling.md +638 -0
  412. package/docs/core/persistence/adapters.md +255 -0
  413. package/docs/core/persistence/session-storage.md +644 -0
  414. package/docs/core/routing/intelligent-routing.md +466 -0
  415. package/docs/core/tools/tool-definition.md +970 -0
  416. package/docs/core/tools/tool-scoping.md +819 -0
  417. package/docs/guides/advanced-patterns/publishing.md +186 -0
  418. package/docs/guides/error-handling-patterns.md +578 -0
  419. package/docs/guides/getting-started/README.md +696 -0
  420. package/docs/guides/migration/README.md +72 -0
  421. package/docs/guides/migration/flexible-routing-conditions.md +375 -0
  422. package/docs/guides/migration/response-modal-refactor.md +518 -0
  423. package/examples/advanced-patterns/knowledge-based-agent.ts +735 -0
  424. package/examples/advanced-patterns/persistent-onboarding.ts +728 -0
  425. package/examples/advanced-patterns/route-lifecycle-hooks.ts +556 -0
  426. package/examples/advanced-patterns/streaming-responses.ts +578 -0
  427. package/examples/ai-providers/anthropic-integration.ts +388 -0
  428. package/examples/ai-providers/openai-integration.ts +228 -0
  429. package/examples/condition-patterns/function-only-conditions.ts +365 -0
  430. package/examples/condition-patterns/mixed-array-conditions.ts +477 -0
  431. package/examples/condition-patterns/route-skipif-patterns.ts +468 -0
  432. package/examples/condition-patterns/step-skipif-patterns.ts +0 -0
  433. package/examples/condition-patterns/string-only-conditions.ts +296 -0
  434. package/examples/conversation-flows/completion-transitions.ts +318 -0
  435. package/examples/core-concepts/basic-agent.ts +503 -0
  436. package/examples/core-concepts/modern-streaming-api.ts +309 -0
  437. package/examples/core-concepts/schema-driven-extraction.ts +332 -0
  438. package/examples/core-concepts/session-management.ts +494 -0
  439. package/examples/integrations/database-integration.ts +630 -0
  440. package/examples/integrations/healthcare-integration.ts +595 -0
  441. package/examples/integrations/search-integration.ts +530 -0
  442. package/examples/integrations/server-session-management.ts +307 -0
  443. package/examples/persistence/custom-adapter.ts +529 -0
  444. package/examples/persistence/database-persistence.ts +583 -0
  445. package/examples/persistence/memory-sessions.ts +495 -0
  446. package/examples/persistence/prisma-schema.example.prisma +74 -0
  447. package/examples/persistence/redis-persistence.ts +488 -0
  448. package/examples/tools/basic-tools.ts +765 -0
  449. package/examples/tools/data-enrichment-tools.ts +593 -0
  450. package/package.json +125 -0
  451. package/src/adapters/MemoryAdapter.ts +273 -0
  452. package/src/adapters/MongoAdapter.ts +304 -0
  453. package/src/adapters/OpenSearchAdapter.ts +670 -0
  454. package/src/adapters/PostgreSQLAdapter.ts +428 -0
  455. package/src/adapters/PrismaAdapter.ts +553 -0
  456. package/src/adapters/RedisAdapter.ts +377 -0
  457. package/src/adapters/SQLiteAdapter.ts +459 -0
  458. package/src/adapters/index.ts +43 -0
  459. package/src/constants/index.ts +10 -0
  460. package/src/core/Agent.ts +970 -0
  461. package/src/core/Events.ts +164 -0
  462. package/src/core/PersistenceManager.ts +353 -0
  463. package/src/core/PromptComposer.ts +253 -0
  464. package/src/core/ResponseEngine.ts +306 -0
  465. package/src/core/ResponseModal.ts +2050 -0
  466. package/src/core/ResponsePipeline.ts +864 -0
  467. package/src/core/Route.ts +677 -0
  468. package/src/core/RoutingEngine.ts +1396 -0
  469. package/src/core/SessionManager.ts +297 -0
  470. package/src/core/Step.ts +593 -0
  471. package/src/core/ToolManager.ts +1394 -0
  472. package/src/index.ts +155 -0
  473. package/src/providers/AnthropicProvider.ts +560 -0
  474. package/src/providers/GeminiProvider.ts +683 -0
  475. package/src/providers/OpenAIProvider.ts +602 -0
  476. package/src/providers/OpenRouterProvider.ts +613 -0
  477. package/src/providers/index.ts +16 -0
  478. package/src/types/agent.ts +196 -0
  479. package/src/types/ai.ts +158 -0
  480. package/src/types/history.ts +206 -0
  481. package/src/types/index.ts +119 -0
  482. package/src/types/persistence.ts +251 -0
  483. package/src/types/route.ts +272 -0
  484. package/src/types/routing.ts +18 -0
  485. package/src/types/schema.ts +23 -0
  486. package/src/types/session.ts +74 -0
  487. package/src/types/template.ts +104 -0
  488. package/src/types/tool.ts +174 -0
  489. package/src/utils/clone.ts +34 -0
  490. package/src/utils/condition.ts +190 -0
  491. package/src/utils/event.ts +16 -0
  492. package/src/utils/history.ts +306 -0
  493. package/src/utils/id.ts +73 -0
  494. package/src/utils/index.ts +69 -0
  495. package/src/utils/json.ts +46 -0
  496. package/src/utils/logger.ts +19 -0
  497. package/src/utils/retry.ts +97 -0
  498. package/src/utils/session.ts +204 -0
  499. package/src/utils/template.ts +444 -0
@@ -0,0 +1,253 @@
1
+ import type { Event, Term, Guideline, AgentOptions } from "../types";
2
+ import type { Route } from "./Route";
3
+ import { render, renderMany, formatKnowledgeBase, createTemplateContext } from "../utils/template";
4
+ import { TemplateContext } from "../types/template";
5
+ import { extractAIContextStrings, ConditionEvaluator } from "../utils/condition";
6
+
7
+ export class PromptComposer<TContext = unknown, TData = unknown> {
8
+ private parts: string[] = [];
9
+ private renderContext: TemplateContext<TContext, TData>;
10
+
11
+ constructor(context: TemplateContext<TContext, TData> = createTemplateContext({})) {
12
+ this.renderContext = context;
13
+ }
14
+
15
+ // Specific, typed sections tailored to the framework
16
+
17
+ async addAgentMeta(agent: AgentOptions<TContext, TData>): Promise<this> {
18
+ const lines: string[] = [];
19
+ lines.push("## Agent");
20
+ lines.push(`**Name:** ${agent.name}`);
21
+ if (agent.goal) {
22
+ lines.push(`**Goal:** ${agent.goal}`);
23
+ }
24
+ if (agent.description) {
25
+ lines.push(`**Description:** ${agent.description}`);
26
+ }
27
+ if (agent.identity) {
28
+ lines.push(
29
+ `**Identity:** ${await render(agent.identity, this.renderContext)}`
30
+ );
31
+ }
32
+ if (agent.personality) {
33
+ lines.push(
34
+ `**Personality:** ${await render(
35
+ agent.personality,
36
+ this.renderContext
37
+ )}`
38
+ );
39
+ }
40
+ this.parts.push(lines.join("\n"));
41
+ return this;
42
+ }
43
+
44
+ async addRoutingOverview(routes: Route<TContext, TData>[]): Promise<this> {
45
+ return this.addActiveRoutes(routes);
46
+ }
47
+
48
+ async addScoringRules(): Promise<this> {
49
+ this.parts.push(
50
+ `## Scoring Rules\n\n${[
51
+ "- 90-100: explicit keywords + clear intent",
52
+ "- 70-89: strong contextual evidence + relevant keywords",
53
+ "- 50-69: moderate relevance",
54
+ "- 30-49: weak connection or ambiguous",
55
+ "- 0-29: minimal/none",
56
+ "Return ONLY JSON matching the provided schema. Include scores for ALL routes.",
57
+ ].join("\n")}`
58
+ );
59
+ return Promise.resolve(this);
60
+ }
61
+
62
+ async addInstruction(text: string): Promise<this> {
63
+ if (text) this.parts.push(`## Instruction\n\n${text}`);
64
+ return Promise.resolve(this);
65
+ }
66
+
67
+ async addInteractionHistory(history: Event[], note?: string): Promise<this> {
68
+ const recent = history
69
+ .slice(-10)
70
+ .map((e) => `- ${JSON.stringify(e)}`)
71
+ .join("\n");
72
+ const header = note ? `${note}\n\n` : "";
73
+ this.parts.push(
74
+ `## Interaction History\n\n${header}Recent conversation events:\n\n${recent}`
75
+ );
76
+ return Promise.resolve(this);
77
+ }
78
+
79
+ async addLastMessage(message: string): Promise<this> {
80
+ this.parts.push(`## Last Message\n\n${message}`);
81
+ return Promise.resolve(this);
82
+ }
83
+
84
+ async addGlossary(terms: Term<TContext>[]): Promise<this> {
85
+ if (!terms.length) return this;
86
+
87
+ const renderedTerms = await Promise.all(
88
+ terms.map(async (t) => {
89
+ const name = await render(t.name, this.renderContext);
90
+ const description = await render(t.description, this.renderContext);
91
+ const synonyms = t.synonyms
92
+ ? await renderMany(t.synonyms, this.renderContext)
93
+ : [];
94
+ const synonymText =
95
+ synonyms.length > 0 ? ` (synonyms: ${synonyms.join(", ")})` : "";
96
+ return `- **${name}**${synonymText}: ${description}`;
97
+ })
98
+ );
99
+
100
+ this.parts.push(`## Glossary\n\n${renderedTerms.join("\n")}`);
101
+ return this;
102
+ }
103
+
104
+ async addGuidelines(guidelines: Guideline<TContext, TData>[]): Promise<this> {
105
+ const enabled = guidelines.filter((g) => g.enabled !== false);
106
+ if (!enabled.length) return this;
107
+
108
+ const evaluator = new ConditionEvaluator(this.renderContext);
109
+ const activeGuidelines: Guideline<TContext, TData>[] = [];
110
+ const allAIContextStrings: string[] = [];
111
+
112
+ // Evaluate guideline conditions to determine which are active
113
+ for (const guideline of enabled) {
114
+ if (guideline.condition) {
115
+ const evaluation = await evaluator.evaluateCondition(guideline.condition, 'AND');
116
+
117
+ // Collect AI context strings for prompt
118
+ allAIContextStrings.push(...evaluation.aiContextStrings);
119
+
120
+ // Include guideline if:
121
+ // 1. No programmatic conditions (only strings) - always active
122
+ // 2. Programmatic conditions evaluate to true
123
+ if (!evaluation.hasProgrammaticConditions || evaluation.programmaticResult) {
124
+ activeGuidelines.push(guideline);
125
+ }
126
+ } else {
127
+ // No condition means always active
128
+ activeGuidelines.push(guideline);
129
+ }
130
+ }
131
+
132
+ if (!activeGuidelines.length && !allAIContextStrings.length) return this;
133
+
134
+ const renderedGuidelines = await Promise.all(
135
+ activeGuidelines.map(async (g, i) => {
136
+ const action = await render(g.action, this.renderContext);
137
+ if (g.condition) {
138
+ // Use AI context strings if available, otherwise render the condition
139
+ const conditionStrings = extractAIContextStrings(g.condition);
140
+ if (conditionStrings.length > 0) {
141
+ const conditionText = conditionStrings.join(" AND ");
142
+ return `- Guideline #${i + 1}: When ${conditionText}, then ${action}`;
143
+ }
144
+ }
145
+ return `- Guideline #${i + 1}: ${action}`;
146
+ })
147
+ );
148
+
149
+ // Add any additional AI context from inactive guidelines
150
+ if (allAIContextStrings.length > 0) {
151
+ const uniqueContextStrings = Array.from(new Set(allAIContextStrings));
152
+ const contextSection = `\n\n**Additional Context:** ${uniqueContextStrings.join(", ")}`;
153
+ this.parts.push(`## Guidelines\n\n${renderedGuidelines.join("\n")}${contextSection}`);
154
+ } else {
155
+ this.parts.push(`## Guidelines\n\n${renderedGuidelines.join("\n")}`);
156
+ }
157
+
158
+ return this;
159
+ }
160
+
161
+ async addKnowledgeBase(
162
+ agentKnowledgeBase?: Record<string, unknown>,
163
+ routeKnowledgeBase?: Record<string, unknown>
164
+ ): Promise<this> {
165
+ // Merge agent and route knowledge bases (route takes precedence for conflicts)
166
+ const mergedKnowledge = {
167
+ ...(agentKnowledgeBase || {}),
168
+ ...(routeKnowledgeBase || {}),
169
+ };
170
+
171
+ // Only add section if there's knowledge data
172
+ if (Object.keys(mergedKnowledge).length > 0) {
173
+ const formatted = formatKnowledgeBase(mergedKnowledge, "Knowledge Base");
174
+ this.parts.push(formatted);
175
+ }
176
+
177
+ return Promise.resolve(this);
178
+ }
179
+
180
+ async addActiveRoutes(routes: Route<TContext, TData>[]): Promise<this> {
181
+ if (!routes.length) return this;
182
+
183
+ const renderedRoutes = await Promise.all(
184
+ routes.map(async (r, i) => {
185
+ const whenContextStrings = r.when ? extractAIContextStrings(r.when) : [];
186
+ const conditions =
187
+ whenContextStrings.length > 0
188
+ ? `\n\n **Triggered when:** ${whenContextStrings.join(" OR ")}`
189
+ : "";
190
+ const desc = r.description
191
+ ? `\n\n **Description:** ${r.description}`
192
+ : "";
193
+ const rules = await renderMany(r.getRules(), this.renderContext);
194
+ const prohibitions = await renderMany(
195
+ r.getProhibitions(),
196
+ this.renderContext
197
+ );
198
+ const rulesInfo =
199
+ rules.length > 0
200
+ ? `\n\n **Rules:**\n ${rules.map((x) => ` - ${x}`).join("\n ")}`
201
+ : "";
202
+ const prohibitionsInfo =
203
+ prohibitions.length > 0
204
+ ? `\n\n **Prohibitions:**\n ${prohibitions
205
+ .map((x) => ` - ${x}`)
206
+ .join("\n ")}`
207
+ : "";
208
+ return `### Route ${i + 1}: ${r.title
209
+ }${desc}${conditions}${rulesInfo}${prohibitionsInfo}`;
210
+ })
211
+ );
212
+
213
+ this.parts.push(`## Available Routes\n\n${renderedRoutes.join("\n\n")}`);
214
+ return this;
215
+ }
216
+
217
+ async addDirectives(directives?: string[]): Promise<this> {
218
+ if (!directives?.length) return this;
219
+ this.parts.push(
220
+ `## Directives\n\nAddress concisely:\n\n${directives
221
+ .map((d) => `- ${d}`)
222
+ .join("\n")}`
223
+ );
224
+ return Promise.resolve(this);
225
+ }
226
+
227
+ async addAvailableTools(
228
+ tools?: Array<{
229
+ id: string;
230
+ name?: string;
231
+ description?: string;
232
+ parameters?: unknown;
233
+ }>
234
+ ): Promise<this> {
235
+ if (!tools?.length) return this;
236
+
237
+ const renderedTools = tools.map((tool, i) => {
238
+ const toolName = tool.name || tool.id;
239
+ const desc = tool.description
240
+ ? `\n Description: ${tool.description}`
241
+ : "";
242
+ return `### Tool ${i + 1}: ${toolName}${desc}`;
243
+ });
244
+
245
+ this.parts.push(`## Available Tools\n\n${renderedTools.join("\n\n")}`);
246
+ return Promise.resolve(this);
247
+ }
248
+
249
+ async build(): Promise<string> {
250
+ const prompt = this.parts.filter(Boolean).join("\n\n").trim();
251
+ return Promise.resolve(prompt);
252
+ }
253
+ }
@@ -0,0 +1,306 @@
1
+ import type {
2
+ Event,
3
+ StructuredSchema,
4
+ SessionState,
5
+ AgentOptions,
6
+ Guideline,
7
+ Term,
8
+ Template,
9
+ } from "../types";
10
+ import type { Route } from "./Route";
11
+ import type { Step } from "./Step";
12
+ import { PromptComposer } from "./PromptComposer";
13
+ import { createTemplateContext, render } from "../utils/template";
14
+
15
+ export interface BuildResponsePromptParams<
16
+ TContext = unknown,
17
+ TData = unknown
18
+ > {
19
+ route: Route<TContext, TData>;
20
+ currentStep: Step<TContext, TData>;
21
+ rules: Template<TContext, TData>[];
22
+ prohibitions: Template<TContext, TData>[];
23
+ directives: string[] | undefined;
24
+ history: Event[];
25
+ lastMessage: string;
26
+ agentOptions?: AgentOptions<TContext, TData>;
27
+ // Combined properties from agent and route
28
+ combinedGuidelines?: Guideline<TContext, TData>[];
29
+ combinedTerms?: Term<TContext, TData>[];
30
+ context?: TContext;
31
+ session?: SessionState<TData>;
32
+ // NEW: Agent-level schema for data validation
33
+ agentSchema?: StructuredSchema;
34
+ }
35
+
36
+ export interface BuildFallbackPromptParams<TContext = unknown, TData = unknown> {
37
+ history: Event[];
38
+ agentOptions: AgentOptions<TContext, TData>;
39
+ terms: Term<TContext, TData>[];
40
+ guidelines: Guideline<TContext, TData>[];
41
+ context?: TContext;
42
+ session?: SessionState<TData>;
43
+ }
44
+
45
+ export class ResponseEngine<TContext = unknown, TData = unknown> {
46
+ responseSchemaForRoute(
47
+ route: Route<TContext, TData>,
48
+ currentStep?: Step<TContext, TData>,
49
+ agentSchema?: StructuredSchema
50
+ ): StructuredSchema {
51
+ const base: StructuredSchema = {
52
+ type: "object",
53
+ properties: {
54
+ message: { type: "string", description: "Final user-facing message" },
55
+ },
56
+ required: ["message"],
57
+ additionalProperties: false,
58
+ };
59
+
60
+ // Add data field only if route has responseOutputSchema
61
+ if (route.responseOutputSchema) {
62
+ base.properties!.data = route.responseOutputSchema;
63
+ }
64
+
65
+ // Add collect fields from current step using agent-level schema
66
+ if (currentStep?.collect && agentSchema?.properties) {
67
+ for (const field of currentStep.collect) {
68
+ const fieldSchema = agentSchema.properties[field as string];
69
+ if (fieldSchema) {
70
+ base.properties![field as string] = fieldSchema;
71
+ }
72
+ }
73
+ }
74
+
75
+ return base;
76
+ }
77
+
78
+ async buildResponsePrompt(
79
+ params: BuildResponsePromptParams<TContext, TData>
80
+ ): Promise<string> {
81
+ const {
82
+ route,
83
+ currentStep,
84
+ rules,
85
+ prohibitions,
86
+ directives,
87
+ history,
88
+ lastMessage,
89
+ agentOptions,
90
+ combinedGuidelines,
91
+ combinedTerms,
92
+ context,
93
+ session,
94
+ agentSchema,
95
+ } = params;
96
+ const templateContext = createTemplateContext({ context, session, history });
97
+ const pc = new PromptComposer(templateContext);
98
+
99
+ // Create combined agent options with route overrides
100
+ let effectiveAgentOptions = agentOptions;
101
+ if (agentOptions && (route.identity || route.personality)) {
102
+ // Route identity and personality override agent versions
103
+ effectiveAgentOptions = {
104
+ ...agentOptions,
105
+ ...(route.identity && { identity: route.identity }),
106
+ ...(route.personality && { personality: route.personality }),
107
+ };
108
+ }
109
+
110
+ if (effectiveAgentOptions) {
111
+ await pc.addAgentMeta(effectiveAgentOptions);
112
+ }
113
+ await pc.addInstruction(
114
+ `Route: ${route.title}${route.description ? ` — ${route.description}` : ""
115
+ }`
116
+ );
117
+ if (currentStep.prompt) {
118
+ await pc.addInstruction(
119
+ `Guideline for your response (adapt to the conversation):\n${await render(
120
+ currentStep.prompt,
121
+ templateContext
122
+ )}`
123
+ );
124
+ }
125
+ if (rules.length)
126
+ await pc.addInstruction(`Rules:\n- ${rules.join("\n- ")}`);
127
+ if (prohibitions.length)
128
+ await pc.addInstruction(`Prohibitions:\n- ${prohibitions.join("\n- ")}`);
129
+ await pc.addDirectives(directives);
130
+ await pc.addKnowledgeBase(
131
+ agentOptions?.knowledgeBase,
132
+ route.getKnowledgeBase()
133
+ );
134
+
135
+ // Add combined guidelines (agent + route)
136
+ if (combinedGuidelines && combinedGuidelines.length > 0) {
137
+ await pc.addGuidelines(combinedGuidelines);
138
+ }
139
+
140
+ // Add combined terms (agent + route)
141
+ if (combinedTerms && combinedTerms.length > 0) {
142
+ await pc.addGlossary(combinedTerms);
143
+ }
144
+
145
+ await pc.addInteractionHistory(history);
146
+ await pc.addLastMessage(lastMessage);
147
+
148
+ // Add data collection instructions - include ALL route fields, not just current step
149
+ if (agentSchema?.properties) {
150
+ // Collect all fields from route's required and optional fields
151
+ const allRouteFields = new Set<string>();
152
+
153
+ // Add route required fields
154
+ if (route.requiredFields) {
155
+ route.requiredFields.forEach(field => allRouteFields.add(String(field)));
156
+ }
157
+
158
+ // Add route optional fields
159
+ if (route.optionalFields) {
160
+ route.optionalFields.forEach(field => allRouteFields.add(String(field)));
161
+ }
162
+
163
+ // Add current step's collect fields (in case they're not in route fields)
164
+ if (currentStep?.collect) {
165
+ currentStep.collect.forEach(field => allRouteFields.add(String(field)));
166
+ }
167
+
168
+ if (allRouteFields.size > 0) {
169
+ const stepCollectFields = new Set(currentStep?.collect?.map(f => String(f)) || []);
170
+ const fieldDescriptions: string[] = [];
171
+
172
+ for (const field of allRouteFields) {
173
+ const fieldSchema = agentSchema.properties[field];
174
+ if (fieldSchema) {
175
+ const fieldName = field;
176
+ const fieldDesc = fieldSchema.description || fieldName;
177
+ const fieldType = Array.isArray(fieldSchema.type) ? fieldSchema.type[0] : fieldSchema.type;
178
+
179
+ let fieldInfo = ` • ${fieldName} (${fieldType})`;
180
+
181
+ // Add enum values if present
182
+ if (fieldSchema.enum && Array.isArray(fieldSchema.enum)) {
183
+ fieldInfo += ` [${fieldSchema.enum.join(' | ')}]`;
184
+ }
185
+
186
+ // Add description
187
+ fieldInfo += `: ${fieldDesc}`;
188
+
189
+ // Mark if this is the current step's focus
190
+ if (stepCollectFields.has(field)) {
191
+ fieldInfo += ` ← FOCUS FOR THIS STEP`;
192
+ }
193
+
194
+ fieldDescriptions.push(fieldInfo);
195
+ }
196
+ }
197
+
198
+ if (fieldDescriptions.length > 0) {
199
+ const instruction = [
200
+ `## Data Collection Rules`,
201
+ ``,
202
+ `CRITICAL: You MUST extract ALL relevant information from the user's message, not just what this step asks for.`,
203
+ ``,
204
+ `Available fields to extract:`,
205
+ ...fieldDescriptions,
206
+ ``,
207
+ `**How to collect data:**`,
208
+ `1. Read the user's message carefully`,
209
+ `2. Extract EVERY piece of information that matches ANY field above`,
210
+ `3. Users often provide multiple details at once (e.g., "I need a checkup next Tuesday at 2 PM")`,
211
+ `4. Include ALL extracted fields in your JSON response as top-level properties`,
212
+ `5. Field names must match EXACTLY as shown above`,
213
+ `6. Only include fields that the user actually mentioned`,
214
+ ``,
215
+ `**Example:** If user says "I need a checkup next Tuesday at 2 PM", extract:`,
216
+ `- appointmentType: "checkup"`,
217
+ `- preferredDate: "next Tuesday"`,
218
+ `- preferredTime: "2 PM"`,
219
+ ].join('\n');
220
+
221
+ await pc.addInstruction(instruction);
222
+ }
223
+ }
224
+ }
225
+
226
+ // Add response format instructions with explicit JSON structure
227
+ // Generate example JSON based on actual schema fields
228
+ const exampleFields: string[] = [' "message": "your response to the user"'];
229
+
230
+ if (agentSchema?.properties) {
231
+ // Collect all fields from route's required and optional fields
232
+ const allRouteFields = new Set<string>();
233
+
234
+ if (route.requiredFields) {
235
+ route.requiredFields.forEach(field => allRouteFields.add(String(field)));
236
+ }
237
+
238
+ if (route.optionalFields) {
239
+ route.optionalFields.forEach(field => allRouteFields.add(String(field)));
240
+ }
241
+
242
+ if (currentStep?.collect) {
243
+ currentStep.collect.forEach(field => allRouteFields.add(String(field)));
244
+ }
245
+
246
+ // Generate example values for each field
247
+ for (const field of allRouteFields) {
248
+ const fieldSchema = agentSchema.properties[field];
249
+ if (fieldSchema) {
250
+ const fieldType = Array.isArray(fieldSchema.type) ? fieldSchema.type[0] : fieldSchema.type;
251
+ let exampleValue = '"value if extracted"';
252
+
253
+ // Generate type-appropriate example
254
+ if (fieldSchema.enum && Array.isArray(fieldSchema.enum) && fieldSchema.enum.length > 0) {
255
+ exampleValue = `"${fieldSchema.enum[0]}"`;
256
+ } else if (fieldType === 'string') {
257
+ exampleValue = '"extracted value"';
258
+ } else if (fieldType === 'number' || fieldType === 'integer') {
259
+ exampleValue = '0';
260
+ } else if (fieldType === 'boolean') {
261
+ exampleValue = 'true';
262
+ }
263
+
264
+ exampleFields.push(` "${field}": ${exampleValue}`);
265
+ }
266
+ }
267
+ }
268
+
269
+ await pc.addInstruction(
270
+ [
271
+ `## Response Format`,
272
+ ``,
273
+ `You MUST return ONLY valid JSON in this exact format:`,
274
+ `{`,
275
+ ...exampleFields.map((f, i) => i < exampleFields.length - 1 ? `${f},` : f),
276
+ `}`,
277
+ ``,
278
+ `CRITICAL RULES:`,
279
+ `- Return ONLY the JSON object, no other text`,
280
+ `- The "message" field is REQUIRED and must contain your response to the user`,
281
+ `- Include ALL extracted data fields as top-level properties`,
282
+ `- Only include data fields that were actually mentioned by the user`,
283
+ `- Do not wrap the JSON in markdown code blocks`,
284
+ `- Do not add any explanatory text before or after the JSON`,
285
+ ].join('\n')
286
+ );
287
+
288
+ return pc.build();
289
+ }
290
+
291
+ async buildFallbackPrompt(
292
+ params: BuildFallbackPromptParams<TContext, TData>
293
+ ): Promise<string> {
294
+ const { history, agentOptions, terms, guidelines, context, session } =
295
+ params;
296
+ const templateContext = createTemplateContext({ context, session, history });
297
+ const pc = new PromptComposer(templateContext);
298
+
299
+ await pc.addAgentMeta(agentOptions);
300
+ await pc.addInteractionHistory(history);
301
+ await pc.addGlossary(terms);
302
+ await pc.addGuidelines(guidelines);
303
+ await pc.addKnowledgeBase(agentOptions.knowledgeBase);
304
+ return pc.build();
305
+ }
306
+ }