@falai/agent 1.2.8 → 2.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (522) 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/providers/AnthropicProvider.d.ts +1 -1
  126. package/dist/cjs/providers/AnthropicProvider.js +1 -1
  127. package/dist/cjs/providers/GeminiProvider.d.ts +1 -1
  128. package/dist/cjs/providers/GeminiProvider.d.ts.map +1 -1
  129. package/dist/cjs/providers/GeminiProvider.js +1 -1
  130. package/dist/cjs/providers/GeminiProvider.js.map +1 -1
  131. package/dist/cjs/providers/OpenAIProvider.d.ts +1 -1
  132. package/dist/cjs/providers/OpenAIProvider.d.ts.map +1 -1
  133. package/dist/cjs/providers/OpenAIProvider.js +1 -1
  134. package/dist/cjs/providers/OpenAIProvider.js.map +1 -1
  135. package/dist/cjs/types/agent.d.ts +183 -54
  136. package/dist/cjs/types/agent.d.ts.map +1 -1
  137. package/dist/cjs/types/agent.js +0 -6
  138. package/dist/cjs/types/agent.js.map +1 -1
  139. package/dist/cjs/types/ai.d.ts +3 -3
  140. package/dist/cjs/types/ai.d.ts.map +1 -1
  141. package/dist/cjs/types/errors.d.ts +15 -0
  142. package/dist/cjs/types/errors.d.ts.map +1 -0
  143. package/dist/cjs/types/errors.js +22 -0
  144. package/dist/cjs/types/errors.js.map +1 -0
  145. package/dist/cjs/types/flow.d.ts +513 -0
  146. package/dist/cjs/types/flow.d.ts.map +1 -0
  147. package/dist/cjs/types/{route.js → flow.js} +2 -2
  148. package/dist/cjs/types/flow.js.map +1 -0
  149. package/dist/cjs/types/index.d.ts +7 -6
  150. package/dist/cjs/types/index.d.ts.map +1 -1
  151. package/dist/cjs/types/index.js +6 -2
  152. package/dist/cjs/types/index.js.map +1 -1
  153. package/dist/cjs/types/persistence.d.ts +11 -7
  154. package/dist/cjs/types/persistence.d.ts.map +1 -1
  155. package/dist/cjs/types/routing.d.ts +1 -1
  156. package/dist/cjs/types/routing.d.ts.map +1 -1
  157. package/dist/cjs/types/session.d.ts +24 -23
  158. package/dist/cjs/types/session.d.ts.map +1 -1
  159. package/dist/cjs/types/signals.d.ts +248 -0
  160. package/dist/cjs/types/signals.d.ts.map +1 -0
  161. package/dist/cjs/types/signals.js +11 -0
  162. package/dist/cjs/types/signals.js.map +1 -0
  163. package/dist/cjs/types/template.d.ts +2 -8
  164. package/dist/cjs/types/template.d.ts.map +1 -1
  165. package/dist/cjs/types/tool.d.ts +36 -29
  166. package/dist/cjs/types/tool.d.ts.map +1 -1
  167. package/dist/cjs/types/tool.js +1 -1
  168. package/dist/cjs/types/tool.js.map +1 -1
  169. package/dist/cjs/utils/condition.d.ts +7 -1
  170. package/dist/cjs/utils/condition.d.ts.map +1 -1
  171. package/dist/cjs/utils/condition.js.map +1 -1
  172. package/dist/cjs/utils/id.d.ts +13 -5
  173. package/dist/cjs/utils/id.d.ts.map +1 -1
  174. package/dist/cjs/utils/id.js +24 -10
  175. package/dist/cjs/utils/id.js.map +1 -1
  176. package/dist/cjs/utils/index.d.ts +2 -2
  177. package/dist/cjs/utils/index.d.ts.map +1 -1
  178. package/dist/cjs/utils/index.js +7 -3
  179. package/dist/cjs/utils/index.js.map +1 -1
  180. package/dist/cjs/utils/session.d.ts +44 -5
  181. package/dist/cjs/utils/session.d.ts.map +1 -1
  182. package/dist/cjs/utils/session.js +197 -38
  183. package/dist/cjs/utils/session.js.map +1 -1
  184. package/dist/constants/index.d.ts +0 -9
  185. package/dist/constants/index.d.ts.map +1 -1
  186. package/dist/constants/index.js +3 -9
  187. package/dist/constants/index.js.map +1 -1
  188. package/dist/core/Agent.d.ts +119 -153
  189. package/dist/core/Agent.d.ts.map +1 -1
  190. package/dist/core/Agent.js +472 -325
  191. package/dist/core/Agent.js.map +1 -1
  192. package/dist/core/AutoChainExecutor.d.ts +107 -0
  193. package/dist/core/AutoChainExecutor.d.ts.map +1 -0
  194. package/dist/core/AutoChainExecutor.js +293 -0
  195. package/dist/core/AutoChainExecutor.js.map +1 -0
  196. package/dist/core/BranchEvaluator.d.ts +54 -0
  197. package/dist/core/BranchEvaluator.d.ts.map +1 -0
  198. package/dist/core/BranchEvaluator.js +126 -0
  199. package/dist/core/BranchEvaluator.js.map +1 -0
  200. package/dist/core/DirectiveBus.d.ts +88 -0
  201. package/dist/core/DirectiveBus.d.ts.map +1 -0
  202. package/dist/core/DirectiveBus.js +192 -0
  203. package/dist/core/DirectiveBus.js.map +1 -0
  204. package/dist/core/DirectiveChainTracker.d.ts +49 -0
  205. package/dist/core/DirectiveChainTracker.d.ts.map +1 -0
  206. package/dist/core/DirectiveChainTracker.js +117 -0
  207. package/dist/core/DirectiveChainTracker.js.map +1 -0
  208. package/dist/core/Flow.d.ts +186 -0
  209. package/dist/core/Flow.d.ts.map +1 -0
  210. package/dist/core/Flow.js +546 -0
  211. package/dist/core/Flow.js.map +1 -0
  212. package/dist/core/FlowRouter.d.ts +182 -0
  213. package/dist/core/FlowRouter.d.ts.map +1 -0
  214. package/dist/core/{RoutingEngine.js → FlowRouter.js} +322 -305
  215. package/dist/core/FlowRouter.js.map +1 -0
  216. package/dist/core/PersistenceManager.d.ts +2 -2
  217. package/dist/core/PersistenceManager.d.ts.map +1 -1
  218. package/dist/core/PersistenceManager.js +7 -7
  219. package/dist/core/PersistenceManager.js.map +1 -1
  220. package/dist/core/PromptComposer.d.ts +21 -8
  221. package/dist/core/PromptComposer.d.ts.map +1 -1
  222. package/dist/core/PromptComposer.js +183 -106
  223. package/dist/core/PromptComposer.js.map +1 -1
  224. package/dist/core/PromptSectionCache.d.ts +1 -1
  225. package/dist/core/PromptSectionCache.js +1 -1
  226. package/dist/core/ResponseEngine.d.ts +18 -8
  227. package/dist/core/ResponseEngine.d.ts.map +1 -1
  228. package/dist/core/ResponseEngine.js +38 -36
  229. package/dist/core/ResponseEngine.js.map +1 -1
  230. package/dist/core/ResponseModal.d.ts +73 -56
  231. package/dist/core/ResponseModal.d.ts.map +1 -1
  232. package/dist/core/ResponseModal.js +1193 -1016
  233. package/dist/core/ResponseModal.js.map +1 -1
  234. package/dist/core/ResponsePipeline.d.ts +124 -26
  235. package/dist/core/ResponsePipeline.d.ts.map +1 -1
  236. package/dist/core/ResponsePipeline.js +509 -137
  237. package/dist/core/ResponsePipeline.js.map +1 -1
  238. package/dist/core/SignalEvaluator.d.ts +86 -0
  239. package/dist/core/SignalEvaluator.d.ts.map +1 -0
  240. package/dist/core/SignalEvaluator.js +326 -0
  241. package/dist/core/SignalEvaluator.js.map +1 -0
  242. package/dist/core/SignalProcessor.d.ts +152 -0
  243. package/dist/core/SignalProcessor.d.ts.map +1 -0
  244. package/dist/core/SignalProcessor.js +555 -0
  245. package/dist/core/SignalProcessor.js.map +1 -0
  246. package/dist/core/Step.d.ts +43 -32
  247. package/dist/core/Step.d.ts.map +1 -1
  248. package/dist/core/Step.js +220 -126
  249. package/dist/core/Step.js.map +1 -1
  250. package/dist/core/StreamingToolExecutor.d.ts +2 -2
  251. package/dist/core/StreamingToolExecutor.d.ts.map +1 -1
  252. package/dist/core/StreamingToolExecutor.js.map +1 -1
  253. package/dist/core/ToolManager.d.ts +44 -13
  254. package/dist/core/ToolManager.d.ts.map +1 -1
  255. package/dist/core/ToolManager.js +174 -91
  256. package/dist/core/ToolManager.js.map +1 -1
  257. package/dist/core/createAgent.d.ts +35 -0
  258. package/dist/core/createAgent.d.ts.map +1 -0
  259. package/dist/core/createAgent.js +36 -0
  260. package/dist/core/createAgent.js.map +1 -0
  261. package/dist/core/flow-namespace.d.ts +49 -0
  262. package/dist/core/flow-namespace.d.ts.map +1 -0
  263. package/dist/core/flow-namespace.js +168 -0
  264. package/dist/core/flow-namespace.js.map +1 -0
  265. package/dist/index.d.ts +11 -14
  266. package/dist/index.d.ts.map +1 -1
  267. package/dist/index.js +9 -12
  268. package/dist/index.js.map +1 -1
  269. package/dist/providers/AnthropicProvider.d.ts +1 -1
  270. package/dist/providers/AnthropicProvider.js +1 -1
  271. package/dist/providers/GeminiProvider.d.ts +1 -1
  272. package/dist/providers/GeminiProvider.d.ts.map +1 -1
  273. package/dist/providers/GeminiProvider.js +1 -1
  274. package/dist/providers/GeminiProvider.js.map +1 -1
  275. package/dist/providers/OpenAIProvider.d.ts +1 -1
  276. package/dist/providers/OpenAIProvider.d.ts.map +1 -1
  277. package/dist/providers/OpenAIProvider.js +1 -1
  278. package/dist/providers/OpenAIProvider.js.map +1 -1
  279. package/dist/types/agent.d.ts +183 -54
  280. package/dist/types/agent.d.ts.map +1 -1
  281. package/dist/types/agent.js +0 -6
  282. package/dist/types/agent.js.map +1 -1
  283. package/dist/types/ai.d.ts +3 -3
  284. package/dist/types/ai.d.ts.map +1 -1
  285. package/dist/types/errors.d.ts +15 -0
  286. package/dist/types/errors.d.ts.map +1 -0
  287. package/dist/types/errors.js +18 -0
  288. package/dist/types/errors.js.map +1 -0
  289. package/dist/types/flow.d.ts +513 -0
  290. package/dist/types/flow.d.ts.map +1 -0
  291. package/dist/types/flow.js +5 -0
  292. package/dist/types/flow.js.map +1 -0
  293. package/dist/types/index.d.ts +7 -6
  294. package/dist/types/index.d.ts.map +1 -1
  295. package/dist/types/index.js +4 -1
  296. package/dist/types/index.js.map +1 -1
  297. package/dist/types/persistence.d.ts +11 -7
  298. package/dist/types/persistence.d.ts.map +1 -1
  299. package/dist/types/routing.d.ts +1 -1
  300. package/dist/types/routing.d.ts.map +1 -1
  301. package/dist/types/session.d.ts +24 -23
  302. package/dist/types/session.d.ts.map +1 -1
  303. package/dist/types/signals.d.ts +248 -0
  304. package/dist/types/signals.d.ts.map +1 -0
  305. package/dist/types/signals.js +10 -0
  306. package/dist/types/signals.js.map +1 -0
  307. package/dist/types/template.d.ts +2 -8
  308. package/dist/types/template.d.ts.map +1 -1
  309. package/dist/types/tool.d.ts +36 -29
  310. package/dist/types/tool.d.ts.map +1 -1
  311. package/dist/types/tool.js +1 -1
  312. package/dist/types/tool.js.map +1 -1
  313. package/dist/utils/condition.d.ts +7 -1
  314. package/dist/utils/condition.d.ts.map +1 -1
  315. package/dist/utils/condition.js.map +1 -1
  316. package/dist/utils/id.d.ts +13 -5
  317. package/dist/utils/id.d.ts.map +1 -1
  318. package/dist/utils/id.js +22 -9
  319. package/dist/utils/id.js.map +1 -1
  320. package/dist/utils/index.d.ts +2 -2
  321. package/dist/utils/index.d.ts.map +1 -1
  322. package/dist/utils/index.js +2 -2
  323. package/dist/utils/index.js.map +1 -1
  324. package/dist/utils/session.d.ts +44 -5
  325. package/dist/utils/session.d.ts.map +1 -1
  326. package/dist/utils/session.js +193 -37
  327. package/dist/utils/session.js.map +1 -1
  328. package/docs/README.md +22 -200
  329. package/docs/concepts/architecture.md +281 -0
  330. package/docs/concepts/directives.md +400 -0
  331. package/docs/concepts/pipeline.md +399 -0
  332. package/docs/guides/branching.md +263 -0
  333. package/docs/guides/compaction.md +163 -0
  334. package/docs/guides/conditions.md +167 -0
  335. package/docs/guides/error-handling.md +176 -0
  336. package/docs/guides/flow-control.md +409 -0
  337. package/docs/guides/instructions.md +210 -0
  338. package/docs/guides/persistence.md +182 -0
  339. package/docs/guides/streaming.md +137 -0
  340. package/docs/migration/README.md +14 -0
  341. package/docs/migration/route-to-flow.md +561 -0
  342. package/docs/migration/v1-to-v2.md +909 -0
  343. package/docs/reference/adapters.md +481 -0
  344. package/docs/reference/branches.md +241 -0
  345. package/docs/reference/create-agent.md +186 -0
  346. package/docs/reference/directive.md +243 -0
  347. package/docs/reference/errors.md +122 -0
  348. package/docs/reference/flow.md +238 -0
  349. package/docs/reference/instruction.md +177 -0
  350. package/docs/reference/pre-directive.md +131 -0
  351. package/docs/reference/providers.md +227 -0
  352. package/docs/reference/signals.md +356 -0
  353. package/docs/reference/step.md +339 -0
  354. package/docs/reference/tool.md +269 -0
  355. package/docs/start/01-install.md +81 -0
  356. package/docs/start/02-first-agent.md +196 -0
  357. package/docs/start/03-collect-data.md +222 -0
  358. package/docs/start/04-add-tools.md +276 -0
  359. package/docs/start/05-go-to-production.md +216 -0
  360. package/examples/01-quickstart.ts +20 -0
  361. package/examples/02-data-extraction.ts +90 -0
  362. package/examples/03-tools.ts +136 -0
  363. package/examples/04-instructions.ts +100 -0
  364. package/examples/05-branching.ts +140 -0
  365. package/examples/06-flow-control.ts +103 -0
  366. package/examples/07-streaming.ts +69 -0
  367. package/examples/08-persistence.ts +98 -0
  368. package/examples/09-signals.ts +144 -0
  369. package/examples/tsconfig.json +30 -0
  370. package/package.json +2 -1
  371. package/src/adapters/MemoryAdapter.ts +3 -3
  372. package/src/adapters/MongoAdapter.ts +3 -3
  373. package/src/adapters/OpenSearchAdapter.ts +10 -8
  374. package/src/adapters/PostgreSQLAdapter.ts +26 -10
  375. package/src/adapters/PrismaAdapter.ts +6 -6
  376. package/src/adapters/RedisAdapter.ts +3 -3
  377. package/src/adapters/SQLiteAdapter.ts +31 -12
  378. package/src/constants/index.ts +2 -10
  379. package/src/core/Agent.ts +585 -374
  380. package/src/core/AutoChainExecutor.ts +440 -0
  381. package/src/core/BranchEvaluator.ts +167 -0
  382. package/src/core/DirectiveBus.ts +248 -0
  383. package/src/core/DirectiveChainTracker.ts +144 -0
  384. package/src/core/Flow.ts +666 -0
  385. package/src/core/{RoutingEngine.ts → FlowRouter.ts} +385 -365
  386. package/src/core/PersistenceManager.ts +8 -8
  387. package/src/core/PromptComposer.ts +209 -140
  388. package/src/core/PromptSectionCache.ts +1 -1
  389. package/src/core/ResponseEngine.ts +61 -46
  390. package/src/core/ResponseModal.ts +1453 -1240
  391. package/src/core/ResponsePipeline.ts +655 -175
  392. package/src/core/SignalEvaluator.ts +420 -0
  393. package/src/core/SignalProcessor.ts +723 -0
  394. package/src/core/Step.ts +279 -176
  395. package/src/core/StreamingToolExecutor.ts +4 -4
  396. package/src/core/ToolManager.ts +200 -97
  397. package/src/core/createAgent.ts +40 -0
  398. package/src/core/flow-namespace.ts +219 -0
  399. package/src/index.ts +42 -36
  400. package/src/providers/AnthropicProvider.ts +2 -2
  401. package/src/providers/GeminiProvider.ts +2 -2
  402. package/src/providers/OpenAIProvider.ts +2 -2
  403. package/src/types/agent.ts +182 -53
  404. package/src/types/ai.ts +3 -3
  405. package/src/types/errors.ts +18 -0
  406. package/src/types/flow.ts +590 -0
  407. package/src/types/index.ts +43 -16
  408. package/src/types/persistence.ts +12 -8
  409. package/src/types/routing.ts +1 -1
  410. package/src/types/session.ts +26 -23
  411. package/src/types/signals.ts +321 -0
  412. package/src/types/template.ts +3 -11
  413. package/src/types/tool.ts +50 -42
  414. package/src/utils/condition.ts +13 -4
  415. package/src/utils/id.ts +27 -9
  416. package/src/utils/index.ts +6 -2
  417. package/src/utils/session.ts +238 -42
  418. package/dist/cjs/core/BatchExecutor.d.ts +0 -359
  419. package/dist/cjs/core/BatchExecutor.d.ts.map +0 -1
  420. package/dist/cjs/core/BatchExecutor.js +0 -861
  421. package/dist/cjs/core/BatchExecutor.js.map +0 -1
  422. package/dist/cjs/core/BatchPromptBuilder.d.ts +0 -89
  423. package/dist/cjs/core/BatchPromptBuilder.d.ts.map +0 -1
  424. package/dist/cjs/core/BatchPromptBuilder.js +0 -223
  425. package/dist/cjs/core/BatchPromptBuilder.js.map +0 -1
  426. package/dist/cjs/core/Route.d.ts +0 -180
  427. package/dist/cjs/core/Route.d.ts.map +0 -1
  428. package/dist/cjs/core/Route.js +0 -542
  429. package/dist/cjs/core/Route.js.map +0 -1
  430. package/dist/cjs/core/RoutingEngine.d.ts +0 -185
  431. package/dist/cjs/core/RoutingEngine.d.ts.map +0 -1
  432. package/dist/cjs/core/RoutingEngine.js.map +0 -1
  433. package/dist/cjs/types/route.d.ts +0 -336
  434. package/dist/cjs/types/route.d.ts.map +0 -1
  435. package/dist/cjs/types/route.js.map +0 -1
  436. package/dist/core/BatchExecutor.d.ts +0 -359
  437. package/dist/core/BatchExecutor.d.ts.map +0 -1
  438. package/dist/core/BatchExecutor.js +0 -856
  439. package/dist/core/BatchExecutor.js.map +0 -1
  440. package/dist/core/BatchPromptBuilder.d.ts +0 -89
  441. package/dist/core/BatchPromptBuilder.d.ts.map +0 -1
  442. package/dist/core/BatchPromptBuilder.js +0 -219
  443. package/dist/core/BatchPromptBuilder.js.map +0 -1
  444. package/dist/core/Route.d.ts +0 -180
  445. package/dist/core/Route.d.ts.map +0 -1
  446. package/dist/core/Route.js +0 -538
  447. package/dist/core/Route.js.map +0 -1
  448. package/dist/core/RoutingEngine.d.ts +0 -185
  449. package/dist/core/RoutingEngine.d.ts.map +0 -1
  450. package/dist/core/RoutingEngine.js.map +0 -1
  451. package/dist/types/route.d.ts +0 -336
  452. package/dist/types/route.d.ts.map +0 -1
  453. package/dist/types/route.js +0 -5
  454. package/dist/types/route.js.map +0 -1
  455. package/docs/CONTRIBUTING.md +0 -521
  456. package/docs/api/README.md +0 -3299
  457. package/docs/api/overview.md +0 -1410
  458. package/docs/architecture/data-extraction-flow.md +0 -360
  459. package/docs/architecture/multi-step-execution.md +0 -277
  460. package/docs/core/agent/README.md +0 -938
  461. package/docs/core/agent/context-management.md +0 -796
  462. package/docs/core/agent/rules-and-prohibitions.md +0 -113
  463. package/docs/core/agent/session-management.md +0 -693
  464. package/docs/core/ai-integration/prompt-composition.md +0 -355
  465. package/docs/core/ai-integration/providers.md +0 -515
  466. package/docs/core/ai-integration/response-processing.md +0 -433
  467. package/docs/core/conversation-flows/data-collection.md +0 -772
  468. package/docs/core/conversation-flows/route-dsl.md +0 -509
  469. package/docs/core/conversation-flows/routes.md +0 -249
  470. package/docs/core/conversation-flows/step-transitions.md +0 -731
  471. package/docs/core/conversation-flows/steps.md +0 -268
  472. package/docs/core/error-handling.md +0 -830
  473. package/docs/core/persistence/adapters.md +0 -255
  474. package/docs/core/persistence/session-storage.md +0 -656
  475. package/docs/core/routing/intelligent-routing.md +0 -470
  476. package/docs/core/tools/enhanced-tool.md +0 -186
  477. package/docs/core/tools/streaming-execution.md +0 -161
  478. package/docs/core/tools/tool-definition.md +0 -970
  479. package/docs/core/tools/tool-scoping.md +0 -819
  480. package/docs/guides/advanced-patterns/publishing.md +0 -186
  481. package/docs/guides/context-compaction.md +0 -96
  482. package/docs/guides/error-handling-patterns.md +0 -578
  483. package/docs/guides/getting-started/README.md +0 -795
  484. package/docs/guides/migration/README.md +0 -101
  485. package/docs/guides/migration/flexible-routing-conditions.md +0 -375
  486. package/docs/guides/migration/multi-step-execution.md +0 -393
  487. package/docs/guides/migration/response-modal-refactor.md +0 -518
  488. package/docs/guides/prompt-optimization.md +0 -164
  489. package/examples/advanced-patterns/context-compaction.ts +0 -223
  490. package/examples/advanced-patterns/knowledge-based-agent.ts +0 -735
  491. package/examples/advanced-patterns/persistent-onboarding.ts +0 -728
  492. package/examples/advanced-patterns/route-lifecycle-hooks.ts +0 -556
  493. package/examples/advanced-patterns/streaming-responses.ts +0 -656
  494. package/examples/ai-providers/anthropic-integration.ts +0 -388
  495. package/examples/ai-providers/openai-integration.ts +0 -228
  496. package/examples/condition-patterns/function-only-conditions.ts +0 -365
  497. package/examples/condition-patterns/mixed-array-conditions.ts +0 -477
  498. package/examples/condition-patterns/route-skipif-patterns.ts +0 -468
  499. package/examples/condition-patterns/step-skipif-patterns.ts +0 -0
  500. package/examples/condition-patterns/string-only-conditions.ts +0 -296
  501. package/examples/conversation-flows/completion-transitions.ts +0 -318
  502. package/examples/core-concepts/basic-agent.ts +0 -503
  503. package/examples/core-concepts/modern-streaming-api.ts +0 -309
  504. package/examples/core-concepts/schema-driven-extraction.ts +0 -332
  505. package/examples/core-concepts/session-management.ts +0 -494
  506. package/examples/integrations/database-integration.ts +0 -631
  507. package/examples/integrations/healthcare-integration.ts +0 -595
  508. package/examples/integrations/search-integration.ts +0 -530
  509. package/examples/integrations/server-session-management.ts +0 -307
  510. package/examples/persistence/custom-adapter.ts +0 -526
  511. package/examples/persistence/database-persistence.ts +0 -583
  512. package/examples/persistence/memory-sessions.ts +0 -495
  513. package/examples/persistence/prisma-schema.example.prisma +0 -74
  514. package/examples/persistence/redis-persistence.ts +0 -488
  515. package/examples/tools/basic-tools.ts +0 -765
  516. package/examples/tools/data-enrichment-tools.ts +0 -593
  517. package/examples/tools/enhanced-tool-metadata.ts +0 -268
  518. package/examples/tools/streaming-tool-execution.ts +0 -283
  519. package/src/core/BatchExecutor.ts +0 -1187
  520. package/src/core/BatchPromptBuilder.ts +0 -299
  521. package/src/core/Route.ts +0 -678
  522. package/src/types/route.ts +0 -392
