@falai/agent 1.2.8 → 2.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (499) hide show
  1. package/README.md +40 -886
  2. package/dist/adapters/MemoryAdapter.js +2 -2
  3. package/dist/adapters/MemoryAdapter.js.map +1 -1
  4. package/dist/adapters/MongoAdapter.js +2 -2
  5. package/dist/adapters/MongoAdapter.js.map +1 -1
  6. package/dist/adapters/OpenSearchAdapter.d.ts.map +1 -1
  7. package/dist/adapters/OpenSearchAdapter.js +9 -7
  8. package/dist/adapters/OpenSearchAdapter.js.map +1 -1
  9. package/dist/adapters/PostgreSQLAdapter.d.ts +14 -0
  10. package/dist/adapters/PostgreSQLAdapter.d.ts.map +1 -1
  11. package/dist/adapters/PostgreSQLAdapter.js +25 -9
  12. package/dist/adapters/PostgreSQLAdapter.js.map +1 -1
  13. package/dist/adapters/PrismaAdapter.js +5 -5
  14. package/dist/adapters/PrismaAdapter.js.map +1 -1
  15. package/dist/adapters/RedisAdapter.js +2 -2
  16. package/dist/adapters/RedisAdapter.js.map +1 -1
  17. package/dist/adapters/SQLiteAdapter.d.ts +17 -0
  18. package/dist/adapters/SQLiteAdapter.d.ts.map +1 -1
  19. package/dist/adapters/SQLiteAdapter.js +30 -11
  20. package/dist/adapters/SQLiteAdapter.js.map +1 -1
  21. package/dist/cjs/adapters/MemoryAdapter.js +2 -2
  22. package/dist/cjs/adapters/MemoryAdapter.js.map +1 -1
  23. package/dist/cjs/adapters/MongoAdapter.js +2 -2
  24. package/dist/cjs/adapters/MongoAdapter.js.map +1 -1
  25. package/dist/cjs/adapters/OpenSearchAdapter.d.ts.map +1 -1
  26. package/dist/cjs/adapters/OpenSearchAdapter.js +9 -7
  27. package/dist/cjs/adapters/OpenSearchAdapter.js.map +1 -1
  28. package/dist/cjs/adapters/PostgreSQLAdapter.d.ts +14 -0
  29. package/dist/cjs/adapters/PostgreSQLAdapter.d.ts.map +1 -1
  30. package/dist/cjs/adapters/PostgreSQLAdapter.js +25 -9
  31. package/dist/cjs/adapters/PostgreSQLAdapter.js.map +1 -1
  32. package/dist/cjs/adapters/PrismaAdapter.js +5 -5
  33. package/dist/cjs/adapters/PrismaAdapter.js.map +1 -1
  34. package/dist/cjs/adapters/RedisAdapter.js +2 -2
  35. package/dist/cjs/adapters/RedisAdapter.js.map +1 -1
  36. package/dist/cjs/adapters/SQLiteAdapter.d.ts +17 -0
  37. package/dist/cjs/adapters/SQLiteAdapter.d.ts.map +1 -1
  38. package/dist/cjs/adapters/SQLiteAdapter.js +30 -11
  39. package/dist/cjs/adapters/SQLiteAdapter.js.map +1 -1
  40. package/dist/cjs/constants/index.d.ts +0 -9
  41. package/dist/cjs/constants/index.d.ts.map +1 -1
  42. package/dist/cjs/constants/index.js +2 -11
  43. package/dist/cjs/constants/index.js.map +1 -1
  44. package/dist/cjs/core/Agent.d.ts +119 -153
  45. package/dist/cjs/core/Agent.d.ts.map +1 -1
  46. package/dist/cjs/core/Agent.js +471 -324
  47. package/dist/cjs/core/Agent.js.map +1 -1
  48. package/dist/cjs/core/AutoChainExecutor.d.ts +107 -0
  49. package/dist/cjs/core/AutoChainExecutor.d.ts.map +1 -0
  50. package/dist/cjs/core/AutoChainExecutor.js +297 -0
  51. package/dist/cjs/core/AutoChainExecutor.js.map +1 -0
  52. package/dist/cjs/core/BranchEvaluator.d.ts +54 -0
  53. package/dist/cjs/core/BranchEvaluator.d.ts.map +1 -0
  54. package/dist/cjs/core/BranchEvaluator.js +130 -0
  55. package/dist/cjs/core/BranchEvaluator.js.map +1 -0
  56. package/dist/cjs/core/DirectiveBus.d.ts +88 -0
  57. package/dist/cjs/core/DirectiveBus.d.ts.map +1 -0
  58. package/dist/cjs/core/DirectiveBus.js +196 -0
  59. package/dist/cjs/core/DirectiveBus.js.map +1 -0
  60. package/dist/cjs/core/DirectiveChainTracker.d.ts +49 -0
  61. package/dist/cjs/core/DirectiveChainTracker.d.ts.map +1 -0
  62. package/dist/cjs/core/DirectiveChainTracker.js +121 -0
  63. package/dist/cjs/core/DirectiveChainTracker.js.map +1 -0
  64. package/dist/cjs/core/Flow.d.ts +186 -0
  65. package/dist/cjs/core/Flow.d.ts.map +1 -0
  66. package/dist/cjs/core/Flow.js +550 -0
  67. package/dist/cjs/core/Flow.js.map +1 -0
  68. package/dist/cjs/core/FlowRouter.d.ts +182 -0
  69. package/dist/cjs/core/FlowRouter.d.ts.map +1 -0
  70. package/dist/cjs/core/{RoutingEngine.js → FlowRouter.js} +323 -306
  71. package/dist/cjs/core/FlowRouter.js.map +1 -0
  72. package/dist/cjs/core/PersistenceManager.d.ts +2 -2
  73. package/dist/cjs/core/PersistenceManager.d.ts.map +1 -1
  74. package/dist/cjs/core/PersistenceManager.js +7 -7
  75. package/dist/cjs/core/PersistenceManager.js.map +1 -1
  76. package/dist/cjs/core/PromptComposer.d.ts +21 -8
  77. package/dist/cjs/core/PromptComposer.d.ts.map +1 -1
  78. package/dist/cjs/core/PromptComposer.js +182 -105
  79. package/dist/cjs/core/PromptComposer.js.map +1 -1
  80. package/dist/cjs/core/PromptSectionCache.d.ts +1 -1
  81. package/dist/cjs/core/PromptSectionCache.js +1 -1
  82. package/dist/cjs/core/ResponseEngine.d.ts +18 -8
  83. package/dist/cjs/core/ResponseEngine.d.ts.map +1 -1
  84. package/dist/cjs/core/ResponseEngine.js +38 -36
  85. package/dist/cjs/core/ResponseEngine.js.map +1 -1
  86. package/dist/cjs/core/ResponseModal.d.ts +73 -56
  87. package/dist/cjs/core/ResponseModal.d.ts.map +1 -1
  88. package/dist/cjs/core/ResponseModal.js +1191 -1014
  89. package/dist/cjs/core/ResponseModal.js.map +1 -1
  90. package/dist/cjs/core/ResponsePipeline.d.ts +124 -26
  91. package/dist/cjs/core/ResponsePipeline.d.ts.map +1 -1
  92. package/dist/cjs/core/ResponsePipeline.js +509 -136
  93. package/dist/cjs/core/ResponsePipeline.js.map +1 -1
  94. package/dist/cjs/core/SignalEvaluator.d.ts +86 -0
  95. package/dist/cjs/core/SignalEvaluator.d.ts.map +1 -0
  96. package/dist/cjs/core/SignalEvaluator.js +333 -0
  97. package/dist/cjs/core/SignalEvaluator.js.map +1 -0
  98. package/dist/cjs/core/SignalProcessor.d.ts +152 -0
  99. package/dist/cjs/core/SignalProcessor.d.ts.map +1 -0
  100. package/dist/cjs/core/SignalProcessor.js +562 -0
  101. package/dist/cjs/core/SignalProcessor.js.map +1 -0
  102. package/dist/cjs/core/Step.d.ts +43 -32
  103. package/dist/cjs/core/Step.d.ts.map +1 -1
  104. package/dist/cjs/core/Step.js +221 -126
  105. package/dist/cjs/core/Step.js.map +1 -1
  106. package/dist/cjs/core/StreamingToolExecutor.d.ts +2 -2
  107. package/dist/cjs/core/StreamingToolExecutor.d.ts.map +1 -1
  108. package/dist/cjs/core/StreamingToolExecutor.js.map +1 -1
  109. package/dist/cjs/core/ToolManager.d.ts +44 -13
  110. package/dist/cjs/core/ToolManager.d.ts.map +1 -1
  111. package/dist/cjs/core/ToolManager.js +174 -91
  112. package/dist/cjs/core/ToolManager.js.map +1 -1
  113. package/dist/cjs/core/createAgent.d.ts +35 -0
  114. package/dist/cjs/core/createAgent.d.ts.map +1 -0
  115. package/dist/cjs/core/createAgent.js +39 -0
  116. package/dist/cjs/core/createAgent.js.map +1 -0
  117. package/dist/cjs/core/flow-namespace.d.ts +49 -0
  118. package/dist/cjs/core/flow-namespace.d.ts.map +1 -0
  119. package/dist/cjs/core/flow-namespace.js +171 -0
  120. package/dist/cjs/core/flow-namespace.js.map +1 -0
  121. package/dist/cjs/index.d.ts +11 -14
  122. package/dist/cjs/index.d.ts.map +1 -1
  123. package/dist/cjs/index.js +18 -22
  124. package/dist/cjs/index.js.map +1 -1
  125. package/dist/cjs/types/agent.d.ts +183 -54
  126. package/dist/cjs/types/agent.d.ts.map +1 -1
  127. package/dist/cjs/types/agent.js +0 -6
  128. package/dist/cjs/types/agent.js.map +1 -1
  129. package/dist/cjs/types/ai.d.ts +3 -3
  130. package/dist/cjs/types/ai.d.ts.map +1 -1
  131. package/dist/cjs/types/errors.d.ts +15 -0
  132. package/dist/cjs/types/errors.d.ts.map +1 -0
  133. package/dist/cjs/types/errors.js +22 -0
  134. package/dist/cjs/types/errors.js.map +1 -0
  135. package/dist/cjs/types/flow.d.ts +513 -0
  136. package/dist/cjs/types/flow.d.ts.map +1 -0
  137. package/dist/cjs/types/{route.js → flow.js} +2 -2
  138. package/dist/cjs/types/flow.js.map +1 -0
  139. package/dist/cjs/types/index.d.ts +7 -6
  140. package/dist/cjs/types/index.d.ts.map +1 -1
  141. package/dist/cjs/types/index.js +6 -2
  142. package/dist/cjs/types/index.js.map +1 -1
  143. package/dist/cjs/types/persistence.d.ts +11 -7
  144. package/dist/cjs/types/persistence.d.ts.map +1 -1
  145. package/dist/cjs/types/routing.d.ts +1 -1
  146. package/dist/cjs/types/routing.d.ts.map +1 -1
  147. package/dist/cjs/types/session.d.ts +24 -23
  148. package/dist/cjs/types/session.d.ts.map +1 -1
  149. package/dist/cjs/types/signals.d.ts +248 -0
  150. package/dist/cjs/types/signals.d.ts.map +1 -0
  151. package/dist/cjs/types/signals.js +11 -0
  152. package/dist/cjs/types/signals.js.map +1 -0
  153. package/dist/cjs/types/template.d.ts +2 -8
  154. package/dist/cjs/types/template.d.ts.map +1 -1
  155. package/dist/cjs/types/tool.d.ts +36 -29
  156. package/dist/cjs/types/tool.d.ts.map +1 -1
  157. package/dist/cjs/types/tool.js +1 -1
  158. package/dist/cjs/types/tool.js.map +1 -1
  159. package/dist/cjs/utils/condition.d.ts +7 -1
  160. package/dist/cjs/utils/condition.d.ts.map +1 -1
  161. package/dist/cjs/utils/condition.js.map +1 -1
  162. package/dist/cjs/utils/id.d.ts +13 -5
  163. package/dist/cjs/utils/id.d.ts.map +1 -1
  164. package/dist/cjs/utils/id.js +24 -10
  165. package/dist/cjs/utils/id.js.map +1 -1
  166. package/dist/cjs/utils/index.d.ts +2 -2
  167. package/dist/cjs/utils/index.d.ts.map +1 -1
  168. package/dist/cjs/utils/index.js +7 -3
  169. package/dist/cjs/utils/index.js.map +1 -1
  170. package/dist/cjs/utils/session.d.ts +44 -5
  171. package/dist/cjs/utils/session.d.ts.map +1 -1
  172. package/dist/cjs/utils/session.js +197 -38
  173. package/dist/cjs/utils/session.js.map +1 -1
  174. package/dist/constants/index.d.ts +0 -9
  175. package/dist/constants/index.d.ts.map +1 -1
  176. package/dist/constants/index.js +3 -9
  177. package/dist/constants/index.js.map +1 -1
  178. package/dist/core/Agent.d.ts +119 -153
  179. package/dist/core/Agent.d.ts.map +1 -1
  180. package/dist/core/Agent.js +472 -325
  181. package/dist/core/Agent.js.map +1 -1
  182. package/dist/core/AutoChainExecutor.d.ts +107 -0
  183. package/dist/core/AutoChainExecutor.d.ts.map +1 -0
  184. package/dist/core/AutoChainExecutor.js +293 -0
  185. package/dist/core/AutoChainExecutor.js.map +1 -0
  186. package/dist/core/BranchEvaluator.d.ts +54 -0
  187. package/dist/core/BranchEvaluator.d.ts.map +1 -0
  188. package/dist/core/BranchEvaluator.js +126 -0
  189. package/dist/core/BranchEvaluator.js.map +1 -0
  190. package/dist/core/DirectiveBus.d.ts +88 -0
  191. package/dist/core/DirectiveBus.d.ts.map +1 -0
  192. package/dist/core/DirectiveBus.js +192 -0
  193. package/dist/core/DirectiveBus.js.map +1 -0
  194. package/dist/core/DirectiveChainTracker.d.ts +49 -0
  195. package/dist/core/DirectiveChainTracker.d.ts.map +1 -0
  196. package/dist/core/DirectiveChainTracker.js +117 -0
  197. package/dist/core/DirectiveChainTracker.js.map +1 -0
  198. package/dist/core/Flow.d.ts +186 -0
  199. package/dist/core/Flow.d.ts.map +1 -0
  200. package/dist/core/Flow.js +546 -0
  201. package/dist/core/Flow.js.map +1 -0
  202. package/dist/core/FlowRouter.d.ts +182 -0
  203. package/dist/core/FlowRouter.d.ts.map +1 -0
  204. package/dist/core/{RoutingEngine.js → FlowRouter.js} +322 -305
  205. package/dist/core/FlowRouter.js.map +1 -0
  206. package/dist/core/PersistenceManager.d.ts +2 -2
  207. package/dist/core/PersistenceManager.d.ts.map +1 -1
  208. package/dist/core/PersistenceManager.js +7 -7
  209. package/dist/core/PersistenceManager.js.map +1 -1
  210. package/dist/core/PromptComposer.d.ts +21 -8
  211. package/dist/core/PromptComposer.d.ts.map +1 -1
  212. package/dist/core/PromptComposer.js +183 -106
  213. package/dist/core/PromptComposer.js.map +1 -1
  214. package/dist/core/PromptSectionCache.d.ts +1 -1
  215. package/dist/core/PromptSectionCache.js +1 -1
  216. package/dist/core/ResponseEngine.d.ts +18 -8
  217. package/dist/core/ResponseEngine.d.ts.map +1 -1
  218. package/dist/core/ResponseEngine.js +38 -36
  219. package/dist/core/ResponseEngine.js.map +1 -1
  220. package/dist/core/ResponseModal.d.ts +73 -56
  221. package/dist/core/ResponseModal.d.ts.map +1 -1
  222. package/dist/core/ResponseModal.js +1193 -1016
  223. package/dist/core/ResponseModal.js.map +1 -1
  224. package/dist/core/ResponsePipeline.d.ts +124 -26
  225. package/dist/core/ResponsePipeline.d.ts.map +1 -1
  226. package/dist/core/ResponsePipeline.js +509 -137
  227. package/dist/core/ResponsePipeline.js.map +1 -1
  228. package/dist/core/SignalEvaluator.d.ts +86 -0
  229. package/dist/core/SignalEvaluator.d.ts.map +1 -0
  230. package/dist/core/SignalEvaluator.js +326 -0
  231. package/dist/core/SignalEvaluator.js.map +1 -0
  232. package/dist/core/SignalProcessor.d.ts +152 -0
  233. package/dist/core/SignalProcessor.d.ts.map +1 -0
  234. package/dist/core/SignalProcessor.js +555 -0
  235. package/dist/core/SignalProcessor.js.map +1 -0
  236. package/dist/core/Step.d.ts +43 -32
  237. package/dist/core/Step.d.ts.map +1 -1
  238. package/dist/core/Step.js +220 -126
  239. package/dist/core/Step.js.map +1 -1
  240. package/dist/core/StreamingToolExecutor.d.ts +2 -2
  241. package/dist/core/StreamingToolExecutor.d.ts.map +1 -1
  242. package/dist/core/StreamingToolExecutor.js.map +1 -1
  243. package/dist/core/ToolManager.d.ts +44 -13
  244. package/dist/core/ToolManager.d.ts.map +1 -1
  245. package/dist/core/ToolManager.js +174 -91
  246. package/dist/core/ToolManager.js.map +1 -1
  247. package/dist/core/createAgent.d.ts +35 -0
  248. package/dist/core/createAgent.d.ts.map +1 -0
  249. package/dist/core/createAgent.js +36 -0
  250. package/dist/core/createAgent.js.map +1 -0
  251. package/dist/core/flow-namespace.d.ts +49 -0
  252. package/dist/core/flow-namespace.d.ts.map +1 -0
  253. package/dist/core/flow-namespace.js +168 -0
  254. package/dist/core/flow-namespace.js.map +1 -0
  255. package/dist/index.d.ts +11 -14
  256. package/dist/index.d.ts.map +1 -1
  257. package/dist/index.js +9 -12
  258. package/dist/index.js.map +1 -1
  259. package/dist/types/agent.d.ts +183 -54
  260. package/dist/types/agent.d.ts.map +1 -1
  261. package/dist/types/agent.js +0 -6
  262. package/dist/types/agent.js.map +1 -1
  263. package/dist/types/ai.d.ts +3 -3
  264. package/dist/types/ai.d.ts.map +1 -1
  265. package/dist/types/errors.d.ts +15 -0
  266. package/dist/types/errors.d.ts.map +1 -0
  267. package/dist/types/errors.js +18 -0
  268. package/dist/types/errors.js.map +1 -0
  269. package/dist/types/flow.d.ts +513 -0
  270. package/dist/types/flow.d.ts.map +1 -0
  271. package/dist/types/flow.js +5 -0
  272. package/dist/types/flow.js.map +1 -0
  273. package/dist/types/index.d.ts +7 -6
  274. package/dist/types/index.d.ts.map +1 -1
  275. package/dist/types/index.js +4 -1
  276. package/dist/types/index.js.map +1 -1
  277. package/dist/types/persistence.d.ts +11 -7
  278. package/dist/types/persistence.d.ts.map +1 -1
  279. package/dist/types/routing.d.ts +1 -1
  280. package/dist/types/routing.d.ts.map +1 -1
  281. package/dist/types/session.d.ts +24 -23
  282. package/dist/types/session.d.ts.map +1 -1
  283. package/dist/types/signals.d.ts +248 -0
  284. package/dist/types/signals.d.ts.map +1 -0
  285. package/dist/types/signals.js +10 -0
  286. package/dist/types/signals.js.map +1 -0
  287. package/dist/types/template.d.ts +2 -8
  288. package/dist/types/template.d.ts.map +1 -1
  289. package/dist/types/tool.d.ts +36 -29
  290. package/dist/types/tool.d.ts.map +1 -1
  291. package/dist/types/tool.js +1 -1
  292. package/dist/types/tool.js.map +1 -1
  293. package/dist/utils/condition.d.ts +7 -1
  294. package/dist/utils/condition.d.ts.map +1 -1
  295. package/dist/utils/condition.js.map +1 -1
  296. package/dist/utils/id.d.ts +13 -5
  297. package/dist/utils/id.d.ts.map +1 -1
  298. package/dist/utils/id.js +22 -9
  299. package/dist/utils/id.js.map +1 -1
  300. package/dist/utils/index.d.ts +2 -2
  301. package/dist/utils/index.d.ts.map +1 -1
  302. package/dist/utils/index.js +2 -2
  303. package/dist/utils/index.js.map +1 -1
  304. package/dist/utils/session.d.ts +44 -5
  305. package/dist/utils/session.d.ts.map +1 -1
  306. package/dist/utils/session.js +193 -37
  307. package/dist/utils/session.js.map +1 -1
  308. package/docs/README.md +15 -202
  309. package/docs/concepts/architecture.md +281 -0
  310. package/docs/concepts/directives.md +400 -0
  311. package/docs/concepts/pipeline.md +399 -0
  312. package/docs/guides/branching.md +263 -0
  313. package/docs/guides/compaction.md +163 -0
  314. package/docs/guides/conditions.md +167 -0
  315. package/docs/guides/error-handling.md +176 -0
  316. package/docs/guides/flow-control.md +409 -0
  317. package/docs/guides/instructions.md +210 -0
  318. package/docs/guides/persistence.md +182 -0
  319. package/docs/guides/streaming.md +137 -0
  320. package/docs/migration/README.md +15 -0
  321. package/docs/migration/route-to-flow.md +560 -0
  322. package/docs/migration/v1-to-v2.md +909 -0
  323. package/docs/reference/adapters.md +481 -0
  324. package/docs/reference/branches.md +241 -0
  325. package/docs/reference/create-agent.md +186 -0
  326. package/docs/reference/directive.md +243 -0
  327. package/docs/reference/errors.md +122 -0
  328. package/docs/reference/flow.md +238 -0
  329. package/docs/reference/instruction.md +177 -0
  330. package/docs/reference/pre-directive.md +131 -0
  331. package/docs/reference/providers.md +227 -0
  332. package/docs/reference/signals.md +356 -0
  333. package/docs/reference/step.md +339 -0
  334. package/docs/reference/tool.md +269 -0
  335. package/docs/start/01-install.md +81 -0
  336. package/docs/start/02-first-agent.md +196 -0
  337. package/docs/start/03-collect-data.md +222 -0
  338. package/docs/start/04-add-tools.md +276 -0
  339. package/docs/start/05-go-to-production.md +216 -0
  340. package/examples/01-quickstart.ts +20 -0
  341. package/examples/02-data-extraction.ts +90 -0
  342. package/examples/03-tools.ts +136 -0
  343. package/examples/04-instructions.ts +100 -0
  344. package/examples/05-branching.ts +140 -0
  345. package/examples/06-flow-control.ts +103 -0
  346. package/examples/07-streaming.ts +69 -0
  347. package/examples/08-persistence.ts +98 -0
  348. package/examples/09-signals.ts +144 -0
  349. package/examples/tsconfig.json +30 -0
  350. package/package.json +2 -1
  351. package/src/adapters/MemoryAdapter.ts +3 -3
  352. package/src/adapters/MongoAdapter.ts +3 -3
  353. package/src/adapters/OpenSearchAdapter.ts +10 -8
  354. package/src/adapters/PostgreSQLAdapter.ts +26 -10
  355. package/src/adapters/PrismaAdapter.ts +6 -6
  356. package/src/adapters/RedisAdapter.ts +3 -3
  357. package/src/adapters/SQLiteAdapter.ts +31 -12
  358. package/src/constants/index.ts +2 -10
  359. package/src/core/Agent.ts +585 -374
  360. package/src/core/AutoChainExecutor.ts +440 -0
  361. package/src/core/BranchEvaluator.ts +167 -0
  362. package/src/core/DirectiveBus.ts +248 -0
  363. package/src/core/DirectiveChainTracker.ts +144 -0
  364. package/src/core/Flow.ts +666 -0
  365. package/src/core/{RoutingEngine.ts → FlowRouter.ts} +385 -365
  366. package/src/core/PersistenceManager.ts +8 -8
  367. package/src/core/PromptComposer.ts +209 -140
  368. package/src/core/PromptSectionCache.ts +1 -1
  369. package/src/core/ResponseEngine.ts +61 -46
  370. package/src/core/ResponseModal.ts +1453 -1240
  371. package/src/core/ResponsePipeline.ts +655 -175
  372. package/src/core/SignalEvaluator.ts +420 -0
  373. package/src/core/SignalProcessor.ts +723 -0
  374. package/src/core/Step.ts +279 -176
  375. package/src/core/StreamingToolExecutor.ts +4 -4
  376. package/src/core/ToolManager.ts +200 -97
  377. package/src/core/createAgent.ts +40 -0
  378. package/src/core/flow-namespace.ts +219 -0
  379. package/src/index.ts +42 -36
  380. package/src/types/agent.ts +182 -53
  381. package/src/types/ai.ts +3 -3
  382. package/src/types/errors.ts +18 -0
  383. package/src/types/flow.ts +590 -0
  384. package/src/types/index.ts +43 -16
  385. package/src/types/persistence.ts +12 -8
  386. package/src/types/routing.ts +1 -1
  387. package/src/types/session.ts +26 -23
  388. package/src/types/signals.ts +321 -0
  389. package/src/types/template.ts +3 -11
  390. package/src/types/tool.ts +50 -42
  391. package/src/utils/condition.ts +13 -4
  392. package/src/utils/id.ts +27 -9
  393. package/src/utils/index.ts +6 -2
  394. package/src/utils/session.ts +238 -42
  395. package/dist/cjs/core/BatchExecutor.d.ts +0 -359
  396. package/dist/cjs/core/BatchExecutor.d.ts.map +0 -1
  397. package/dist/cjs/core/BatchExecutor.js +0 -861
  398. package/dist/cjs/core/BatchExecutor.js.map +0 -1
  399. package/dist/cjs/core/BatchPromptBuilder.d.ts +0 -89
  400. package/dist/cjs/core/BatchPromptBuilder.d.ts.map +0 -1
  401. package/dist/cjs/core/BatchPromptBuilder.js +0 -223
  402. package/dist/cjs/core/BatchPromptBuilder.js.map +0 -1
  403. package/dist/cjs/core/Route.d.ts +0 -180
  404. package/dist/cjs/core/Route.d.ts.map +0 -1
  405. package/dist/cjs/core/Route.js +0 -542
  406. package/dist/cjs/core/Route.js.map +0 -1
  407. package/dist/cjs/core/RoutingEngine.d.ts +0 -185
  408. package/dist/cjs/core/RoutingEngine.d.ts.map +0 -1
  409. package/dist/cjs/core/RoutingEngine.js.map +0 -1
  410. package/dist/cjs/types/route.d.ts +0 -336
  411. package/dist/cjs/types/route.d.ts.map +0 -1
  412. package/dist/cjs/types/route.js.map +0 -1
  413. package/dist/core/BatchExecutor.d.ts +0 -359
  414. package/dist/core/BatchExecutor.d.ts.map +0 -1
  415. package/dist/core/BatchExecutor.js +0 -856
  416. package/dist/core/BatchExecutor.js.map +0 -1
  417. package/dist/core/BatchPromptBuilder.d.ts +0 -89
  418. package/dist/core/BatchPromptBuilder.d.ts.map +0 -1
  419. package/dist/core/BatchPromptBuilder.js +0 -219
  420. package/dist/core/BatchPromptBuilder.js.map +0 -1
  421. package/dist/core/Route.d.ts +0 -180
  422. package/dist/core/Route.d.ts.map +0 -1
  423. package/dist/core/Route.js +0 -538
  424. package/dist/core/Route.js.map +0 -1
  425. package/dist/core/RoutingEngine.d.ts +0 -185
  426. package/dist/core/RoutingEngine.d.ts.map +0 -1
  427. package/dist/core/RoutingEngine.js.map +0 -1
  428. package/dist/types/route.d.ts +0 -336
  429. package/dist/types/route.d.ts.map +0 -1
  430. package/dist/types/route.js +0 -5
  431. package/dist/types/route.js.map +0 -1
  432. package/docs/CONTRIBUTING.md +0 -521
  433. package/docs/api/README.md +0 -3299
  434. package/docs/api/overview.md +0 -1410
  435. package/docs/architecture/data-extraction-flow.md +0 -360
  436. package/docs/architecture/multi-step-execution.md +0 -277
  437. package/docs/core/agent/README.md +0 -938
  438. package/docs/core/agent/context-management.md +0 -796
  439. package/docs/core/agent/rules-and-prohibitions.md +0 -113
  440. package/docs/core/agent/session-management.md +0 -693
  441. package/docs/core/ai-integration/prompt-composition.md +0 -355
  442. package/docs/core/ai-integration/providers.md +0 -515
  443. package/docs/core/ai-integration/response-processing.md +0 -433
  444. package/docs/core/conversation-flows/data-collection.md +0 -772
  445. package/docs/core/conversation-flows/route-dsl.md +0 -509
  446. package/docs/core/conversation-flows/routes.md +0 -249
  447. package/docs/core/conversation-flows/step-transitions.md +0 -731
  448. package/docs/core/conversation-flows/steps.md +0 -268
  449. package/docs/core/error-handling.md +0 -830
  450. package/docs/core/persistence/adapters.md +0 -255
  451. package/docs/core/persistence/session-storage.md +0 -656
  452. package/docs/core/routing/intelligent-routing.md +0 -470
  453. package/docs/core/tools/enhanced-tool.md +0 -186
  454. package/docs/core/tools/streaming-execution.md +0 -161
  455. package/docs/core/tools/tool-definition.md +0 -970
  456. package/docs/core/tools/tool-scoping.md +0 -819
  457. package/docs/guides/advanced-patterns/publishing.md +0 -186
  458. package/docs/guides/context-compaction.md +0 -96
  459. package/docs/guides/error-handling-patterns.md +0 -578
  460. package/docs/guides/getting-started/README.md +0 -795
  461. package/docs/guides/migration/README.md +0 -101
  462. package/docs/guides/migration/flexible-routing-conditions.md +0 -375
  463. package/docs/guides/migration/multi-step-execution.md +0 -393
  464. package/docs/guides/migration/response-modal-refactor.md +0 -518
  465. package/docs/guides/prompt-optimization.md +0 -164
  466. package/examples/advanced-patterns/context-compaction.ts +0 -223
  467. package/examples/advanced-patterns/knowledge-based-agent.ts +0 -735
  468. package/examples/advanced-patterns/persistent-onboarding.ts +0 -728
  469. package/examples/advanced-patterns/route-lifecycle-hooks.ts +0 -556
  470. package/examples/advanced-patterns/streaming-responses.ts +0 -656
  471. package/examples/ai-providers/anthropic-integration.ts +0 -388
  472. package/examples/ai-providers/openai-integration.ts +0 -228
  473. package/examples/condition-patterns/function-only-conditions.ts +0 -365
  474. package/examples/condition-patterns/mixed-array-conditions.ts +0 -477
  475. package/examples/condition-patterns/route-skipif-patterns.ts +0 -468
  476. package/examples/condition-patterns/step-skipif-patterns.ts +0 -0
  477. package/examples/condition-patterns/string-only-conditions.ts +0 -296
  478. package/examples/conversation-flows/completion-transitions.ts +0 -318
  479. package/examples/core-concepts/basic-agent.ts +0 -503
  480. package/examples/core-concepts/modern-streaming-api.ts +0 -309
  481. package/examples/core-concepts/schema-driven-extraction.ts +0 -332
  482. package/examples/core-concepts/session-management.ts +0 -494
  483. package/examples/integrations/database-integration.ts +0 -631
  484. package/examples/integrations/healthcare-integration.ts +0 -595
  485. package/examples/integrations/search-integration.ts +0 -530
  486. package/examples/integrations/server-session-management.ts +0 -307
  487. package/examples/persistence/custom-adapter.ts +0 -526
  488. package/examples/persistence/database-persistence.ts +0 -583
  489. package/examples/persistence/memory-sessions.ts +0 -495
  490. package/examples/persistence/prisma-schema.example.prisma +0 -74
  491. package/examples/persistence/redis-persistence.ts +0 -488
  492. package/examples/tools/basic-tools.ts +0 -765
  493. package/examples/tools/data-enrichment-tools.ts +0 -593
  494. package/examples/tools/enhanced-tool-metadata.ts +0 -268
  495. package/examples/tools/streaming-tool-execution.ts +0 -283
  496. package/src/core/BatchExecutor.ts +0 -1187
  497. package/src/core/BatchPromptBuilder.ts +0 -299
  498. package/src/core/Route.ts +0 -678
  499. package/src/types/route.ts +0 -392
package/src/core/Route.ts DELETED
@@ -1,678 +0,0 @@
1
- /**
2
- * Route (Journey) DSL implementation
3
- */
4
-
5
- import type {
6
- RouteOptions,
7
- RouteRef,
8
- StepOptions,
9
- StepResult,
10
- RouteTransitionConfig,
11
- RouteCompletionHandler,
12
- RouteLifecycleHooks,
13
- StructuredSchema,
14
- Guideline,
15
- GuidelineMatch,
16
- Term,
17
- Tool,
18
- Template,
19
- ConditionTemplate,
20
- TemplateContext,
21
- ConditionEvaluationResult,
22
- SessionState,
23
- Event,
24
- } from "../types";
25
-
26
- import { createConditionEvaluator, generateRouteId, logger } from "../utils";
27
-
28
- import { Step } from "./Step";
29
- import { Agent } from './Agent'
30
- import { END_ROUTE } from "../constants";
31
-
32
- /**
33
- * Represents a conversational route/journey
34
- */
35
- export class Route<TContext = unknown, TData = unknown> {
36
- public readonly id: string;
37
- public readonly title: string;
38
- public readonly description?: string;
39
- public readonly identity?: Template<TContext, TData>;
40
- public readonly personality?: Template<TContext, TData>;
41
- public readonly when?: ConditionTemplate<TContext, TData>;
42
- public readonly skipIf?: ConditionTemplate<TContext, TData>;
43
- public readonly rules: Template<TContext, TData>[];
44
- public readonly prohibitions: Template<TContext, TData>[];
45
- public readonly initialStep: Step<TContext, TData>;
46
- public readonly endStepSpec: Omit<
47
- StepOptions<TContext, TData>,
48
- "step" | "condition" | "skipIf"
49
- >;
50
- public readonly responseOutputSchema?: StructuredSchema;
51
- public readonly initialData?: Partial<TData>;
52
- public readonly requiredFields?: (keyof TData)[];
53
- public readonly optionalFields?: (keyof TData)[];
54
- public readonly onComplete?:
55
- | string
56
- | RouteTransitionConfig<TContext, TData>
57
- | RouteCompletionHandler<TContext, TData>;
58
- public readonly hooks?: RouteLifecycleHooks<TContext, TData>;
59
- public routingExtrasSchema?: StructuredSchema;
60
- public guidelines: Guideline<TContext, TData>[] = [];
61
- public terms: Term<TContext>[] = [];
62
- public tools: Tool<TContext, TData>[] = [];
63
- public knowledgeBase: Record<string, unknown> = {};
64
-
65
- // Reference to parent agent for ToolManager access
66
- private parentAgent?: Agent<TContext, TData>;
67
-
68
- constructor(options: RouteOptions<TContext, TData>, parentAgent?: Agent<TContext, TData>) {
69
- // Use provided ID or generate a deterministic one from the title
70
- this.id = options.id || generateRouteId(options.title);
71
- this.title = options.title;
72
- this.description = options.description;
73
- this.identity = options.identity;
74
- this.personality = options.personality;
75
- this.when = options.when;
76
- this.skipIf = options.skipIf;
77
- this.rules = options.rules || [];
78
- this.prohibitions = options.prohibitions || [];
79
-
80
- // Store reference to parent agent for ToolManager access
81
- this.parentAgent = parentAgent;
82
-
83
- // Handle initial step logic
84
- let initialStepOptions = options.initialStep;
85
- let stepsToChain: StepOptions<TContext, TData>[] = [];
86
-
87
- if (options.steps && options.steps.length > 0) {
88
- // If steps are provided but no initialStep, use first step as initial
89
- if (!options.initialStep) {
90
- initialStepOptions = options.steps[0];
91
- stepsToChain = options.steps.slice(1);
92
- } else {
93
- // Both initialStep and steps provided - chain steps after initial
94
- stepsToChain = options.steps;
95
- }
96
- }
97
-
98
- this.initialStep = new Step<TContext, TData>(this.id, initialStepOptions, this.parentAgent);
99
-
100
- // Store endStep spec (will be used when route completes)
101
- this.endStepSpec = options.endStep || {
102
- prompt:
103
- "Summarize what was accomplished and confirm completion based on the conversation history and collected data",
104
- };
105
- this.routingExtrasSchema = options.routingExtrasSchema;
106
- this.responseOutputSchema = options.responseOutputSchema;
107
- this.initialData = options.initialData;
108
- this.requiredFields = options.requiredFields;
109
- this.optionalFields = options.optionalFields;
110
- this.onComplete = options.onComplete;
111
- this.hooks = options.hooks;
112
-
113
- // Initialize knowledge base
114
- if (options.knowledgeBase) {
115
- this.knowledgeBase = { ...options.knowledgeBase };
116
- }
117
-
118
- // Initialize guidelines from options
119
- if (options.guidelines) {
120
- options.guidelines.forEach((guideline) => {
121
- this.createGuideline(guideline);
122
- });
123
- }
124
-
125
- // Initialize terms from options
126
- if (options.terms) {
127
- options.terms.forEach((term) => {
128
- this.createTerm(term);
129
- });
130
- }
131
-
132
- // Initialize tools from options
133
- if (options.tools) {
134
- options.tools.forEach((toolRef) => {
135
- if (typeof toolRef === 'string') {
136
- // Tool ID - try to resolve from ToolManager
137
- if (this.parentAgent?.tool) {
138
- const registeredTool = this.parentAgent.tool.find(toolRef);
139
- if (registeredTool) {
140
- this.createTool(registeredTool);
141
- } else {
142
- // Tool not found - log warning but don't fail
143
- logger.warn(`[Route] Tool ID '${toolRef}' not found in any scope for route ${this.title}`);
144
- }
145
- } else {
146
- logger.warn(`[Route] No agent available to resolve tool ID '${toolRef}' for route ${this.title}`);
147
- }
148
- } else {
149
- // Inline tool object - validate and use directly
150
- if (toolRef && toolRef.id && typeof toolRef.handler === 'function') {
151
- this.createTool(toolRef);
152
- } else {
153
- logger.warn(`[Route] Invalid inline tool object in route ${this.title}:`, toolRef);
154
- }
155
- }
156
- });
157
- }
158
-
159
- // Build sequential steps if provided
160
- if (stepsToChain.length > 0) {
161
- this.buildSequentialSteps(stepsToChain);
162
- }
163
- }
164
-
165
- /**
166
- * Build a sequential step machine from an array of steps
167
- * @private
168
- */
169
- private buildSequentialSteps(
170
- steps: Array<StepOptions<TContext, TData> | typeof END_ROUTE>
171
- ): void {
172
- let currentStepResult: StepResult<TContext, TData> = this.initialStep.asStepResult();
173
-
174
- for (const step of steps) {
175
- if (step === END_ROUTE) {
176
- currentStepResult.nextStep({ step: END_ROUTE });
177
- } else {
178
- currentStepResult = currentStepResult.nextStep(step);
179
- }
180
- }
181
- }
182
-
183
- /**
184
- * Evaluate the when condition for this route
185
- * @param templateContext - Context for condition evaluation
186
- * @returns Evaluation result with programmatic result and AI context strings
187
- */
188
- async evaluateWhen(
189
- templateContext: TemplateContext<TContext, TData>
190
- ): Promise<ConditionEvaluationResult> {
191
- if (!this.when) {
192
- return {
193
- programmaticResult: true, // No condition means always eligible
194
- aiContextStrings: [],
195
- hasProgrammaticConditions: false,
196
- };
197
- }
198
-
199
- const evaluator = createConditionEvaluator(templateContext);
200
- return await evaluator.evaluateCondition(this.when, 'AND');
201
- }
202
-
203
- /**
204
- * Evaluate the skipIf condition for this route
205
- * @param templateContext - Context for condition evaluation
206
- * @returns Evaluation result with programmatic result and AI context strings
207
- */
208
- async evaluateSkipIf(
209
- templateContext: TemplateContext<TContext, TData>
210
- ): Promise<ConditionEvaluationResult> {
211
- if (!this.skipIf) {
212
- return {
213
- programmaticResult: false, // No skipIf means never skip
214
- aiContextStrings: [],
215
- hasProgrammaticConditions: false,
216
- };
217
- }
218
-
219
- const evaluator = createConditionEvaluator(templateContext);
220
- return await evaluator.evaluateCondition(this.skipIf, 'OR');
221
- }
222
-
223
- /**
224
- * Create a guideline specific to this route
225
- */
226
- createGuideline(guideline: Guideline<TContext, TData>): this {
227
- this.guidelines.push({
228
- ...guideline,
229
- id: guideline.id || `guideline_${this.id}_${this.guidelines.length}`,
230
- enabled: guideline.enabled !== false, // Default to true
231
- });
232
- return this;
233
- }
234
-
235
- /**
236
- * Create a term for the route's domain glossary
237
- */
238
- createTerm(term: Term<TContext>): this {
239
- this.terms.push(term);
240
- return this;
241
- }
242
-
243
- /**
244
- * Register a tool for this route
245
- */
246
- createTool(tool: Tool<TContext, TData>): this {
247
- // Validate tool before adding
248
- if (!tool || !tool.id || !tool.handler) {
249
- throw new Error(`Invalid tool: must have id and handler properties`);
250
- }
251
-
252
- this.tools.push(tool);
253
- return this;
254
- }
255
-
256
- /**
257
- * Register multiple tools for this route
258
- */
259
- registerTools(tools: Tool<TContext, TData>[]): this {
260
- tools.forEach((tool) => this.createTool(tool));
261
- return this;
262
- }
263
-
264
- /**
265
- * Add a tool to this route using the ToolManager API
266
- * Creates and adds the tool to route scope in one operation
267
- */
268
- addTool(
269
- tool: Tool<TContext, TData>
270
- ): this {
271
- if (this.parentAgent && this.parentAgent.tool) {
272
- // Use ToolManager to add to route scope - no casting needed with unified interface
273
- this.parentAgent.tool.addToRoute(this, tool);
274
- } else {
275
- // Fallback: add tool directly to route tools
276
- this.createTool(tool);
277
- }
278
- return this;
279
- }
280
-
281
- /**
282
- * Get all guidelines for this route
283
- */
284
- getGuidelines(): Guideline<TContext, TData>[] {
285
- return [...this.guidelines];
286
- }
287
-
288
- /**
289
- * Evaluate and match active guidelines based on their conditions
290
- * Returns guidelines that should be active given the current context
291
- */
292
- async evaluateGuidelines(
293
- context?: TContext,
294
- session?: SessionState<TData>,
295
- history?: Event[]
296
- ): Promise<GuidelineMatch<TContext, TData>[]> {
297
- const templateContext = { context, session, history, data: session?.data };
298
- const evaluator = createConditionEvaluator(templateContext);
299
- const matches: GuidelineMatch<TContext, TData>[] = [];
300
-
301
- for (const guideline of this.guidelines) {
302
- // Skip disabled guidelines
303
- if (guideline.enabled === false) {
304
- continue;
305
- }
306
-
307
- if (guideline.condition) {
308
- const evaluation = await evaluator.evaluateCondition(guideline.condition, 'AND');
309
-
310
- // Include guideline if:
311
- // 1. No programmatic conditions (only strings) - always active
312
- // 2. Programmatic conditions evaluate to true
313
- if (!evaluation.hasProgrammaticConditions || evaluation.programmaticResult) {
314
- const rationale = evaluation.aiContextStrings.length > 0
315
- ? `Condition met: ${evaluation.aiContextStrings.join(" AND ")}`
316
- : evaluation.hasProgrammaticConditions
317
- ? "Programmatic condition evaluated to true"
318
- : "Always active (no conditions)";
319
-
320
- matches.push({
321
- guideline,
322
- rationale
323
- });
324
- }
325
- } else {
326
- // No condition means always active
327
- matches.push({
328
- guideline,
329
- rationale: "Always active (no conditions)"
330
- });
331
- }
332
- }
333
-
334
- return matches;
335
- }
336
-
337
- /**
338
- * Get all terms for this route
339
- */
340
- getTerms(): Term<TContext>[] {
341
- return [...this.terms];
342
- }
343
-
344
- /**
345
- * Get all tools for this route
346
- */
347
- getTools(): Tool<TContext, TData>[] {
348
- return [...this.tools];
349
- }
350
-
351
- /**
352
- * Get the route's knowledge base
353
- */
354
- getKnowledgeBase(): Record<string, unknown> {
355
- return { ...this.knowledgeBase };
356
- }
357
-
358
- /**
359
- * Get rules for this route
360
- */
361
- getRules(): Template<TContext, TData>[] {
362
- return [...this.rules];
363
- }
364
-
365
- /**
366
- * Get prohibitions for this route
367
- */
368
- getProhibitions(): Template<TContext, TData>[] {
369
- return [...this.prohibitions];
370
- }
371
-
372
- /**
373
- * Get optional extras schema requested during routing
374
- */
375
- getRoutingExtrasSchema(): StructuredSchema | undefined {
376
- return this.routingExtrasSchema;
377
- }
378
-
379
- /**
380
- * Get optional structured response schema for this route's message
381
- */
382
- getResponseOutputSchema(): StructuredSchema | undefined {
383
- return this.responseOutputSchema;
384
- }
385
-
386
- getSteps(): Step<TContext, TData>[] {
387
- return this.getAllSteps();
388
- }
389
-
390
- /**
391
- * Get route reference
392
- */
393
- getRef(): RouteRef {
394
- return {
395
- id: this.id,
396
- };
397
- }
398
-
399
- /**
400
- * Get all steps in this route (via traversal from initial step)
401
- */
402
- getAllSteps(): Step<TContext, TData>[] {
403
- const visited = new Set<string>();
404
- const steps: Step<TContext, TData>[] = [];
405
- const queue: Step<TContext, TData>[] = [this.initialStep];
406
-
407
- while (queue.length > 0) {
408
- const current = queue.shift()!;
409
-
410
- if (visited.has(current.id)) {
411
- continue;
412
- }
413
-
414
- visited.add(current.id);
415
- steps.push(current);
416
-
417
- // Add target steps from transitions
418
- for (const nextStep of current.getTransitions()) {
419
- if (nextStep && !visited.has(nextStep.id)) {
420
- queue.push(nextStep);
421
- }
422
- }
423
- }
424
-
425
- return steps;
426
- }
427
-
428
- /**
429
- * Get a specific step by ID
430
- * @param stepId - The step ID to find
431
- * @returns The step if found, undefined otherwise
432
- */
433
- getStep(stepId: string): Step<TContext, TData> | undefined {
434
- const steps = this.getAllSteps();
435
- return steps.find((step) => step.id === stepId);
436
- }
437
-
438
- /**
439
- * Get a description of the route structure for debugging
440
- */
441
- describe(): string {
442
- const lines: string[] = [
443
- `Route: ${this.title}`,
444
- `ID: ${this.id}`,
445
- `Description: ${this.description || "N/A"}`,
446
- `When: ${this.when ? (typeof this.when === 'string' ? this.when : Array.isArray(this.when) ? '[Array]' : '[Function]') : "None"}`,
447
- `SkipIf: ${this.skipIf ? (typeof this.skipIf === 'string' ? this.skipIf : Array.isArray(this.skipIf) ? '[Array]' : '[Function]') : "None"}`,
448
- "",
449
- "Steps:",
450
- ];
451
-
452
- const steps = this.getAllSteps();
453
- for (const step of steps) {
454
- lines.push(
455
- ` - ${step.id}${step.description ? `: ${step.description}` : ""}`
456
- );
457
-
458
- const transitions = step.getTransitions();
459
- for (const transition of transitions) {
460
- lines.push(
461
- ` -> ${transition.id}${transition.description ? `: ${transition.description}` : ""
462
- }`
463
- );
464
- }
465
- }
466
-
467
- return lines.join("\n");
468
- }
469
-
470
- /**
471
- * Handle data updates for this route, calling the onDataUpdate hook if configured
472
- * @param data - New collected data
473
- * @param previousCollected - Previously collected data
474
- * @returns Modified data after hook processing, or original data if no hook
475
- */
476
- async handleDataUpdate(
477
- data: Partial<TData>,
478
- previousCollected: Partial<TData>
479
- ): Promise<Partial<TData>> {
480
- // Call route-specific onDataUpdate hook if configured
481
- if (this.hooks?.onDataUpdate) {
482
- return await this.hooks.onDataUpdate(data, previousCollected);
483
- }
484
-
485
- // Return original data if no hook
486
- return data;
487
- }
488
-
489
- /**
490
- * Handle context updates for this route, calling the onContextUpdate hook if configured
491
- * @param newContext - New context
492
- * @param previousContext - Previous context
493
- */
494
- async handleContextUpdate(
495
- newContext: TContext,
496
- previousContext: TContext
497
- ): Promise<void> {
498
- // Call route-specific onContextUpdate hook if configured
499
- if (this.hooks?.onContextUpdate) {
500
- await this.hooks.onContextUpdate(newContext, previousContext);
501
- }
502
- }
503
-
504
- /**
505
- * Export route configuration as RouteOptions for copying/cloning
506
- * @returns RouteOptions that can be used to create a new route with identical configuration
507
- */
508
- toOptions(): RouteOptions<TContext, TData> {
509
- // Convert steps to StepOptions
510
- const steps = this.getAllSteps()
511
- .filter(step => step.id !== this.initialStep.id) // Exclude initial step
512
- .map(step => ({
513
- id: step.id,
514
- description: step.description,
515
- prompt: step.prompt,
516
- tools: step.tools,
517
- prepare: step.prepare,
518
- finalize: step.finalize,
519
- collect: step.collect,
520
- skipIf: step.skipIf,
521
- requires: step.requires,
522
- when: step.when,
523
- guidelines: step.getGuidelines(),
524
- }));
525
-
526
- return {
527
- id: this.id,
528
- title: this.title,
529
- description: this.description,
530
- identity: this.identity,
531
- personality: this.personality,
532
- when: this.when,
533
- skipIf: this.skipIf,
534
- guidelines: this.getGuidelines(),
535
- terms: this.getTerms(),
536
- tools: this.getTools(),
537
- rules: this.rules,
538
- prohibitions: this.prohibitions,
539
- routingExtrasSchema: this.routingExtrasSchema,
540
- responseOutputSchema: this.responseOutputSchema,
541
- requiredFields: this.requiredFields,
542
- optionalFields: this.optionalFields,
543
- initialData: this.initialData,
544
- steps: steps.length > 0 ? steps : undefined,
545
- initialStep: {
546
- id: this.initialStep.id,
547
- description: this.initialStep.description,
548
- prompt: this.initialStep.prompt,
549
- tools: this.initialStep.tools,
550
- prepare: this.initialStep.prepare,
551
- finalize: this.initialStep.finalize,
552
- collect: this.initialStep.collect,
553
- skipIf: this.initialStep.skipIf,
554
- requires: this.initialStep.requires,
555
- when: this.initialStep.when,
556
- guidelines: this.initialStep.getGuidelines(),
557
- },
558
- endStep: this.endStepSpec,
559
- onComplete: this.onComplete,
560
- hooks: this.hooks,
561
- knowledgeBase: this.knowledgeBase,
562
- };
563
- }
564
-
565
- /**
566
- * Check if this route is complete based on the provided data
567
- * @param data - Currently collected agent-level data
568
- * @returns true if all required fields are present, false otherwise
569
- *
570
- * Note: Routes with no requiredFields (whether they have optionalFields or not)
571
- * are never complete based on data — they can only complete via END_ROUTE.
572
- */
573
- isComplete(data: Partial<TData>): boolean {
574
- // If route has required fields, check if they're all collected
575
- if (this.requiredFields && this.requiredFields.length > 0) {
576
- return this.requiredFields.every(field => {
577
- const value = data[field];
578
- return value !== undefined && value !== null && value !== '';
579
- });
580
- }
581
-
582
- // If route has optional fields but no required fields, it's NOT complete
583
- // Optional-only routes can only complete via END_ROUTE
584
- if (this.optionalFields && this.optionalFields.length > 0) {
585
- return false;
586
- }
587
-
588
- // No required or optional fields - route doesn't complete based on data
589
- // It can only complete by reaching END_ROUTE in step flow
590
- return false;
591
- }
592
-
593
- /**
594
- * Get the list of missing required fields for this route
595
- * @param data - Currently collected agent-level data
596
- * @returns Array of missing required field keys
597
- */
598
- getMissingRequiredFields(data: Partial<TData>): (keyof TData)[] {
599
- if (!this.requiredFields || this.requiredFields.length === 0) {
600
- return [];
601
- }
602
-
603
- return this.requiredFields.filter(field => {
604
- const value = data[field];
605
- return value === undefined || value === null || value === '';
606
- });
607
- }
608
-
609
- /**
610
- * Get the completion progress for this route as a percentage
611
- * @param data - Currently collected agent-level data
612
- * @returns Completion progress as a number between 0 and 1
613
- *
614
- * Note: Must be consistent with isComplete() logic
615
- */
616
- getCompletionProgress(data: Partial<TData>): number {
617
- // If route has required fields, calculate progress
618
- if (this.requiredFields && this.requiredFields.length > 0) {
619
- const completedFields = this.requiredFields.filter(field => {
620
- const value = data[field];
621
- return value !== undefined && value !== null && value !== '';
622
- });
623
- return completedFields.length / this.requiredFields.length;
624
- }
625
-
626
- // If route has optional fields but no required fields, it's NOT complete
627
- // Optional-only routes can only complete via END_ROUTE, progress is 0
628
- if (this.optionalFields && this.optionalFields.length > 0) {
629
- return 0;
630
- }
631
-
632
- // No required or optional fields - route doesn't complete based on data
633
- // Progress is 0 (must reach END_ROUTE in step flow)
634
- return 0;
635
- }
636
-
637
- /**
638
- * Evaluate the onComplete handler and return transition config
639
- * @param session - Current session step
640
- * @param context - Agent context
641
- * @returns Transition config or undefined if no transition
642
- */
643
- async evaluateOnComplete(
644
- session: { data?: Partial<TData> },
645
- context?: TContext
646
- ): Promise<RouteTransitionConfig<TContext, TData> | undefined> {
647
- if (!this.onComplete) {
648
- return undefined;
649
- }
650
-
651
- // String form: just route ID/title
652
- if (typeof this.onComplete === "string") {
653
- return {
654
- nextStep: this.onComplete,
655
- };
656
- }
657
-
658
- // Function form: execute and normalize result
659
- if (typeof this.onComplete === "function") {
660
- const result = await this.onComplete(session, context);
661
-
662
- if (!result) {
663
- return undefined;
664
- }
665
-
666
- if (typeof result === "string") {
667
- return {
668
- nextStep: result,
669
- };
670
- }
671
-
672
- return result;
673
- }
674
-
675
- // Object form: return as-is
676
- return this.onComplete;
677
- }
678
- }