@@ -19,7 +19,7 @@ export interface SessionData<TData = Record<string, unknown>> {
19
19
  userId?: string;
20
20
  agentName?: string;
21
21
  status: SessionStatus;
22
- currentRoute?: string;
22
+ currentFlow?: string;
23
23
  currentStep?: string;
24
24
  collectedData?: CollectedStateData<TData>;
25
25
  messageCount?: number;
@@ -45,11 +45,15 @@ export type CreateSessionData<TData = Record<string, unknown>> = Omit<
45
45
  */
46
46
  export interface CollectedStateData<TData = Record<string, unknown>> {
47
47
  data: Partial<TData>;
48
- routeHistory: SessionState<TData>["routeHistory"];
48
+ flowHistory: SessionState<TData>["flowHistory"];
49
49
  history?: SessionState<TData>["history"];
50
- currentRouteTitle?: string;
50
+ currentFlowTitle?: string;
51
51
  currentStepDescription?: string;
52
52
  metadata: SessionState<TData>["metadata"];
53
+ /** Pending directive — included only when a directive is actually present. */
54
+ pendingDirective?: SessionState<TData>["pendingDirective"];
55
+ /** Reserved for v2.x Signals. Passed through bit-identical. */
56
+ signals?: SessionState<TData>["signals"];
53
57
  }
54
58
 
55
59
  /**
@@ -61,7 +65,7 @@ export interface MessageData {
61
65
  userId?: string;
62
66
  role: MessageRole;
63
67
  content: string;
64
- route?: string;
68
+ flow?: string;
65
69
  step?: string;
66
70
  toolCalls?: Array<{ toolName: string; arguments: Record<string, unknown> }>;
67
71
  event?: Event; // Optional: store full event data
@@ -119,11 +123,11 @@ export interface SessionRepository<TData = Record<string, unknown>> {
119
123
  ): Promise<SessionData<TData> | null>;
120
124
 
121
125
  /**
122
- * Update current route and step
126
+ * Update current flow and step
123
127
  */
124
- updateRouteStep(
128
+ updateFlowStep(
125
129
  id: string,
126
- route?: string,
130
+ flow?: string,
127
131
  step?: string
128
132
  ): Promise<SessionData<TData> | null>;
129
133
 
@@ -244,7 +248,7 @@ export interface SaveMessageOptions {
244
248
  userId?: string;
245
249
  role: MessageRole;
246
250
  content: string;
247
- route?: string;
251
+ flow?: string;
248
252
  step?: string;
249
253
  toolCalls?: Array<{ toolName: string; arguments: Record<string, unknown> }>;
250
254
  event?: Event;
@@ -2,7 +2,7 @@ import type { StructuredSchema } from "./schema";
2
2
 
3
3
  export interface RoutingDecision {
4
4
  context: string;
5
- routes: Record<string, number>;
5
+ flows: Record<string, number>;
6
6
  responseDirectives?: string[];
7
7
  extractions?: unknown;
8
8
  contextUpdate?: Record<string, unknown>;
@@ -3,35 +3,28 @@
3
3
  */
4
4
 
5
5
  import type { History } from "./history";
6
+ import type { Directive } from "./flow";
7
+ import type { SignalsState } from "./signals";
6
8
 
7
- /**
8
- * Pending route transition information
9
- */
10
- export interface PendingTransition {
11
- /** Target route ID to transition to */
12
- targetRouteId: string;
13
- /** Optional AI-evaluated condition for the transition */
14
- condition?: string;
15
- /** Reason for the transition */
16
- reason: "route_complete" | "manual";
17
- }
9
+ // Re-export for backward compatibility — canonical declarations live in ./signals.ts
10
+ export type { SignalsState, SignalTriggerState } from "./signals";
18
11
 
19
12
  /**
20
13
  * Session state tracks the current position in the conversation flow
21
- * and data collected at the agent level across all routes
14
+ * and data collected at the agent level across all flows
22
15
  */
23
16
  export interface SessionState<TData = unknown> {
24
17
  /** Unique session identifier (useful for persistence) */
25
18
  id: string;
26
19
 
27
- /** Current route the conversation is in */
28
- currentRoute?: {
20
+ /** Current flow the conversation is in */
21
+ currentFlow?: {
29
22
  id: string;
30
23
  title: string;
31
24
  enteredAt?: Date;
32
25
  };
33
26
 
34
- /** Current step within the route */
27
+ /** Current step within the flow */
35
28
  currentStep?: {
36
29
  id: string;
37
30
  description?: string;
@@ -39,25 +32,35 @@ export interface SessionState<TData = unknown> {
39
32
  };
40
33
 
41
34
  /**
42
- * Agent-level data collected across all routes
35
+ * Agent-level data collected across all flows
43
36
  * This is the single source of truth for all collected data
44
- * Routes can access and contribute to this shared data structure
37
+ * Flows can access and contribute to this shared data structure
45
38
  */
46
39
  data: Partial<TData>;
47
40
 
48
- /** History of routes visited in this session */
49
- routeHistory?: Array<{
50
- routeId: string;
41
+ /** History of flows visited in this session */
42
+ flowHistory?: Array<{
43
+ flowId: string;
51
44
  enteredAt?: Date;
52
45
  exitedAt?: Date;
53
46
  completed: boolean;
54
47
  }>;
55
48
 
56
49
  /**
57
- * Pending route transition after completion
58
- * Set when a route completes with onComplete handler
50
+ * Pending directive to apply at the start of the next turn.
51
+ * Replaces the v1 `pendingTransition` field. When set, the turn pipeline
52
+ * applies this directive and skips `FlowRouter.decideFlowAndStep`.
53
+ *
54
+ * Cleared after application unless `complete.next` chains another directive.
55
+ */
56
+ pendingDirective?: Directive<unknown, TData>;
57
+
58
+ /**
59
+ * Reserved for v2.x Signals feature. v2.0 does not read or mutate this
60
+ * field at runtime — persistence adapters preserve it bit-identical through
61
+ * save → load roundtrips. See Decision D-Q6 in design.md.
59
62
  */
60
- pendingTransition?: PendingTransition;
63
+ signals?: SignalsState;
61
64
 
62
65
  /**
63
66
  * Conversation history managed by the session
@@ -0,0 +1,321 @@
1
+ /**
2
+ * Signals types for v2.x.
3
+ *
4
+ * This is the canonical location for all signals-related types.
5
+ * `SignalsState` and `SignalTriggerState` originated in `session.ts` as v2.0
6
+ * forward-compat reservations and are re-exported from there for backward
7
+ * compatibility within the same major.
8
+ */
9
+
10
+ import type { SessionState } from "./session";
11
+ import type { PreDirective } from "./flow";
12
+ import type { Event } from "./history";
13
+
14
+ // ──────────────────────────────────────────────────────────────────────────────
15
+ // Persistence types (shape locked in v2.0 — DO NOT modify)
16
+ // ──────────────────────────────────────────────────────────────────────────────
17
+
18
+ /**
19
+ * Per-signal trigger tracking state.
20
+ * Shape is locked to enable forward-compatible persistence in v2.0.
21
+ */
22
+ export interface SignalTriggerState {
23
+ /** When this signal first fired. */
24
+ firstTriggeredAt: Date;
25
+ /** When this signal last fired. */
26
+ lastTriggeredAt: Date;
27
+ /** Total number of times this signal has fired. */
28
+ count: number;
29
+ /** Free-text reason from the last trigger (if the signal supplied one). */
30
+ lastReason?: string;
31
+ /** Which phase the signal last fired in. */
32
+ lastPhase?: 'pre' | 'post';
33
+ }
34
+
35
+ /**
36
+ * Aggregated signals state stored on the session.
37
+ * Shape is locked to enable forward-compatible persistence in v2.0.
38
+ */
39
+ export interface SignalsState {
40
+ /** Per-signal trigger tracking; keyed by signal id. */
41
+ triggers: Record<string, SignalTriggerState>;
42
+ }
43
+
44
+ // ──────────────────────────────────────────────────────────────────────────────
45
+ // Schema types
46
+ // ──────────────────────────────────────────────────────────────────────────────
47
+
48
+ /**
49
+ * Schema for extraction signals. JSON Schema subset or Zod-compatible shape.
50
+ * The framework uses this to build the per-signal `extracted` field in the
51
+ * classifier response schema.
52
+ *
53
+ * When set on a signal, the signal operates in extraction mode: the classifier
54
+ * call includes this schema in the response format, and the handler receives
55
+ * `extracted: TExtract` when the signal matches.
56
+ *
57
+ * The type parameter `_T` is a phantom type that carries the extraction shape
58
+ * for downstream inference — the runtime value is always a JSON Schema object.
59
+ */
60
+ // eslint-disable-next-line @typescript-eslint/no-unused-vars
61
+ export type SignalSchema<_T = unknown> = Record<string, unknown>;
62
+
63
+ // ──────────────────────────────────────────────────────────────────────────────
64
+ // Predicate types
65
+ // ──────────────────────────────────────────────────────────────────────────────
66
+
67
+ /**
68
+ * Context passed to signal `if` predicates.
69
+ * Symmetric with `BranchPredicateContext` used by branches.
70
+ */
71
+ export interface SignalPredicateContext<TContext = unknown, TData = unknown> {
72
+ /** Collected data (partial — null-check fields not guaranteed). */
73
+ data: Partial<TData>;
74
+ /** Agent-level context. */
75
+ context: TContext;
76
+ /** Full session state. */
77
+ session: SessionState<TData>;
78
+ /** Conversation history as events. */
79
+ history: Event[];
80
+ }
81
+
82
+ /**
83
+ * Code-evaluated predicate for signal `if` conditions.
84
+ * Returns `true` to pass (signal proceeds to `when` evaluation or fires),
85
+ * `false` to skip (signal is not evaluated this turn).
86
+ *
87
+ * Predicates evaluate BEFORE `when` conditions — code-first short-circuit.
88
+ * If `if` returns false, `when` is NOT evaluated (token-saving).
89
+ *
90
+ * If a predicate throws, the signal is treated as non-match and other
91
+ * signals continue evaluation.
92
+ */
93
+ export type SignalPredicate<TContext = unknown, TData = unknown> = (
94
+ ctx: SignalPredicateContext<TContext, TData>,
95
+ ) => boolean | Promise<boolean>;
96
+
97
+ // ──────────────────────────────────────────────────────────────────────────────
98
+ // Signal directive
99
+ // ──────────────────────────────────────────────────────────────────────────────
100
+
101
+ /**
102
+ * SignalDirective — what signal handlers return.
103
+ * Extends `PreDirective` (which extends `Directive`). Adds signal-specific
104
+ * fields: `stopOtherSignals` and `replyWith`.
105
+ *
106
+ * All position-control (`goTo`, `goToStep`, `complete`, `abort`, `reset`),
107
+ * state writes (`dataUpdate`, `contextUpdate`), prompt augmentation
108
+ * (`appendPrompt`, `injectTools`), `reply`, and `halt` are inherited unchanged.
109
+ *
110
+ * Post-phase drop rules: when returned in the post-phase, `appendPrompt`,
111
+ * `injectTools`, and `halt` are dropped with a debug warning — they have
112
+ * no meaning after the LLM call has already completed.
113
+ */
114
+ export interface SignalDirective<TContext = unknown, TData = unknown>
115
+ extends PreDirective<TContext, TData> {
116
+ /**
117
+ * Stop processing remaining signals for this phase after this handler.
118
+ * Does not affect the other phase.
119
+ */
120
+ stopOtherSignals?: boolean;
121
+
122
+ /**
123
+ * Verbatim reply with optional late-binding (function form).
124
+ * - String: same as `Directive.reply`.
125
+ * - Function: evaluated at emit time; result projects onto `Directive.reply`.
126
+ *
127
+ * The field is resolved and stripped before reaching the directive merge bus.
128
+ */
129
+ replyWith?: string | ((ctx: SignalContext<TContext, TData>) => string);
130
+ }
131
+
132
+ // ──────────────────────────────────────────────────────────────────────────────
133
+ // Signal context (handler argument)
134
+ // ──────────────────────────────────────────────────────────────────────────────
135
+
136
+ /**
137
+ * Context passed to signal handlers when a signal fires.
138
+ * Symmetric with `ToolContext` — provides session state and writer methods.
139
+ *
140
+ * The `updateContext` and `updateData` writers follow the same D-Q12 contract
141
+ * as `ToolContext` writers.
142
+ */
143
+ export interface SignalContext<
144
+ TContext = unknown,
145
+ TData = unknown,
146
+ TExtract = void,
147
+ > {
148
+ /** The signal definition that fired. */
149
+ signal: Signal<TContext, TData, TExtract>;
150
+
151
+ /** Phase in which this signal fired. */
152
+ phase: 'pre' | 'post';
153
+
154
+ /** Whether the signal matched (always `true` when handler runs). */
155
+ matched: true;
156
+
157
+ /** AI rationale when `when` matched, or `'code-only'` / `'unconditional'`. */
158
+ reason: string;
159
+
160
+ /**
161
+ * Extracted data when the signal has `extract` set. Typed via the
162
+ * TExtract generic. Undefined for detection-only signals.
163
+ */
164
+ extracted: TExtract extends void ? undefined : TExtract;
165
+
166
+ /** Session state. Use writers below for mutations. */
167
+ session: SessionState<TData>;
168
+ /** Agent-level context. */
169
+ context: TContext;
170
+ /** Collected data (partial). */
171
+ data: Partial<TData>;
172
+ /** Conversation history as events. */
173
+ history: Event[];
174
+
175
+ /** Last user message (convenience). */
176
+ lastUserMessage?: string;
177
+
178
+ /** Timestamp when the signal fired. */
179
+ triggeredAt: Date;
180
+
181
+ /** Update agent context (same signature as ToolContext.updateContext). */
182
+ updateContext: (updates: Partial<TContext>) => Promise<void>;
183
+ /** Update collected data (same signature as ToolContext.updateData). */
184
+ updateData: (updates: Partial<TData>) => Promise<void>;
185
+
186
+ /** Imperative directive emission onto the per-turn bus. */
187
+ dispatch(directive: SignalDirective<TContext, TData>): void;
188
+ }
189
+
190
+ // ──────────────────────────────────────────────────────────────────────────────
191
+ // Signal definition
192
+ // ──────────────────────────────────────────────────────────────────────────────
193
+
194
+ /**
195
+ * A signal: a typed event detector (and optional data extractor) that runs
196
+ * around an LLM turn.
197
+ *
198
+ * Conditions use the v2 `when` / `if` split:
199
+ * - `when`: AI-evaluated string(s). Entries prefixed with `!` are exclusion
200
+ * conditions rendered under "DO NOT TRIGGER WHEN" in the classifier prompt.
201
+ * Non-prefixed entries render under "TRIGGER WHEN". Positive entries use AND
202
+ * semantics (all must match). Negative entries use OR semantics (any match
203
+ * inhibits firing).
204
+ * - `if`: Code-evaluated function(s). Free. AND semantics.
205
+ *
206
+ * When both `if` and `when` are set, `if` evaluates first. If `if` returns
207
+ * false, `when` is not evaluated (token-saving).
208
+ *
209
+ * Signals with neither `when` nor `if` are unconditional — they always fire
210
+ * (subject to behavior gating). If `extract` is set on an unconditional signal,
211
+ * the extraction runs every turn.
212
+ */
213
+ export interface Signal<
214
+ TContext = unknown,
215
+ TData = unknown,
216
+ TExtract = void,
217
+ > {
218
+ /** Unique identifier. Auto-generated if omitted (stable within session). */
219
+ id?: string;
220
+
221
+ /** Display title (shown in logs and traces). */
222
+ title?: string;
223
+
224
+ /** Free-text description of what this signal detects. */
225
+ description?: string;
226
+
227
+ /**
228
+ * AI-evaluated trigger condition(s). String or array of strings.
229
+ * - Non-prefixed entries: AND semantics. All must match to trigger.
230
+ * - `!`-prefixed entries: OR exclusion. Any match inhibits firing.
231
+ *
232
+ * At prompt-render time, the framework splits entries by prefix:
233
+ * - Non-`!` → rendered under "TRIGGER WHEN"
234
+ * - `!` → stripped of prefix, rendered under "DO NOT TRIGGER WHEN"
235
+ */
236
+ when?: string | string[];
237
+
238
+ /**
239
+ * Code predicate(s). Function or array of functions (AND).
240
+ * Free to evaluate; runs before `when`. If `if` returns false, the
241
+ * signal is skipped — `when` is not evaluated.
242
+ */
243
+ if?: SignalPredicate<TContext, TData> | SignalPredicate<TContext, TData>[];
244
+
245
+ /**
246
+ * Optional structured extraction schema. When set, the signal operates
247
+ * in extraction mode: the classifier call includes this schema in the
248
+ * response format, and the handler receives `extracted: TExtract` when
249
+ * the signal matches.
250
+ *
251
+ * Extraction signals participate in the same batched classifier call as
252
+ * detection signals. The merged response schema includes each signal's
253
+ * extraction fields alongside the standard `matched` / `reason`.
254
+ *
255
+ * When absent, the signal operates in detection mode (boolean match).
256
+ */
257
+ extract?: SignalSchema<TExtract>;
258
+
259
+ /**
260
+ * When this signal evaluates relative to the LLM call.
261
+ * - `'pre'`: before the LLM call (parallel with routing).
262
+ * - `'post'`: after the LLM call (sequential, after finalize).
263
+ * - `'both'`: evaluated in both phases.
264
+ */
265
+ phase: 'pre' | 'post' | 'both';
266
+
267
+ /**
268
+ * Handler invoked when the signal fires. Receives match info and
269
+ * extracted data (if applicable). Returns void or a SignalDirective.
270
+ */
271
+ handler: (ctx: SignalContext<TContext, TData, TExtract>)
272
+ => void
273
+ | SignalDirective<TContext, TData>
274
+ | Promise<void | SignalDirective<TContext, TData>>;
275
+
276
+ /**
277
+ * Rate-limit / dedup behavior:
278
+ * - `'once'`: fire once per session.
279
+ * - `'always'`: fire every match (default).
280
+ * - `'cooldown'`: fire, then suppress for `cooldownMs`.
281
+ */
282
+ behavior?: 'once' | 'always' | 'cooldown';
283
+
284
+ /** Cooldown duration in ms. Required when `behavior === 'cooldown'`. */
285
+ cooldownMs?: number;
286
+
287
+ /** Whether this signal is currently enabled. @default true */
288
+ enabled?: boolean;
289
+
290
+ /**
291
+ * Higher priority signals fire first within a phase. Default 0.
292
+ * Tie: declaration order in `agent.signals`.
293
+ */
294
+ priority?: number;
295
+ }
296
+
297
+ // ──────────────────────────────────────────────────────────────────────────────
298
+ // Observability types
299
+ // ──────────────────────────────────────────────────────────────────────────────
300
+
301
+ /**
302
+ * Observability record for a signal that fired during a turn.
303
+ * Populated in fire order across both pre- and post-phases.
304
+ * Mirrors the observability framing of `executedSteps` and `appliedGuidelines`.
305
+ */
306
+ export interface SignalFiring<TContext = unknown, TData = unknown> {
307
+ /** The signal's unique identifier. */
308
+ id: string;
309
+ /** Which phase the signal fired in. */
310
+ phase: 'pre' | 'post';
311
+ /** AI rationale when `when` matched, or 'code-only' / 'unconditional'. */
312
+ reason?: string;
313
+ /** Extracted data when the signal operates in extraction mode. */
314
+ extracted?: unknown;
315
+ /** The directive returned by the signal handler (if any). */
316
+ directive?: SignalDirective<TContext, TData>;
317
+ /** Error message if the handler threw. */
318
+ handlerError?: string;
319
+ /** Wall-clock duration of the handler invocation in milliseconds. */
320
+ durationMs?: number;
321
+ }
@@ -21,7 +21,7 @@ export interface TemplateContext<TContext = unknown, TData = unknown> {
21
21
  history?: Event[];
22
22
 
23
23
  /**
24
- * The data collected in the current route.
24
+ * The data collected in the current flow.
25
25
  * A convenience alias for `session.data`.
26
26
  */
27
27
  data: Partial<TData>;
@@ -29,7 +29,7 @@ export interface TemplateContext<TContext = unknown, TData = unknown> {
29
29
  /**
30
30
  * Helper methods for working with history and context.
31
31
  */
32
- helpers: {
32
+ helpers?: {
33
33
  /**
34
34
  * Get the last message from history, optionally filtered by role.
35
35
  * @param role - Optional role to filter by (user, assistant, etc.)
@@ -74,15 +74,7 @@ export type Template<TContext = unknown, TData = unknown> =
74
74
  | string
75
75
  | ((params: TemplateContext<TContext, TData>) => string | Promise<string>);
76
76
 
77
- /**
78
- * Represents a condition that can be used for routing decisions.
79
- * Supports strings (AI context only), boolean functions (programmatic evaluation),
80
- * and arrays of either for complex condition logic.
81
- */
82
- export type ConditionTemplate<TContext = unknown, TData = unknown> =
83
- | string // AI context only - not evaluated programmatically
84
- | ((params: TemplateContext<TContext, TData>) => boolean | Promise<boolean>) // Programmatic evaluation
85
- | ConditionTemplate<TContext, TData>[]; // Array of either
77
+
86
78
 
87
79
  /**
88
80
  * Result of condition evaluation containing both programmatic results
package/src/types/tool.ts CHANGED
@@ -4,6 +4,7 @@
4
4
  */
5
5
 
6
6
  import type { Event, StepRef, ValidationResult } from "./index";
7
+ import type { Directive } from "./flow";
7
8
 
8
9
  /**
9
10
  * Context provided to tool handlers
@@ -15,7 +16,7 @@ export interface ToolContext<TContext = any, TData = any> {
15
16
  data: Partial<TData>;
16
17
  /** Interaction history */
17
18
  history: Event[];
18
- /** Current step reference (if in a route) */
19
+ /** Current step reference (if in a flow) */
19
20
  step?: StepRef;
20
21
  /** Additional metadata */
21
22
  metadata?: Record<string, unknown>;
@@ -30,6 +31,16 @@ export interface ToolContext<TContext = any, TData = any> {
30
31
  setField<K extends keyof TData>(key: K, value: TData[K]): Promise<void>;
31
32
  /** Check if a field exists in collected data */
32
33
  hasField<K extends keyof TData>(key: K): boolean;
34
+
35
+ /**
36
+ * Emit a directive into the per-turn bus. Identical effect to returning
37
+ * `{ directive }` from the tool handler, but usable mid-handler (e.g.,
38
+ * after an early-exit branch decides the rest of the turn is moot).
39
+ *
40
+ * Multiple `dispatch()` calls in one handler are allowed; they are merged
41
+ * by Algorithm 4 along with directives from other tools/hooks this turn.
42
+ */
43
+ dispatch(directive: Directive<TContext, TData>): void;
33
44
  }
34
45
 
35
46
  /**
@@ -52,6 +63,8 @@ export interface ToolResult<
52
63
  error?: string;
53
64
  /** Optional metadata about the execution */
54
65
  meta?: Record<string, unknown>;
66
+ /** Emit a directive declaratively (alternative to ctx.dispatch). */
67
+ directive?: Directive<TContext, TData>;
55
68
  }
56
69
 
57
70
  /**
@@ -70,7 +83,11 @@ export type ToolHandler<
70
83
  | ToolResult<TResult, TContext, TData>;
71
84
 
72
85
  /**
73
- * Tool definition - plain object interface
86
+ * Tool definition - single unified type (v2).
87
+ *
88
+ * In v1 there were two tool types: `Tool` (basic) and `EnhancedTool`
89
+ * (with metadata). v2 merges these into a single `Tool` type with all
90
+ * metadata fields optional. `EnhancedTool` is removed from the public surface.
74
91
  */
75
92
  export interface Tool<
76
93
  TContext = any,
@@ -79,14 +96,38 @@ export interface Tool<
79
96
  > {
80
97
  /** Tool identifier */
81
98
  id: string;
82
- /** Tool display name (shown to AI models) */
83
- name?: string;
84
99
  /** Tool handler function */
85
100
  handler: ToolHandler<TContext, TData, TResult>;
86
101
  /** Description of what the tool does (for AI discovery) */
87
102
  description?: string;
88
103
  /** Parameter schema or description */
89
104
  parameters?: unknown;
105
+
106
+ // ── Optional metadata (merged from EnhancedTool in v2) ──
107
+
108
+ /** Whether this tool is safe to run concurrently with other concurrent-safe tools */
109
+ isConcurrencySafe?(input?: Record<string, unknown>): boolean;
110
+ /** Whether this tool only reads data without side effects */
111
+ isReadOnly?(input?: Record<string, unknown>): boolean;
112
+ /** Whether this tool performs destructive/irreversible operations */
113
+ isDestructive?(input?: Record<string, unknown>): boolean;
114
+
115
+ /** How the tool responds to abort signals: 'cancel' = immediate abort, 'block' = allow completion */
116
+ interruptBehavior?(): 'cancel' | 'block';
117
+ /** Maximum characters for the tool result before truncation */
118
+ maxResultSizeChars?: number;
119
+
120
+ /** Validate input before execution */
121
+ validateInput?(
122
+ input: Record<string, unknown>,
123
+ context: ToolContext<TContext, TData>
124
+ ): Promise<ToolValidationResult> | ToolValidationResult;
125
+
126
+ /** Check permissions before execution — when denied, handler is NOT invoked */
127
+ checkPermissions?(
128
+ input: Record<string, unknown>,
129
+ context: ToolContext<TContext, TData>
130
+ ): Promise<ToolPermissionResult> | ToolPermissionResult;
90
131
  }
91
132
 
92
133
 
@@ -101,6 +142,8 @@ export interface ToolExecutionResult {
101
142
  contextUpdate?: Record<string, unknown>;
102
143
  dataUpdate?: Record<string, unknown>;
103
144
  metadata?: Record<string, unknown>;
145
+ /** Directives collected during tool execution (from ctx.dispatch and/or result.directive). */
146
+ directives?: Directive[];
104
147
  }
105
148
 
106
149
  /**
@@ -108,7 +151,7 @@ export interface ToolExecutionResult {
108
151
  */
109
152
  export enum ToolScope {
110
153
  AGENT = 'agent',
111
- ROUTE = 'route',
154
+ FLOW = 'flow',
112
155
  STEP = 'step',
113
156
  REGISTERED = 'registered',
114
157
  ALL = 'all'
@@ -116,7 +159,7 @@ export enum ToolScope {
116
159
 
117
160
 
118
161
 
119
- // --- EnhancedTool and supporting types ---
162
+ // --- EnhancedTool (deprecated internal alias — use Tool directly) ---
120
163
 
121
164
  /**
122
165
  * Result of input validation on a tool call
@@ -177,7 +220,7 @@ export type ToolStatus = 'queued' | 'executing' | 'completed' | 'yielded';
177
220
  export interface TrackedTool<TContext = unknown, TData = unknown> {
178
221
  id: string;
179
222
  toolCall: ToolCallRequest;
180
- tool: EnhancedTool<TContext, TData>;
223
+ tool: Tool<TContext, TData>;
181
224
  status: ToolStatus;
182
225
  isConcurrencySafe: boolean;
183
226
  promise?: Promise<void>;
@@ -185,42 +228,7 @@ export interface TrackedTool<TContext = unknown, TData = unknown> {
185
228
  pendingProgress: string[];
186
229
  }
187
230
 
188
- /**
189
- * Extended tool interface with rich metadata for concurrency control,
190
- * permission gating, input validation, and result size management.
191
- *
192
- * All additional methods/properties are optional — plain `Tool` objects
193
- * remain fully compatible.
194
- */
195
- export interface EnhancedTool<
196
- TContext = any,
197
- TData = any,
198
- TResult = any
199
- > extends Tool<TContext, TData, TResult> {
200
- /** Whether this tool is safe to run concurrently with other concurrent-safe tools */
201
- isConcurrencySafe?(input?: Record<string, unknown>): boolean;
202
- /** Whether this tool only reads data without side effects */
203
- isReadOnly?(input?: Record<string, unknown>): boolean;
204
- /** Whether this tool performs destructive/irreversible operations */
205
- isDestructive?(input?: Record<string, unknown>): boolean;
206
231
 
207
- /** How the tool responds to abort signals: 'cancel' = immediate abort, 'block' = allow completion */
208
- interruptBehavior?(): 'cancel' | 'block';
209
- /** Maximum characters for the tool result before truncation */
210
- maxResultSizeChars?: number;
211
-
212
- /** Validate input before execution */
213
- validateInput?(
214
- input: Record<string, unknown>,
215
- context: ToolContext<TContext, TData>
216
- ): Promise<ToolValidationResult> | ToolValidationResult;
217
-
218
- /** Check permissions before execution */
219
- checkPermissions?(
220
- input: Record<string, unknown>,
221
- context: ToolContext<TContext, TData>
222
- ): Promise<ToolPermissionResult> | ToolPermissionResult;
223
- }
224
232
 
225
233
  // --- Existing tool configuration types ---
226
234