@falai/agent 3.4.5 → 4.0.0-alpha.2

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 (856) hide show
  1. package/README.md +41 -34
  2. package/dist/cjs/core/Agent.d.ts +22 -378
  3. package/dist/cjs/core/Agent.d.ts.map +1 -1
  4. package/dist/cjs/core/Agent.js +104 -1178
  5. package/dist/cjs/core/Agent.js.map +1 -1
  6. package/dist/cjs/core/CompactionEngine.d.ts.map +1 -1
  7. package/dist/cjs/core/CompactionEngine.js +5 -3
  8. package/dist/cjs/core/CompactionEngine.js.map +1 -1
  9. package/dist/cjs/core/FlowSpec.d.ts +136 -0
  10. package/dist/cjs/core/FlowSpec.d.ts.map +1 -0
  11. package/dist/cjs/core/FlowSpec.js +522 -0
  12. package/dist/cjs/core/FlowSpec.js.map +1 -0
  13. package/dist/cjs/core/Migrate.d.ts +38 -0
  14. package/dist/cjs/core/Migrate.d.ts.map +1 -0
  15. package/dist/cjs/core/Migrate.js +270 -0
  16. package/dist/cjs/core/Migrate.js.map +1 -0
  17. package/dist/cjs/core/Prompt.d.ts +54 -0
  18. package/dist/cjs/core/Prompt.d.ts.map +1 -0
  19. package/dist/cjs/core/Prompt.js +143 -0
  20. package/dist/cjs/core/Prompt.js.map +1 -0
  21. package/dist/cjs/core/Runner.d.ts +160 -0
  22. package/dist/cjs/core/Runner.d.ts.map +1 -0
  23. package/dist/cjs/core/Runner.js +1131 -0
  24. package/dist/cjs/core/Runner.js.map +1 -0
  25. package/dist/cjs/core/Speak.d.ts +37 -0
  26. package/dist/cjs/core/Speak.d.ts.map +1 -0
  27. package/dist/cjs/core/Speak.js +364 -0
  28. package/dist/cjs/core/Speak.js.map +1 -0
  29. package/dist/cjs/core/Understand.d.ts +28 -0
  30. package/dist/cjs/core/Understand.d.ts.map +1 -0
  31. package/dist/cjs/core/Understand.js +353 -0
  32. package/dist/cjs/core/Understand.js.map +1 -0
  33. package/dist/cjs/core/contracts.d.ts +122 -0
  34. package/dist/cjs/core/contracts.d.ts.map +1 -0
  35. package/dist/cjs/core/contracts.js +11 -0
  36. package/dist/cjs/core/contracts.js.map +1 -0
  37. package/dist/cjs/core/falai.d.ts +57 -0
  38. package/dist/cjs/core/falai.d.ts.map +1 -0
  39. package/dist/cjs/core/falai.js +43 -0
  40. package/dist/cjs/core/falai.js.map +1 -0
  41. package/dist/cjs/core/predicate.d.ts +9 -0
  42. package/dist/cjs/core/predicate.d.ts.map +1 -0
  43. package/dist/cjs/core/predicate.js +58 -0
  44. package/dist/cjs/core/predicate.js.map +1 -0
  45. package/dist/cjs/index.d.ts +26 -31
  46. package/dist/cjs/index.d.ts.map +1 -1
  47. package/dist/cjs/index.js +46 -68
  48. package/dist/cjs/index.js.map +1 -1
  49. package/dist/cjs/persistence/MemoryStore.d.ts +15 -0
  50. package/dist/cjs/persistence/MemoryStore.d.ts.map +1 -0
  51. package/dist/cjs/persistence/MemoryStore.js +39 -0
  52. package/dist/cjs/persistence/MemoryStore.js.map +1 -0
  53. package/dist/cjs/persistence/MongoStore.d.ts +42 -0
  54. package/dist/cjs/persistence/MongoStore.d.ts.map +1 -0
  55. package/dist/cjs/persistence/MongoStore.js +60 -0
  56. package/dist/cjs/persistence/MongoStore.js.map +1 -0
  57. package/dist/cjs/persistence/OpenSearchStore.d.ts +86 -0
  58. package/dist/cjs/persistence/OpenSearchStore.d.ts.map +1 -0
  59. package/dist/cjs/persistence/OpenSearchStore.js +120 -0
  60. package/dist/cjs/persistence/OpenSearchStore.js.map +1 -0
  61. package/dist/cjs/persistence/PostgresStore.d.ts +41 -0
  62. package/dist/cjs/persistence/PostgresStore.d.ts.map +1 -0
  63. package/dist/cjs/persistence/PostgresStore.js +58 -0
  64. package/dist/cjs/persistence/PostgresStore.js.map +1 -0
  65. package/dist/cjs/persistence/PrismaStore.d.ts +65 -0
  66. package/dist/cjs/persistence/PrismaStore.d.ts.map +1 -0
  67. package/dist/cjs/persistence/PrismaStore.js +95 -0
  68. package/dist/cjs/persistence/PrismaStore.js.map +1 -0
  69. package/dist/cjs/persistence/RedisStore.d.ts +34 -0
  70. package/dist/cjs/persistence/RedisStore.d.ts.map +1 -0
  71. package/dist/cjs/persistence/RedisStore.js +61 -0
  72. package/dist/cjs/persistence/RedisStore.js.map +1 -0
  73. package/dist/cjs/persistence/SQLiteStore.d.ts +45 -0
  74. package/dist/cjs/persistence/SQLiteStore.d.ts.map +1 -0
  75. package/dist/cjs/persistence/SQLiteStore.js +74 -0
  76. package/dist/cjs/persistence/SQLiteStore.js.map +1 -0
  77. package/dist/cjs/persistence/sessionRow.d.ts +14 -0
  78. package/dist/cjs/persistence/sessionRow.d.ts.map +1 -0
  79. package/dist/cjs/persistence/sessionRow.js +50 -0
  80. package/dist/cjs/persistence/sessionRow.js.map +1 -0
  81. package/dist/cjs/providers/DeepSeekProvider.d.ts.map +1 -1
  82. package/dist/cjs/providers/DeepSeekProvider.js +8 -3
  83. package/dist/cjs/providers/DeepSeekProvider.js.map +1 -1
  84. package/dist/cjs/providers/GeminiProvider.d.ts +4 -3
  85. package/dist/cjs/providers/GeminiProvider.d.ts.map +1 -1
  86. package/dist/cjs/providers/GeminiProvider.js +4 -3
  87. package/dist/cjs/providers/GeminiProvider.js.map +1 -1
  88. package/dist/cjs/providers/OpenAICompatibleProvider.d.ts +4 -0
  89. package/dist/cjs/providers/OpenAICompatibleProvider.d.ts.map +1 -1
  90. package/dist/cjs/providers/OpenAICompatibleProvider.js +2 -0
  91. package/dist/cjs/providers/OpenAICompatibleProvider.js.map +1 -1
  92. package/dist/cjs/providers/OpenRouterProvider.d.ts.map +1 -1
  93. package/dist/cjs/providers/OpenRouterProvider.js +2 -4
  94. package/dist/cjs/providers/OpenRouterProvider.js.map +1 -1
  95. package/dist/cjs/providers/ProviderAdapter.d.ts +11 -6
  96. package/dist/cjs/providers/ProviderAdapter.d.ts.map +1 -1
  97. package/dist/cjs/providers/ProviderAdapter.js +33 -10
  98. package/dist/cjs/providers/ProviderAdapter.js.map +1 -1
  99. package/dist/cjs/providers/ZaiProvider.d.ts +6 -4
  100. package/dist/cjs/providers/ZaiProvider.d.ts.map +1 -1
  101. package/dist/cjs/providers/ZaiProvider.js +6 -4
  102. package/dist/cjs/providers/ZaiProvider.js.map +1 -1
  103. package/dist/cjs/types/agent.d.ts +153 -383
  104. package/dist/cjs/types/agent.d.ts.map +1 -1
  105. package/dist/cjs/types/agent.js +1 -1
  106. package/dist/cjs/types/ai.d.ts +32 -1
  107. package/dist/cjs/types/ai.d.ts.map +1 -1
  108. package/dist/cjs/types/compaction.d.ts +3 -1
  109. package/dist/cjs/types/compaction.d.ts.map +1 -1
  110. package/dist/cjs/types/errors.d.ts +9 -12
  111. package/dist/cjs/types/errors.d.ts.map +1 -1
  112. package/dist/cjs/types/errors.js +14 -17
  113. package/dist/cjs/types/errors.js.map +1 -1
  114. package/dist/cjs/types/flow.d.ts +265 -513
  115. package/dist/cjs/types/flow.d.ts.map +1 -1
  116. package/dist/cjs/types/flow.js +7 -1
  117. package/dist/cjs/types/flow.js.map +1 -1
  118. package/dist/cjs/types/history.d.ts +7 -18
  119. package/dist/cjs/types/history.d.ts.map +1 -1
  120. package/dist/cjs/types/history.js.map +1 -1
  121. package/dist/cjs/types/index.d.ts +9 -15
  122. package/dist/cjs/types/index.d.ts.map +1 -1
  123. package/dist/cjs/types/index.js +4 -14
  124. package/dist/cjs/types/index.js.map +1 -1
  125. package/dist/cjs/types/session.d.ts +94 -64
  126. package/dist/cjs/types/session.d.ts.map +1 -1
  127. package/dist/cjs/types/session.js +5 -1
  128. package/dist/cjs/types/session.js.map +1 -1
  129. package/dist/cjs/types/tool.d.ts +37 -207
  130. package/dist/cjs/types/tool.d.ts.map +1 -1
  131. package/dist/cjs/types/tool.js +5 -14
  132. package/dist/cjs/types/tool.js.map +1 -1
  133. package/dist/cjs/utils/clock.d.ts +28 -0
  134. package/dist/cjs/utils/clock.d.ts.map +1 -0
  135. package/dist/cjs/utils/clock.js +64 -0
  136. package/dist/cjs/utils/clock.js.map +1 -0
  137. package/dist/cjs/utils/duration.d.ts +11 -0
  138. package/dist/cjs/utils/duration.d.ts.map +1 -0
  139. package/dist/cjs/utils/duration.js +31 -0
  140. package/dist/cjs/utils/duration.js.map +1 -0
  141. package/dist/cjs/utils/history.d.ts +4 -1
  142. package/dist/cjs/utils/history.d.ts.map +1 -1
  143. package/dist/cjs/utils/history.js +2 -2
  144. package/dist/cjs/utils/history.js.map +1 -1
  145. package/dist/cjs/utils/index.d.ts +4 -10
  146. package/dist/cjs/utils/index.d.ts.map +1 -1
  147. package/dist/cjs/utils/index.js +14 -61
  148. package/dist/cjs/utils/index.js.map +1 -1
  149. package/dist/cjs/utils/json.d.ts +2 -0
  150. package/dist/cjs/utils/json.d.ts.map +1 -1
  151. package/dist/cjs/utils/json.js +5 -0
  152. package/dist/cjs/utils/json.js.map +1 -1
  153. package/dist/cjs/utils/outcomes.d.ts +48 -0
  154. package/dist/cjs/utils/outcomes.d.ts.map +1 -0
  155. package/dist/cjs/utils/outcomes.js +51 -0
  156. package/dist/cjs/utils/outcomes.js.map +1 -0
  157. package/dist/cjs/utils/schema.d.ts +50 -0
  158. package/dist/cjs/utils/schema.d.ts.map +1 -0
  159. package/dist/cjs/utils/schema.js +138 -0
  160. package/dist/cjs/utils/schema.js.map +1 -0
  161. package/dist/cjs/utils/streamingMessage.d.ts +3 -2
  162. package/dist/cjs/utils/streamingMessage.d.ts.map +1 -1
  163. package/dist/cjs/utils/streamingMessage.js +38 -4
  164. package/dist/cjs/utils/streamingMessage.js.map +1 -1
  165. package/dist/cjs/utils/template.d.ts +13 -149
  166. package/dist/cjs/utils/template.d.ts.map +1 -1
  167. package/dist/cjs/utils/template.js +31 -363
  168. package/dist/cjs/utils/template.js.map +1 -1
  169. package/dist/cjs/utils/usage.d.ts +19 -0
  170. package/dist/cjs/utils/usage.d.ts.map +1 -0
  171. package/dist/cjs/utils/usage.js +35 -0
  172. package/dist/cjs/utils/usage.js.map +1 -0
  173. package/dist/core/Agent.d.ts +22 -378
  174. package/dist/core/Agent.d.ts.map +1 -1
  175. package/dist/core/Agent.js +107 -1181
  176. package/dist/core/Agent.js.map +1 -1
  177. package/dist/core/CompactionEngine.d.ts.map +1 -1
  178. package/dist/core/CompactionEngine.js +5 -3
  179. package/dist/core/CompactionEngine.js.map +1 -1
  180. package/dist/core/FlowSpec.d.ts +136 -0
  181. package/dist/core/FlowSpec.d.ts.map +1 -0
  182. package/dist/core/FlowSpec.js +516 -0
  183. package/dist/core/FlowSpec.js.map +1 -0
  184. package/dist/core/Migrate.d.ts +38 -0
  185. package/dist/core/Migrate.d.ts.map +1 -0
  186. package/dist/core/Migrate.js +264 -0
  187. package/dist/core/Migrate.js.map +1 -0
  188. package/dist/core/Prompt.d.ts +54 -0
  189. package/dist/core/Prompt.d.ts.map +1 -0
  190. package/dist/core/Prompt.js +133 -0
  191. package/dist/core/Prompt.js.map +1 -0
  192. package/dist/core/Runner.d.ts +160 -0
  193. package/dist/core/Runner.d.ts.map +1 -0
  194. package/dist/core/Runner.js +1127 -0
  195. package/dist/core/Runner.js.map +1 -0
  196. package/dist/core/Speak.d.ts +37 -0
  197. package/dist/core/Speak.d.ts.map +1 -0
  198. package/dist/core/Speak.js +360 -0
  199. package/dist/core/Speak.js.map +1 -0
  200. package/dist/core/Understand.d.ts +28 -0
  201. package/dist/core/Understand.d.ts.map +1 -0
  202. package/dist/core/Understand.js +349 -0
  203. package/dist/core/Understand.js.map +1 -0
  204. package/dist/core/contracts.d.ts +122 -0
  205. package/dist/core/contracts.d.ts.map +1 -0
  206. package/dist/core/contracts.js +10 -0
  207. package/dist/core/contracts.js.map +1 -0
  208. package/dist/core/falai.d.ts +57 -0
  209. package/dist/core/falai.d.ts.map +1 -0
  210. package/dist/core/falai.js +40 -0
  211. package/dist/core/falai.js.map +1 -0
  212. package/dist/core/predicate.d.ts +9 -0
  213. package/dist/core/predicate.d.ts.map +1 -0
  214. package/dist/core/predicate.js +54 -0
  215. package/dist/core/predicate.js.map +1 -0
  216. package/dist/index.d.ts +26 -31
  217. package/dist/index.d.ts.map +1 -1
  218. package/dist/index.js +19 -24
  219. package/dist/index.js.map +1 -1
  220. package/dist/persistence/MemoryStore.d.ts +15 -0
  221. package/dist/persistence/MemoryStore.d.ts.map +1 -0
  222. package/dist/persistence/MemoryStore.js +35 -0
  223. package/dist/persistence/MemoryStore.js.map +1 -0
  224. package/dist/persistence/MongoStore.d.ts +42 -0
  225. package/dist/persistence/MongoStore.d.ts.map +1 -0
  226. package/dist/persistence/MongoStore.js +56 -0
  227. package/dist/persistence/MongoStore.js.map +1 -0
  228. package/dist/persistence/OpenSearchStore.d.ts +86 -0
  229. package/dist/persistence/OpenSearchStore.d.ts.map +1 -0
  230. package/dist/persistence/OpenSearchStore.js +116 -0
  231. package/dist/persistence/OpenSearchStore.js.map +1 -0
  232. package/dist/persistence/PostgresStore.d.ts +41 -0
  233. package/dist/persistence/PostgresStore.d.ts.map +1 -0
  234. package/dist/persistence/PostgresStore.js +54 -0
  235. package/dist/persistence/PostgresStore.js.map +1 -0
  236. package/dist/persistence/PrismaStore.d.ts +65 -0
  237. package/dist/persistence/PrismaStore.d.ts.map +1 -0
  238. package/dist/persistence/PrismaStore.js +91 -0
  239. package/dist/persistence/PrismaStore.js.map +1 -0
  240. package/dist/persistence/RedisStore.d.ts +34 -0
  241. package/dist/persistence/RedisStore.d.ts.map +1 -0
  242. package/dist/persistence/RedisStore.js +57 -0
  243. package/dist/persistence/RedisStore.js.map +1 -0
  244. package/dist/persistence/SQLiteStore.d.ts +45 -0
  245. package/dist/persistence/SQLiteStore.d.ts.map +1 -0
  246. package/dist/persistence/SQLiteStore.js +70 -0
  247. package/dist/persistence/SQLiteStore.js.map +1 -0
  248. package/dist/persistence/sessionRow.d.ts +14 -0
  249. package/dist/persistence/sessionRow.d.ts.map +1 -0
  250. package/dist/persistence/sessionRow.js +45 -0
  251. package/dist/persistence/sessionRow.js.map +1 -0
  252. package/dist/providers/DeepSeekProvider.d.ts.map +1 -1
  253. package/dist/providers/DeepSeekProvider.js +8 -3
  254. package/dist/providers/DeepSeekProvider.js.map +1 -1
  255. package/dist/providers/GeminiProvider.d.ts +4 -3
  256. package/dist/providers/GeminiProvider.d.ts.map +1 -1
  257. package/dist/providers/GeminiProvider.js +4 -3
  258. package/dist/providers/GeminiProvider.js.map +1 -1
  259. package/dist/providers/OpenAICompatibleProvider.d.ts +4 -0
  260. package/dist/providers/OpenAICompatibleProvider.d.ts.map +1 -1
  261. package/dist/providers/OpenAICompatibleProvider.js +2 -0
  262. package/dist/providers/OpenAICompatibleProvider.js.map +1 -1
  263. package/dist/providers/OpenRouterProvider.d.ts.map +1 -1
  264. package/dist/providers/OpenRouterProvider.js +2 -4
  265. package/dist/providers/OpenRouterProvider.js.map +1 -1
  266. package/dist/providers/ProviderAdapter.d.ts +11 -6
  267. package/dist/providers/ProviderAdapter.d.ts.map +1 -1
  268. package/dist/providers/ProviderAdapter.js +34 -11
  269. package/dist/providers/ProviderAdapter.js.map +1 -1
  270. package/dist/providers/ZaiProvider.d.ts +6 -4
  271. package/dist/providers/ZaiProvider.d.ts.map +1 -1
  272. package/dist/providers/ZaiProvider.js +6 -4
  273. package/dist/providers/ZaiProvider.js.map +1 -1
  274. package/dist/types/agent.d.ts +153 -383
  275. package/dist/types/agent.d.ts.map +1 -1
  276. package/dist/types/agent.js +1 -1
  277. package/dist/types/ai.d.ts +32 -1
  278. package/dist/types/ai.d.ts.map +1 -1
  279. package/dist/types/compaction.d.ts +3 -1
  280. package/dist/types/compaction.d.ts.map +1 -1
  281. package/dist/types/errors.d.ts +9 -12
  282. package/dist/types/errors.d.ts.map +1 -1
  283. package/dist/types/errors.js +12 -15
  284. package/dist/types/errors.js.map +1 -1
  285. package/dist/types/flow.d.ts +265 -513
  286. package/dist/types/flow.d.ts.map +1 -1
  287. package/dist/types/flow.js +7 -1
  288. package/dist/types/flow.js.map +1 -1
  289. package/dist/types/history.d.ts +7 -18
  290. package/dist/types/history.d.ts.map +1 -1
  291. package/dist/types/history.js.map +1 -1
  292. package/dist/types/index.d.ts +9 -15
  293. package/dist/types/index.d.ts.map +1 -1
  294. package/dist/types/index.js +2 -7
  295. package/dist/types/index.js.map +1 -1
  296. package/dist/types/session.d.ts +94 -64
  297. package/dist/types/session.d.ts.map +1 -1
  298. package/dist/types/session.js +5 -1
  299. package/dist/types/session.js.map +1 -1
  300. package/dist/types/tool.d.ts +37 -207
  301. package/dist/types/tool.d.ts.map +1 -1
  302. package/dist/types/tool.js +6 -13
  303. package/dist/types/tool.js.map +1 -1
  304. package/dist/utils/clock.d.ts +28 -0
  305. package/dist/utils/clock.d.ts.map +1 -0
  306. package/dist/utils/clock.js +59 -0
  307. package/dist/utils/clock.js.map +1 -0
  308. package/dist/utils/duration.d.ts +11 -0
  309. package/dist/utils/duration.d.ts.map +1 -0
  310. package/dist/utils/duration.js +26 -0
  311. package/dist/utils/duration.js.map +1 -0
  312. package/dist/utils/history.d.ts +4 -1
  313. package/dist/utils/history.d.ts.map +1 -1
  314. package/dist/utils/history.js +2 -2
  315. package/dist/utils/history.js.map +1 -1
  316. package/dist/utils/index.d.ts +4 -10
  317. package/dist/utils/index.d.ts.map +1 -1
  318. package/dist/utils/index.js +4 -21
  319. package/dist/utils/index.js.map +1 -1
  320. package/dist/utils/json.d.ts +2 -0
  321. package/dist/utils/json.d.ts.map +1 -1
  322. package/dist/utils/json.js +4 -0
  323. package/dist/utils/json.js.map +1 -1
  324. package/dist/utils/outcomes.d.ts +48 -0
  325. package/dist/utils/outcomes.d.ts.map +1 -0
  326. package/dist/utils/outcomes.js +48 -0
  327. package/dist/utils/outcomes.js.map +1 -0
  328. package/dist/utils/schema.d.ts +50 -0
  329. package/dist/utils/schema.d.ts.map +1 -0
  330. package/dist/utils/schema.js +129 -0
  331. package/dist/utils/schema.js.map +1 -0
  332. package/dist/utils/streamingMessage.d.ts +3 -2
  333. package/dist/utils/streamingMessage.d.ts.map +1 -1
  334. package/dist/utils/streamingMessage.js +38 -4
  335. package/dist/utils/streamingMessage.js.map +1 -1
  336. package/dist/utils/template.d.ts +13 -149
  337. package/dist/utils/template.d.ts.map +1 -1
  338. package/dist/utils/template.js +28 -355
  339. package/dist/utils/template.js.map +1 -1
  340. package/dist/utils/usage.d.ts +19 -0
  341. package/dist/utils/usage.d.ts.map +1 -0
  342. package/dist/utils/usage.js +31 -0
  343. package/dist/utils/usage.js.map +1 -0
  344. package/docs/README.md +37 -19
  345. package/docs/concepts/architecture.md +117 -239
  346. package/docs/concepts/collection.md +170 -0
  347. package/docs/concepts/pipeline.md +132 -378
  348. package/docs/concepts/runs-and-waits.md +192 -0
  349. package/docs/guides/actions-and-events.md +276 -0
  350. package/docs/guides/branching.md +119 -208
  351. package/docs/guides/compaction.md +63 -158
  352. package/docs/guides/conditions.md +164 -128
  353. package/docs/guides/error-handling.md +168 -164
  354. package/docs/guides/flow-control.md +210 -349
  355. package/docs/guides/flows-from-json.md +224 -0
  356. package/docs/guides/instructions.md +125 -161
  357. package/docs/guides/persistence.md +182 -206
  358. package/docs/guides/streaming.md +50 -114
  359. package/docs/guides/testing.md +284 -0
  360. package/docs/guides/triggers.md +401 -0
  361. package/docs/migration/README.md +8 -15
  362. package/docs/migration/v1-to-v2.md +1 -1
  363. package/docs/migration/v2-3-to-v2-4.md +2 -2
  364. package/docs/migration/v2-6-to-v2-7.md +4 -4
  365. package/docs/migration/v3-to-v4.md +452 -0
  366. package/docs/reference/actions-events-conditions.md +396 -0
  367. package/docs/reference/agent.md +244 -0
  368. package/docs/reference/branches.md +75 -203
  369. package/docs/reference/errors.md +188 -144
  370. package/docs/reference/fields.md +125 -0
  371. package/docs/reference/flow-spec.md +248 -0
  372. package/docs/reference/flow.md +104 -192
  373. package/docs/reference/instruction.md +83 -137
  374. package/docs/reference/outcomes.md +273 -0
  375. package/docs/reference/providers.md +525 -302
  376. package/docs/reference/session.md +210 -0
  377. package/docs/reference/step.md +194 -312
  378. package/docs/reference/stores.md +496 -0
  379. package/docs/reference/tool.md +162 -231
  380. package/docs/reference/trigger.md +180 -0
  381. package/docs/rfc/v4-one-flow.md +477 -0
  382. package/docs/start/01-install.md +59 -44
  383. package/docs/start/02-first-agent.md +97 -147
  384. package/docs/start/03-collect-data.md +78 -183
  385. package/docs/start/04-add-tools.md +159 -227
  386. package/docs/start/05-go-to-production.md +167 -164
  387. package/examples/01-quickstart.ts +26 -16
  388. package/examples/02-fields.ts +75 -0
  389. package/examples/03-tools.ts +79 -119
  390. package/examples/04-instructions.ts +60 -87
  391. package/examples/05-branches.ts +78 -0
  392. package/examples/06-triggers-and-waits.ts +148 -0
  393. package/examples/07-streaming.ts +34 -60
  394. package/examples/08-store-and-migration.ts +97 -0
  395. package/examples/09-flows-from-json.ts +107 -0
  396. package/package.json +9 -6
  397. package/src/core/Agent.ts +116 -1512
  398. package/src/core/CompactionEngine.ts +7 -4
  399. package/src/core/FlowSpec.ts +712 -0
  400. package/src/core/Migrate.ts +256 -0
  401. package/src/core/Prompt.ts +156 -0
  402. package/src/core/Runner.ts +1181 -0
  403. package/src/core/Speak.ts +451 -0
  404. package/src/core/Understand.ts +422 -0
  405. package/src/core/contracts.ts +111 -0
  406. package/src/core/falai.ts +86 -0
  407. package/src/core/predicate.ts +56 -0
  408. package/src/index.ts +119 -147
  409. package/src/persistence/MemoryStore.ts +37 -0
  410. package/src/persistence/MongoStore.ts +89 -0
  411. package/src/persistence/OpenSearchStore.ts +153 -0
  412. package/src/persistence/PostgresStore.ts +89 -0
  413. package/src/persistence/PrismaStore.ts +127 -0
  414. package/src/persistence/RedisStore.ts +90 -0
  415. package/src/persistence/SQLiteStore.ts +103 -0
  416. package/src/persistence/sessionRow.ts +45 -0
  417. package/src/providers/DeepSeekProvider.ts +8 -3
  418. package/src/providers/GeminiProvider.ts +4 -3
  419. package/src/providers/OpenAICompatibleProvider.ts +6 -0
  420. package/src/providers/OpenRouterProvider.ts +2 -4
  421. package/src/providers/ProviderAdapter.ts +46 -13
  422. package/src/providers/ZaiProvider.ts +6 -4
  423. package/src/types/agent.ts +124 -397
  424. package/src/types/ai.ts +33 -1
  425. package/src/types/compaction.ts +3 -1
  426. package/src/types/errors.ts +13 -16
  427. package/src/types/flow.ts +249 -550
  428. package/src/types/history.ts +7 -20
  429. package/src/types/index.ts +87 -139
  430. package/src/types/session.ts +135 -70
  431. package/src/types/tool.ts +42 -267
  432. package/src/utils/clock.ts +70 -0
  433. package/src/utils/duration.ts +33 -0
  434. package/src/utils/history.ts +3 -2
  435. package/src/utils/index.ts +8 -66
  436. package/src/utils/json.ts +5 -0
  437. package/src/utils/outcomes.ts +56 -0
  438. package/src/utils/schema.ts +145 -0
  439. package/src/utils/streamingMessage.ts +34 -4
  440. package/src/utils/template.ts +32 -423
  441. package/src/utils/usage.ts +37 -0
  442. package/dist/adapters/MemoryAdapter.d.ts +0 -47
  443. package/dist/adapters/MemoryAdapter.d.ts.map +0 -1
  444. package/dist/adapters/MemoryAdapter.js +0 -204
  445. package/dist/adapters/MemoryAdapter.js.map +0 -1
  446. package/dist/adapters/MongoAdapter.d.ts +0 -97
  447. package/dist/adapters/MongoAdapter.d.ts.map +0 -1
  448. package/dist/adapters/MongoAdapter.js +0 -196
  449. package/dist/adapters/MongoAdapter.js.map +0 -1
  450. package/dist/adapters/OpenSearchAdapter.d.ts +0 -169
  451. package/dist/adapters/OpenSearchAdapter.d.ts.map +0 -1
  452. package/dist/adapters/OpenSearchAdapter.js +0 -471
  453. package/dist/adapters/OpenSearchAdapter.js.map +0 -1
  454. package/dist/adapters/PostgreSQLAdapter.d.ts +0 -85
  455. package/dist/adapters/PostgreSQLAdapter.d.ts.map +0 -1
  456. package/dist/adapters/PostgreSQLAdapter.js +0 -308
  457. package/dist/adapters/PostgreSQLAdapter.js.map +0 -1
  458. package/dist/adapters/PrismaAdapter.d.ts +0 -115
  459. package/dist/adapters/PrismaAdapter.d.ts.map +0 -1
  460. package/dist/adapters/PrismaAdapter.js +0 -406
  461. package/dist/adapters/PrismaAdapter.js.map +0 -1
  462. package/dist/adapters/RedisAdapter.d.ts +0 -72
  463. package/dist/adapters/RedisAdapter.d.ts.map +0 -1
  464. package/dist/adapters/RedisAdapter.js +0 -286
  465. package/dist/adapters/RedisAdapter.js.map +0 -1
  466. package/dist/adapters/SQLiteAdapter.d.ts +0 -86
  467. package/dist/adapters/SQLiteAdapter.d.ts.map +0 -1
  468. package/dist/adapters/SQLiteAdapter.js +0 -337
  469. package/dist/adapters/SQLiteAdapter.js.map +0 -1
  470. package/dist/adapters/index.d.ts +0 -17
  471. package/dist/adapters/index.d.ts.map +0 -1
  472. package/dist/adapters/index.js +0 -11
  473. package/dist/adapters/index.js.map +0 -1
  474. package/dist/adapters/sessionRow.d.ts +0 -22
  475. package/dist/adapters/sessionRow.d.ts.map +0 -1
  476. package/dist/adapters/sessionRow.js +0 -48
  477. package/dist/adapters/sessionRow.js.map +0 -1
  478. package/dist/cjs/adapters/MemoryAdapter.d.ts +0 -47
  479. package/dist/cjs/adapters/MemoryAdapter.d.ts.map +0 -1
  480. package/dist/cjs/adapters/MemoryAdapter.js +0 -208
  481. package/dist/cjs/adapters/MemoryAdapter.js.map +0 -1
  482. package/dist/cjs/adapters/MongoAdapter.d.ts +0 -97
  483. package/dist/cjs/adapters/MongoAdapter.d.ts.map +0 -1
  484. package/dist/cjs/adapters/MongoAdapter.js +0 -200
  485. package/dist/cjs/adapters/MongoAdapter.js.map +0 -1
  486. package/dist/cjs/adapters/OpenSearchAdapter.d.ts +0 -169
  487. package/dist/cjs/adapters/OpenSearchAdapter.d.ts.map +0 -1
  488. package/dist/cjs/adapters/OpenSearchAdapter.js +0 -475
  489. package/dist/cjs/adapters/OpenSearchAdapter.js.map +0 -1
  490. package/dist/cjs/adapters/PostgreSQLAdapter.d.ts +0 -85
  491. package/dist/cjs/adapters/PostgreSQLAdapter.d.ts.map +0 -1
  492. package/dist/cjs/adapters/PostgreSQLAdapter.js +0 -312
  493. package/dist/cjs/adapters/PostgreSQLAdapter.js.map +0 -1
  494. package/dist/cjs/adapters/PrismaAdapter.d.ts +0 -115
  495. package/dist/cjs/adapters/PrismaAdapter.d.ts.map +0 -1
  496. package/dist/cjs/adapters/PrismaAdapter.js +0 -410
  497. package/dist/cjs/adapters/PrismaAdapter.js.map +0 -1
  498. package/dist/cjs/adapters/RedisAdapter.d.ts +0 -72
  499. package/dist/cjs/adapters/RedisAdapter.d.ts.map +0 -1
  500. package/dist/cjs/adapters/RedisAdapter.js +0 -290
  501. package/dist/cjs/adapters/RedisAdapter.js.map +0 -1
  502. package/dist/cjs/adapters/SQLiteAdapter.d.ts +0 -86
  503. package/dist/cjs/adapters/SQLiteAdapter.d.ts.map +0 -1
  504. package/dist/cjs/adapters/SQLiteAdapter.js +0 -341
  505. package/dist/cjs/adapters/SQLiteAdapter.js.map +0 -1
  506. package/dist/cjs/adapters/index.d.ts +0 -17
  507. package/dist/cjs/adapters/index.d.ts.map +0 -1
  508. package/dist/cjs/adapters/index.js +0 -21
  509. package/dist/cjs/adapters/index.js.map +0 -1
  510. package/dist/cjs/adapters/sessionRow.d.ts +0 -22
  511. package/dist/cjs/adapters/sessionRow.d.ts.map +0 -1
  512. package/dist/cjs/adapters/sessionRow.js +0 -52
  513. package/dist/cjs/adapters/sessionRow.js.map +0 -1
  514. package/dist/cjs/constants/index.d.ts +0 -1
  515. package/dist/cjs/constants/index.d.ts.map +0 -1
  516. package/dist/cjs/constants/index.js +0 -4
  517. package/dist/cjs/constants/index.js.map +0 -1
  518. package/dist/cjs/core/AutoChainExecutor.d.ts +0 -97
  519. package/dist/cjs/core/AutoChainExecutor.d.ts.map +0 -1
  520. package/dist/cjs/core/AutoChainExecutor.js +0 -288
  521. package/dist/cjs/core/AutoChainExecutor.js.map +0 -1
  522. package/dist/cjs/core/BranchEvaluator.d.ts +0 -55
  523. package/dist/cjs/core/BranchEvaluator.d.ts.map +0 -1
  524. package/dist/cjs/core/BranchEvaluator.js +0 -125
  525. package/dist/cjs/core/BranchEvaluator.js.map +0 -1
  526. package/dist/cjs/core/DirectiveChainTracker.d.ts +0 -49
  527. package/dist/cjs/core/DirectiveChainTracker.d.ts.map +0 -1
  528. package/dist/cjs/core/DirectiveChainTracker.js +0 -121
  529. package/dist/cjs/core/DirectiveChainTracker.js.map +0 -1
  530. package/dist/cjs/core/Events.d.ts +0 -26
  531. package/dist/cjs/core/Events.d.ts.map +0 -1
  532. package/dist/cjs/core/Events.js +0 -144
  533. package/dist/cjs/core/Events.js.map +0 -1
  534. package/dist/cjs/core/Flow.d.ts +0 -183
  535. package/dist/cjs/core/Flow.d.ts.map +0 -1
  536. package/dist/cjs/core/Flow.js +0 -551
  537. package/dist/cjs/core/Flow.js.map +0 -1
  538. package/dist/cjs/core/FlowRouter.d.ts +0 -183
  539. package/dist/cjs/core/FlowRouter.d.ts.map +0 -1
  540. package/dist/cjs/core/FlowRouter.js +0 -1047
  541. package/dist/cjs/core/FlowRouter.js.map +0 -1
  542. package/dist/cjs/core/PersistenceManager.d.ts +0 -114
  543. package/dist/cjs/core/PersistenceManager.d.ts.map +0 -1
  544. package/dist/cjs/core/PersistenceManager.js +0 -336
  545. package/dist/cjs/core/PersistenceManager.js.map +0 -1
  546. package/dist/cjs/core/PromptComposer.d.ts +0 -47
  547. package/dist/cjs/core/PromptComposer.d.ts.map +0 -1
  548. package/dist/cjs/core/PromptComposer.js +0 -397
  549. package/dist/cjs/core/PromptComposer.js.map +0 -1
  550. package/dist/cjs/core/PromptSectionCache.d.ts +0 -48
  551. package/dist/cjs/core/PromptSectionCache.d.ts.map +0 -1
  552. package/dist/cjs/core/PromptSectionCache.js +0 -108
  553. package/dist/cjs/core/PromptSectionCache.js.map +0 -1
  554. package/dist/cjs/core/ResponseEngine.d.ts +0 -43
  555. package/dist/cjs/core/ResponseEngine.d.ts.map +0 -1
  556. package/dist/cjs/core/ResponseEngine.js +0 -235
  557. package/dist/cjs/core/ResponseEngine.js.map +0 -1
  558. package/dist/cjs/core/ResponseGenerationError.d.ts +0 -30
  559. package/dist/cjs/core/ResponseGenerationError.d.ts.map +0 -1
  560. package/dist/cjs/core/ResponseGenerationError.js +0 -35
  561. package/dist/cjs/core/ResponseGenerationError.js.map +0 -1
  562. package/dist/cjs/core/ResponseModal.d.ts +0 -305
  563. package/dist/cjs/core/ResponseModal.d.ts.map +0 -1
  564. package/dist/cjs/core/ResponseModal.js +0 -1414
  565. package/dist/cjs/core/ResponseModal.js.map +0 -1
  566. package/dist/cjs/core/ResponsePipeline.d.ts +0 -220
  567. package/dist/cjs/core/ResponsePipeline.d.ts.map +0 -1
  568. package/dist/cjs/core/ResponsePipeline.js +0 -1040
  569. package/dist/cjs/core/ResponsePipeline.js.map +0 -1
  570. package/dist/cjs/core/SessionFinalizer.d.ts +0 -34
  571. package/dist/cjs/core/SessionFinalizer.d.ts.map +0 -1
  572. package/dist/cjs/core/SessionFinalizer.js +0 -88
  573. package/dist/cjs/core/SessionFinalizer.js.map +0 -1
  574. package/dist/cjs/core/SessionManager.d.ts +0 -112
  575. package/dist/cjs/core/SessionManager.d.ts.map +0 -1
  576. package/dist/cjs/core/SessionManager.js +0 -308
  577. package/dist/cjs/core/SessionManager.js.map +0 -1
  578. package/dist/cjs/core/SignalCoordinator.d.ts +0 -103
  579. package/dist/cjs/core/SignalCoordinator.d.ts.map +0 -1
  580. package/dist/cjs/core/SignalCoordinator.js +0 -207
  581. package/dist/cjs/core/SignalCoordinator.js.map +0 -1
  582. package/dist/cjs/core/SignalEvaluator.d.ts +0 -86
  583. package/dist/cjs/core/SignalEvaluator.d.ts.map +0 -1
  584. package/dist/cjs/core/SignalEvaluator.js +0 -319
  585. package/dist/cjs/core/SignalEvaluator.js.map +0 -1
  586. package/dist/cjs/core/SignalProcessor.d.ts +0 -152
  587. package/dist/cjs/core/SignalProcessor.d.ts.map +0 -1
  588. package/dist/cjs/core/SignalProcessor.js +0 -505
  589. package/dist/cjs/core/SignalProcessor.js.map +0 -1
  590. package/dist/cjs/core/Step.d.ts +0 -184
  591. package/dist/cjs/core/Step.d.ts.map +0 -1
  592. package/dist/cjs/core/Step.js +0 -599
  593. package/dist/cjs/core/Step.js.map +0 -1
  594. package/dist/cjs/core/StepLifecycle.d.ts +0 -43
  595. package/dist/cjs/core/StepLifecycle.d.ts.map +0 -1
  596. package/dist/cjs/core/StepLifecycle.js +0 -180
  597. package/dist/cjs/core/StepLifecycle.js.map +0 -1
  598. package/dist/cjs/core/StreamingToolExecutor.d.ts +0 -142
  599. package/dist/cjs/core/StreamingToolExecutor.d.ts.map +0 -1
  600. package/dist/cjs/core/StreamingToolExecutor.js +0 -490
  601. package/dist/cjs/core/StreamingToolExecutor.js.map +0 -1
  602. package/dist/cjs/core/ToolLoopExecutor.d.ts +0 -133
  603. package/dist/cjs/core/ToolLoopExecutor.d.ts.map +0 -1
  604. package/dist/cjs/core/ToolLoopExecutor.js +0 -568
  605. package/dist/cjs/core/ToolLoopExecutor.js.map +0 -1
  606. package/dist/cjs/core/ToolManager.d.ts +0 -250
  607. package/dist/cjs/core/ToolManager.d.ts.map +0 -1
  608. package/dist/cjs/core/ToolManager.js +0 -1104
  609. package/dist/cjs/core/ToolManager.js.map +0 -1
  610. package/dist/cjs/core/createAgent.d.ts +0 -35
  611. package/dist/cjs/core/createAgent.d.ts.map +0 -1
  612. package/dist/cjs/core/createAgent.js +0 -39
  613. package/dist/cjs/core/createAgent.js.map +0 -1
  614. package/dist/cjs/core/flow-namespace.d.ts +0 -64
  615. package/dist/cjs/core/flow-namespace.d.ts.map +0 -1
  616. package/dist/cjs/core/flow-namespace.js +0 -182
  617. package/dist/cjs/core/flow-namespace.js.map +0 -1
  618. package/dist/cjs/core/toolGates.d.ts +0 -24
  619. package/dist/cjs/core/toolGates.d.ts.map +0 -1
  620. package/dist/cjs/core/toolGates.js +0 -52
  621. package/dist/cjs/core/toolGates.js.map +0 -1
  622. package/dist/cjs/types/persistence.d.ts +0 -254
  623. package/dist/cjs/types/persistence.d.ts.map +0 -1
  624. package/dist/cjs/types/persistence.js +0 -7
  625. package/dist/cjs/types/persistence.js.map +0 -1
  626. package/dist/cjs/types/prompt-cache.d.ts +0 -15
  627. package/dist/cjs/types/prompt-cache.d.ts.map +0 -1
  628. package/dist/cjs/types/prompt-cache.js +0 -6
  629. package/dist/cjs/types/prompt-cache.js.map +0 -1
  630. package/dist/cjs/types/signals.d.ts +0 -263
  631. package/dist/cjs/types/signals.d.ts.map +0 -1
  632. package/dist/cjs/types/signals.js +0 -11
  633. package/dist/cjs/types/signals.js.map +0 -1
  634. package/dist/cjs/types/template.d.ts +0 -84
  635. package/dist/cjs/types/template.d.ts.map +0 -1
  636. package/dist/cjs/types/template.js +0 -3
  637. package/dist/cjs/types/template.js.map +0 -1
  638. package/dist/cjs/utils/condition.d.ts +0 -63
  639. package/dist/cjs/utils/condition.d.ts.map +0 -1
  640. package/dist/cjs/utils/condition.js +0 -239
  641. package/dist/cjs/utils/condition.js.map +0 -1
  642. package/dist/cjs/utils/event.d.ts +0 -6
  643. package/dist/cjs/utils/event.d.ts.map +0 -1
  644. package/dist/cjs/utils/event.js +0 -20
  645. package/dist/cjs/utils/event.js.map +0 -1
  646. package/dist/cjs/utils/id.d.ts +0 -33
  647. package/dist/cjs/utils/id.d.ts.map +0 -1
  648. package/dist/cjs/utils/id.js +0 -84
  649. package/dist/cjs/utils/id.js.map +0 -1
  650. package/dist/cjs/utils/serialize.d.ts +0 -36
  651. package/dist/cjs/utils/serialize.d.ts.map +0 -1
  652. package/dist/cjs/utils/serialize.js +0 -77
  653. package/dist/cjs/utils/serialize.js.map +0 -1
  654. package/dist/cjs/utils/session.d.ts +0 -124
  655. package/dist/cjs/utils/session.d.ts.map +0 -1
  656. package/dist/cjs/utils/session.js +0 -396
  657. package/dist/cjs/utils/session.js.map +0 -1
  658. package/dist/constants/index.d.ts +0 -2
  659. package/dist/constants/index.d.ts.map +0 -1
  660. package/dist/constants/index.js +0 -4
  661. package/dist/constants/index.js.map +0 -1
  662. package/dist/core/AutoChainExecutor.d.ts +0 -97
  663. package/dist/core/AutoChainExecutor.d.ts.map +0 -1
  664. package/dist/core/AutoChainExecutor.js +0 -284
  665. package/dist/core/AutoChainExecutor.js.map +0 -1
  666. package/dist/core/BranchEvaluator.d.ts +0 -55
  667. package/dist/core/BranchEvaluator.d.ts.map +0 -1
  668. package/dist/core/BranchEvaluator.js +0 -121
  669. package/dist/core/BranchEvaluator.js.map +0 -1
  670. package/dist/core/DirectiveChainTracker.d.ts +0 -49
  671. package/dist/core/DirectiveChainTracker.d.ts.map +0 -1
  672. package/dist/core/DirectiveChainTracker.js +0 -117
  673. package/dist/core/DirectiveChainTracker.js.map +0 -1
  674. package/dist/core/Events.d.ts +0 -26
  675. package/dist/core/Events.d.ts.map +0 -1
  676. package/dist/core/Events.js +0 -137
  677. package/dist/core/Events.js.map +0 -1
  678. package/dist/core/Flow.d.ts +0 -183
  679. package/dist/core/Flow.d.ts.map +0 -1
  680. package/dist/core/Flow.js +0 -547
  681. package/dist/core/Flow.js.map +0 -1
  682. package/dist/core/FlowRouter.d.ts +0 -183
  683. package/dist/core/FlowRouter.d.ts.map +0 -1
  684. package/dist/core/FlowRouter.js +0 -1043
  685. package/dist/core/FlowRouter.js.map +0 -1
  686. package/dist/core/PersistenceManager.d.ts +0 -114
  687. package/dist/core/PersistenceManager.d.ts.map +0 -1
  688. package/dist/core/PersistenceManager.js +0 -332
  689. package/dist/core/PersistenceManager.js.map +0 -1
  690. package/dist/core/PromptComposer.d.ts +0 -47
  691. package/dist/core/PromptComposer.d.ts.map +0 -1
  692. package/dist/core/PromptComposer.js +0 -393
  693. package/dist/core/PromptComposer.js.map +0 -1
  694. package/dist/core/PromptSectionCache.d.ts +0 -48
  695. package/dist/core/PromptSectionCache.d.ts.map +0 -1
  696. package/dist/core/PromptSectionCache.js +0 -104
  697. package/dist/core/PromptSectionCache.js.map +0 -1
  698. package/dist/core/ResponseEngine.d.ts +0 -43
  699. package/dist/core/ResponseEngine.d.ts.map +0 -1
  700. package/dist/core/ResponseEngine.js +0 -231
  701. package/dist/core/ResponseEngine.js.map +0 -1
  702. package/dist/core/ResponseGenerationError.d.ts +0 -30
  703. package/dist/core/ResponseGenerationError.d.ts.map +0 -1
  704. package/dist/core/ResponseGenerationError.js +0 -31
  705. package/dist/core/ResponseGenerationError.js.map +0 -1
  706. package/dist/core/ResponseModal.d.ts +0 -305
  707. package/dist/core/ResponseModal.d.ts.map +0 -1
  708. package/dist/core/ResponseModal.js +0 -1410
  709. package/dist/core/ResponseModal.js.map +0 -1
  710. package/dist/core/ResponsePipeline.d.ts +0 -220
  711. package/dist/core/ResponsePipeline.d.ts.map +0 -1
  712. package/dist/core/ResponsePipeline.js +0 -1035
  713. package/dist/core/ResponsePipeline.js.map +0 -1
  714. package/dist/core/SessionFinalizer.d.ts +0 -34
  715. package/dist/core/SessionFinalizer.d.ts.map +0 -1
  716. package/dist/core/SessionFinalizer.js +0 -84
  717. package/dist/core/SessionFinalizer.js.map +0 -1
  718. package/dist/core/SessionManager.d.ts +0 -112
  719. package/dist/core/SessionManager.d.ts.map +0 -1
  720. package/dist/core/SessionManager.js +0 -301
  721. package/dist/core/SessionManager.js.map +0 -1
  722. package/dist/core/SignalCoordinator.d.ts +0 -103
  723. package/dist/core/SignalCoordinator.d.ts.map +0 -1
  724. package/dist/core/SignalCoordinator.js +0 -203
  725. package/dist/core/SignalCoordinator.js.map +0 -1
  726. package/dist/core/SignalEvaluator.d.ts +0 -86
  727. package/dist/core/SignalEvaluator.d.ts.map +0 -1
  728. package/dist/core/SignalEvaluator.js +0 -312
  729. package/dist/core/SignalEvaluator.js.map +0 -1
  730. package/dist/core/SignalProcessor.d.ts +0 -152
  731. package/dist/core/SignalProcessor.d.ts.map +0 -1
  732. package/dist/core/SignalProcessor.js +0 -498
  733. package/dist/core/SignalProcessor.js.map +0 -1
  734. package/dist/core/Step.d.ts +0 -184
  735. package/dist/core/Step.d.ts.map +0 -1
  736. package/dist/core/Step.js +0 -594
  737. package/dist/core/Step.js.map +0 -1
  738. package/dist/core/StepLifecycle.d.ts +0 -43
  739. package/dist/core/StepLifecycle.d.ts.map +0 -1
  740. package/dist/core/StepLifecycle.js +0 -176
  741. package/dist/core/StepLifecycle.js.map +0 -1
  742. package/dist/core/StreamingToolExecutor.d.ts +0 -142
  743. package/dist/core/StreamingToolExecutor.d.ts.map +0 -1
  744. package/dist/core/StreamingToolExecutor.js +0 -483
  745. package/dist/core/StreamingToolExecutor.js.map +0 -1
  746. package/dist/core/ToolLoopExecutor.d.ts +0 -133
  747. package/dist/core/ToolLoopExecutor.d.ts.map +0 -1
  748. package/dist/core/ToolLoopExecutor.js +0 -564
  749. package/dist/core/ToolLoopExecutor.js.map +0 -1
  750. package/dist/core/ToolManager.d.ts +0 -250
  751. package/dist/core/ToolManager.d.ts.map +0 -1
  752. package/dist/core/ToolManager.js +0 -1098
  753. package/dist/core/ToolManager.js.map +0 -1
  754. package/dist/core/createAgent.d.ts +0 -35
  755. package/dist/core/createAgent.d.ts.map +0 -1
  756. package/dist/core/createAgent.js +0 -36
  757. package/dist/core/createAgent.js.map +0 -1
  758. package/dist/core/flow-namespace.d.ts +0 -64
  759. package/dist/core/flow-namespace.d.ts.map +0 -1
  760. package/dist/core/flow-namespace.js +0 -179
  761. package/dist/core/flow-namespace.js.map +0 -1
  762. package/dist/core/toolGates.d.ts +0 -24
  763. package/dist/core/toolGates.d.ts.map +0 -1
  764. package/dist/core/toolGates.js +0 -49
  765. package/dist/core/toolGates.js.map +0 -1
  766. package/dist/types/persistence.d.ts +0 -254
  767. package/dist/types/persistence.d.ts.map +0 -1
  768. package/dist/types/persistence.js +0 -6
  769. package/dist/types/persistence.js.map +0 -1
  770. package/dist/types/prompt-cache.d.ts +0 -15
  771. package/dist/types/prompt-cache.d.ts.map +0 -1
  772. package/dist/types/prompt-cache.js +0 -5
  773. package/dist/types/prompt-cache.js.map +0 -1
  774. package/dist/types/signals.d.ts +0 -263
  775. package/dist/types/signals.d.ts.map +0 -1
  776. package/dist/types/signals.js +0 -10
  777. package/dist/types/signals.js.map +0 -1
  778. package/dist/types/template.d.ts +0 -84
  779. package/dist/types/template.d.ts.map +0 -1
  780. package/dist/types/template.js +0 -2
  781. package/dist/types/template.js.map +0 -1
  782. package/dist/utils/condition.d.ts +0 -63
  783. package/dist/utils/condition.d.ts.map +0 -1
  784. package/dist/utils/condition.js +0 -230
  785. package/dist/utils/condition.js.map +0 -1
  786. package/dist/utils/event.d.ts +0 -6
  787. package/dist/utils/event.d.ts.map +0 -1
  788. package/dist/utils/event.js +0 -17
  789. package/dist/utils/event.js.map +0 -1
  790. package/dist/utils/id.d.ts +0 -33
  791. package/dist/utils/id.d.ts.map +0 -1
  792. package/dist/utils/id.js +0 -77
  793. package/dist/utils/id.js.map +0 -1
  794. package/dist/utils/serialize.d.ts +0 -36
  795. package/dist/utils/serialize.d.ts.map +0 -1
  796. package/dist/utils/serialize.js +0 -72
  797. package/dist/utils/serialize.js.map +0 -1
  798. package/dist/utils/session.d.ts +0 -124
  799. package/dist/utils/session.d.ts.map +0 -1
  800. package/dist/utils/session.js +0 -379
  801. package/dist/utils/session.js.map +0 -1
  802. package/docs/concepts/directives.md +0 -369
  803. package/docs/reference/adapters.md +0 -543
  804. package/docs/reference/create-agent.md +0 -216
  805. package/docs/reference/directive.md +0 -242
  806. package/docs/reference/signals.md +0 -368
  807. package/examples/02-data-extraction.ts +0 -90
  808. package/examples/05-branching.ts +0 -140
  809. package/examples/06-flow-control.ts +0 -103
  810. package/examples/08-persistence.ts +0 -98
  811. package/examples/09-signals.ts +0 -144
  812. package/src/adapters/MemoryAdapter.ts +0 -281
  813. package/src/adapters/MongoAdapter.ts +0 -341
  814. package/src/adapters/OpenSearchAdapter.ts +0 -693
  815. package/src/adapters/PostgreSQLAdapter.ts +0 -487
  816. package/src/adapters/PrismaAdapter.ts +0 -617
  817. package/src/adapters/RedisAdapter.ts +0 -439
  818. package/src/adapters/SQLiteAdapter.ts +0 -496
  819. package/src/adapters/index.ts +0 -43
  820. package/src/adapters/sessionRow.ts +0 -57
  821. package/src/constants/index.ts +0 -2
  822. package/src/core/AutoChainExecutor.ts +0 -397
  823. package/src/core/BranchEvaluator.ts +0 -161
  824. package/src/core/DirectiveChainTracker.ts +0 -144
  825. package/src/core/Events.ts +0 -164
  826. package/src/core/Flow.ts +0 -665
  827. package/src/core/FlowRouter.ts +0 -1540
  828. package/src/core/PersistenceManager.ts +0 -446
  829. package/src/core/PromptComposer.ts +0 -448
  830. package/src/core/PromptSectionCache.ts +0 -125
  831. package/src/core/ResponseEngine.ts +0 -338
  832. package/src/core/ResponseGenerationError.ts +0 -53
  833. package/src/core/ResponseModal.ts +0 -1902
  834. package/src/core/ResponsePipeline.ts +0 -1404
  835. package/src/core/SessionFinalizer.ts +0 -108
  836. package/src/core/SessionManager.ts +0 -372
  837. package/src/core/SignalCoordinator.ts +0 -263
  838. package/src/core/SignalEvaluator.ts +0 -404
  839. package/src/core/SignalProcessor.ts +0 -663
  840. package/src/core/Step.ts +0 -782
  841. package/src/core/StepLifecycle.ts +0 -242
  842. package/src/core/StreamingToolExecutor.ts +0 -609
  843. package/src/core/ToolLoopExecutor.ts +0 -749
  844. package/src/core/ToolManager.ts +0 -1379
  845. package/src/core/createAgent.ts +0 -40
  846. package/src/core/flow-namespace.ts +0 -227
  847. package/src/core/toolGates.ts +0 -72
  848. package/src/types/persistence.ts +0 -303
  849. package/src/types/prompt-cache.ts +0 -17
  850. package/src/types/signals.ts +0 -338
  851. package/src/types/template.ts +0 -98
  852. package/src/utils/condition.ts +0 -296
  853. package/src/utils/event.ts +0 -16
  854. package/src/utils/id.ts +0 -91
  855. package/src/utils/serialize.ts +0 -86
  856. package/src/utils/session.ts +0 -501
package/src/core/Step.ts DELETED
@@ -1,782 +0,0 @@
1
- /**
2
- * Step in a conversational flow
3
- */
4
-
5
- import type {
6
- StepRef,
7
- StepOptions,
8
- BranchMap,
9
- Instruction,
10
- Tool,
11
- PrepareResult,
12
- } from "../types/index.js";
13
- import type { SessionState } from "../types/session.js";
14
- import type { StepResult, BranchSpec, BranchResult } from "../types/flow.js";
15
- import { ToolScope, Template, TemplateContext } from "../types/index.js";
16
- import type { ConditionWhen, ConditionIf } from "../types/flow.js";
17
- import { generateStepId, logger } from "../utils/index.js";
18
- import { splitWhenConditions } from "../utils/condition.js";
19
- import { Agent } from './Agent.js'
20
- import { flow } from "./flow-namespace.js";
21
-
22
- /**
23
- * Error thrown when a step's configuration violates auto-step constraints.
24
- */
25
- export class FlowConfigurationError extends Error {
26
- constructor(message: string) {
27
- super(message);
28
- this.name = "FlowConfigurationError";
29
- }
30
- }
31
-
32
- /** The function-form of step prepare/finalize. */
33
- type StepPrepareFn<TContext, TData> = (
34
- context: TContext,
35
- data?: Partial<TData>
36
- ) => void | PrepareResult<TContext, TData> | Promise<void | PrepareResult<TContext, TData>>;
37
-
38
- /**
39
- * Merge two handler results (shorthand + hooks.* desugar). Scalar/object
40
- * results merge via the canonical Algorithm 4; void/undefined passes through.
41
- */
42
- function mergeHookResults<TContext, TData>(
43
- a: void | PrepareResult<TContext, TData>,
44
- b: void | PrepareResult<TContext, TData>
45
- ): PrepareResult<TContext, TData> | undefined {
46
- if (a == null) return b ?? undefined;
47
- if (b == null) return a;
48
- // PrepareResult is a structural subset of Directive — the canonical merge
49
- // accepts both sides and its output remains a valid PrepareResult.
50
- return flow.merge<TContext, TData>(a, b);
51
- }
52
-
53
- /**
54
- * Represents a step within a route
55
- */
56
- export class Step<TContext = unknown, TData = unknown> {
57
- public readonly id: string;
58
- private nextSteps: Step<TContext, TData>[] = [];
59
- private _instructions: Instruction<TContext, TData>[] = [];
60
- public readonly flowId: string;
61
- public collect?: (keyof TData)[];
62
- public description?: string;
63
- public when?: ConditionWhen;
64
- public if?: ConditionIf<TContext, TData>;
65
- public skip?: ConditionIf<TContext, TData>;
66
- public requires?: (keyof TData)[];
67
- public prompt?: Template<TContext, TData>;
68
- public reply?: Template<TContext, TData>;
69
- public prepare?:
70
- | string
71
- | Tool<TContext, TData>
72
- | ((context: TContext, data?: Partial<TData>) => void | PrepareResult | Promise<void | PrepareResult>);
73
- public finalize?:
74
- | string
75
- | Tool<TContext, TData>
76
- | ((context: TContext, data?: Partial<TData>) => void | PrepareResult | Promise<void | PrepareResult>);
77
- public tools?: (string | Tool<TContext, TData>)[];
78
-
79
- private readonly _auto: boolean;
80
- private readonly _branches?: BranchMap<TContext, TData>;
81
-
82
- /** Whether this step runs without an LLM call (computational only). */
83
- get auto(): boolean {
84
- return this._auto;
85
- }
86
-
87
- /** Explicit source-local fork entries, if declared. */
88
- get branches(): BranchMap<TContext, TData> | undefined {
89
- return this._branches;
90
- }
91
-
92
- // Reference to parent agent for ToolManager access
93
- private parentAgent?: Agent<TContext, TData>;
94
-
95
- constructor(
96
- routeId: string,
97
- options: StepOptions<TContext, TData> = {},
98
- parentAgent?: Agent<TContext, TData>
99
- ) {
100
- // Use provided ID or generate a deterministic one
101
- this.id = options.id || generateStepId(routeId, options.description);
102
- this.flowId = routeId;
103
- this.description = options.description;
104
-
105
- this._auto = options.auto ?? false;
106
- this._branches = options.branches;
107
- this.collect = options.collect;
108
- this.skip = options.skip;
109
- this.requires = options.requires;
110
- this.prompt = options.prompt;
111
- this.reply = options.reply;
112
- this.when = options.when;
113
- this.if = options.if;
114
-
115
- // Desugar `hooks.prepare` / `hooks.finalize` onto the shorthand fields so
116
- // both spellings run through the same lifecycle machinery. When both are
117
- // declared, both run — the shorthand first, then the hook — with their
118
- // directive returns merged via Algorithm 4 (same desugar pattern as
119
- // flow-level onComplete).
120
- const hooks = options.hooks;
121
-
122
- /** Compose a function-form shorthand with a function-form hook. */
123
- const composeWithHook = (
124
- base: StepPrepareFn<TContext, TData> | undefined,
125
- hook: StepPrepareFn<TContext, TData>
126
- ): StepPrepareFn<TContext, TData> => {
127
- if (!base) return hook;
128
- return async (context, data) =>
129
- mergeHookResults<TContext, TData>(
130
- await base(context, data),
131
- await hook(context, data)
132
- );
133
- };
134
-
135
- if (hooks?.prepare) {
136
- const hookPrepare: StepPrepareFn<TContext, TData> = (context, data) =>
137
- hooks.prepare!(context, data);
138
- const base = options.prepare;
139
- // A tool-reference shorthand cannot compose with a function hook in a
140
- // single field — refuse loudly instead of silently dropping one.
141
- if (base != null && typeof base !== "function") {
142
- throw new FlowConfigurationError(
143
- `[FlowConfigurationError] Step "${this.id}" declares both a tool-based prepare and hooks.prepare. A step can only have one prepare handler — remove one or inline the tool call inside the function.`
144
- );
145
- }
146
- this.prepare = composeWithHook(
147
- typeof base === "function" ? base : undefined,
148
- hookPrepare
149
- );
150
- } else {
151
- this.prepare = options.prepare;
152
- }
153
-
154
- if (hooks?.finalize) {
155
- const hookFinalize: StepPrepareFn<TContext, TData> = (context, data) =>
156
- hooks.finalize!(context, data);
157
- const base = options.finalize;
158
- if (base != null && typeof base !== "function") {
159
- throw new FlowConfigurationError(
160
- `[FlowConfigurationError] Step "${this.id}" declares both a tool-based finalize and hooks.finalize. A step can only have one finalize handler — remove one or inline the tool call inside the function.`
161
- );
162
- }
163
- this.finalize = composeWithHook(
164
- typeof base === "function" ? base : undefined,
165
- hookFinalize
166
- );
167
- } else {
168
- this.finalize = options.finalize;
169
- }
170
-
171
- this.tools = options.tools;
172
-
173
- // Validate when/if split: functions belong on `if`, not `when`
174
- if (this.when !== undefined) {
175
- const whenValue = this.when;
176
- if (typeof whenValue === 'function') {
177
- throw new FlowConfigurationError(
178
- `[FlowConfigurationError] Step "${this.id}" has a function on "when": functions belong on "if" only. Move the function to the "if" field.`
179
- );
180
- }
181
- if (Array.isArray(whenValue)) {
182
- for (let i = 0; i < whenValue.length; i++) {
183
- if (typeof whenValue[i] === 'function') {
184
- throw new FlowConfigurationError(
185
- `[FlowConfigurationError] Step "${this.id}" has a function at "when[${i}]": functions belong on "if" only. Move the function to the "if" field.`
186
- );
187
- }
188
- }
189
- }
190
- }
191
-
192
- // Validate auto-step shape: auto-steps cannot define prompt, collect, tools, or finalize
193
- if (this._auto) {
194
- const violatingFields: string[] = [];
195
- if (this.prompt != null) violatingFields.push('prompt');
196
- if (this.collect != null && this.collect.length > 0) violatingFields.push('collect');
197
- if (this.tools != null && this.tools.length > 0) violatingFields.push('tools');
198
- if (this.finalize != null) violatingFields.push('finalize');
199
-
200
- if (violatingFields.length > 0) {
201
- throw new FlowConfigurationError(
202
- `[FlowConfigurationError] Auto-step "${this.id}" cannot define: ${violatingFields.join(', ')}. Auto-steps run without an LLM call and must not declare prompt, collect, tools, or finalize. Remove these fields or set auto: false.`
203
- );
204
- }
205
- }
206
-
207
- // Validate reply-step shape: reply steps cannot define prompt, collect, tools, finalize, or auto: true
208
- if (this.reply != null) {
209
- const conflictingFields: string[] = [];
210
- if (this.prompt != null) conflictingFields.push('prompt');
211
- if (this.collect != null && this.collect.length > 0) conflictingFields.push('collect');
212
- if (this.tools != null && this.tools.length > 0) conflictingFields.push('tools');
213
- if (this.finalize != null) conflictingFields.push('finalize');
214
- if (this._auto) conflictingFields.push('auto: true');
215
-
216
- if (conflictingFields.length > 0) {
217
- throw new FlowConfigurationError(
218
- `[FlowConfigurationError] Step "${this.id}" sets "reply" together with conflicting fields: ${conflictingFields.join(', ')}. A reply step skips the LLM call and cannot define prompt, collect, tools, finalize, or auto: true.`
219
- );
220
- }
221
- }
222
-
223
- // Validate branches shape
224
- if (this._branches !== undefined) {
225
- this.validateBranches(this._branches);
226
- }
227
-
228
- // Initialize instructions from options
229
- if (options.instructions) {
230
- options.instructions.forEach((instruction) => {
231
- this.addInstruction(instruction);
232
- });
233
- }
234
-
235
- // Store reference to parent agent for ToolManager access
236
- this.parentAgent = parentAgent;
237
- }
238
-
239
- /**
240
- * Configure the step properties after creation
241
- * Useful for overriding initial step configuration
242
- */
243
- configure(config: {
244
- description?: string;
245
- collect?: (keyof TData)[];
246
- skip?: ConditionIf<TContext, TData>;
247
- requires?: (keyof TData)[];
248
- prompt?: Template<TContext, TData>;
249
- prepare?:
250
- | string
251
- | Tool<TContext, TData>
252
- | ((context: TContext, data?: Partial<TData>) => void | Promise<void>);
253
- finalize?:
254
- | string
255
- | Tool<TContext, TData>
256
- | ((context: TContext, data?: Partial<TData>) => void | Promise<void>);
257
- tools?: (string | Tool<TContext, TData>)[];
258
- }): this {
259
- if (config.description !== undefined) {
260
- this.description = config.description;
261
- }
262
-
263
- if (config.collect !== undefined) {
264
- this.collect = config.collect;
265
- }
266
-
267
- if (config.skip !== undefined) {
268
- this.skip = config.skip;
269
- }
270
-
271
- if (config.requires !== undefined) {
272
- this.requires = config.requires;
273
- }
274
-
275
- if (config.prompt !== undefined) {
276
- this.prompt = config.prompt;
277
- }
278
- if (config.prepare !== undefined) {
279
- this.prepare = config.prepare;
280
- }
281
- if (config.finalize !== undefined) {
282
- this.finalize = config.finalize;
283
- }
284
- if (config.tools !== undefined) {
285
- this.tools = config.tools;
286
- }
287
- return this;
288
- }
289
-
290
- /**
291
- * Create a transition from this step to another
292
- *
293
- * @param spec - Transition specification (prompt, tool, or direct step)
294
- * @returns StepResult that supports chaining
295
- */
296
- nextStep(spec: StepOptions<TContext, TData>): StepResult<TContext, TData> {
297
- // Create new target step for prompt or tool
298
- const targetStep = new Step<TContext, TData>(this.flowId, spec, this.parentAgent);
299
- this.nextSteps.push(targetStep);
300
-
301
- return this.createStepRefWithTransition(targetStep.getRef(), targetStep);
302
- }
303
-
304
- /**
305
- * Create multiple branches from this step
306
- *
307
- * @param branches - Array of branch specifications
308
- * @returns BranchResult mapping branch names to their step results
309
- */
310
- branch(
311
- branches: BranchSpec<TContext, TData>[]
312
- ): BranchResult<TContext, TData> {
313
- const result = {} as BranchResult<TContext, TData>;
314
-
315
- for (const branchSpec of branches) {
316
- // Create step options with optional ID
317
- const stepOptions: StepOptions<TContext, TData> = branchSpec.id
318
- ? { ...branchSpec.step, id: branchSpec.id }
319
- : branchSpec.step;
320
-
321
- // Create a new step for this branch
322
- const branchStep = new Step<TContext, TData>(this.flowId, stepOptions, this.parentAgent);
323
- // Add it to our transitions
324
- this.nextSteps.push(branchStep);
325
- // Create a step result for chaining
326
- const branchName: string = branchSpec.name;
327
- result[branchName] = this.createStepRefWithTransition(
328
- branchStep.getRef(),
329
- branchStep
330
- );
331
- }
332
-
333
- return result;
334
- }
335
-
336
- /**
337
- * Add an instruction to this step.
338
- */
339
- addInstruction(instruction: Instruction<TContext, TData>): void {
340
- this._instructions.push({
341
- ...instruction,
342
- kind: instruction.kind || 'should' as const,
343
- id: instruction.id || `instruction_${this.id}_${this._instructions.length}`,
344
- enabled: instruction.enabled !== false, // Default to true
345
- });
346
- }
347
-
348
- /**
349
- * Get instructions for this step
350
- */
351
- getInstructions(): Instruction<TContext, TData>[] {
352
- return [...this._instructions];
353
- }
354
-
355
- /**
356
- * Add a tool to this step using the unified Tool interface
357
- * Creates and adds the tool to step scope in one operation
358
- */
359
- addTool(
360
- tool: Tool<TContext, TData>
361
- ): this {
362
- // Validate tool before adding
363
- if (!tool || !tool.id || !tool.handler) {
364
- throw new Error('Invalid tool: must have id and handler properties');
365
- }
366
-
367
- // Add to step's tools array
368
- if (!this.tools) {
369
- this.tools = [];
370
- }
371
- this.tools.push(tool);
372
-
373
- return this;
374
- }
375
-
376
- /**
377
- * Resolve tool references in the tools array
378
- * Supports both string IDs (resolved from registry) and inline tool objects
379
- */
380
- resolveTools(): Tool<TContext, TData>[] {
381
- if (!this.tools) {
382
- return [];
383
- }
384
-
385
- const resolvedTools: Tool<TContext, TData>[] = [];
386
-
387
- for (const toolRef of this.tools) {
388
- if (typeof toolRef === 'string') {
389
- // Tool ID - try to resolve from ToolManager using proper scope resolution
390
- if (this.parentAgent?.tool) {
391
- const registeredTool = this.parentAgent.tool.find(toolRef);
392
- if (registeredTool) {
393
- resolvedTools.push(registeredTool);
394
- } else {
395
- // Tool not found - log warning but don't fail
396
- logger.warn(`[Step] Tool ID '${toolRef}' not found in any scope for step ${this.id}`);
397
- }
398
- } else {
399
- logger.warn(`[Step] No parent agent available to resolve tool ID '${toolRef}' for step ${this.id}`);
400
- }
401
- } else {
402
- // Inline tool object - validate and use directly
403
- if (toolRef && toolRef.id && typeof toolRef.handler === 'function') {
404
- resolvedTools.push(toolRef);
405
- } else {
406
- logger.warn(`[Step] Invalid inline tool object in step ${this.id}:`, toolRef);
407
- }
408
- }
409
- }
410
-
411
- return resolvedTools;
412
- }
413
-
414
- /**
415
- * Get all tools available to this step (both inline and resolved from registry)
416
- */
417
- getAvailableTools(): (string | Tool<TContext, TData>)[] {
418
- return this.tools ? [...this.tools] : [];
419
- }
420
-
421
- /**
422
- * Get all resolved tools available to this step using ToolManager
423
- * This method provides the complete set of tools accessible from this step
424
- */
425
- getAllAvailableTools(): Tool<TContext, TData>[] {
426
- if (!this.parentAgent?.tool) {
427
- // Fallback to local resolution if no ToolManager available
428
- return this.resolveTools();
429
- }
430
-
431
- // Use ToolManager to get all available tools for this step context
432
- return this.parentAgent.tool.getAvailable(ToolScope.ALL, this, undefined);
433
- }
434
-
435
- /**
436
- * Find a specific tool by ID using ToolManager resolution
437
- * This method respects the tool resolution hierarchy: step → route → agent → registry
438
- */
439
- findTool(toolId: string, scope?: ToolScope): Tool<TContext, TData> | undefined {
440
- if (!this.parentAgent?.tool) {
441
- // Fallback to local resolution if no ToolManager available
442
- const resolved = this.resolveTools();
443
- return resolved.find(tool => tool.id === toolId || tool.id === toolId);
444
- }
445
-
446
- // Use ToolManager to find the tool with proper scope resolution
447
- return this.parentAgent.tool.find(toolId, scope || ToolScope.ALL, this, undefined);
448
- }
449
-
450
- /**
451
- * Get tools from a specific scope
452
- */
453
- getToolsFromScope(scope: ToolScope): Tool<TContext, TData>[] {
454
- if (!this.parentAgent?.tool) {
455
- // Fallback to local resolution if no ToolManager available
456
- return scope === ToolScope.STEP ? this.resolveTools() : [];
457
- }
458
-
459
- return this.parentAgent.tool.getAvailable(scope, this, undefined);
460
- }
461
-
462
- /**
463
- * Get only step-level tools (inline tools in this step)
464
- */
465
- getStepTools(): Tool<TContext, TData>[] {
466
- return this.getToolsFromScope(ToolScope.STEP);
467
- }
468
-
469
- /**
470
- * Get only registered tools accessible from this step
471
- */
472
- getRegisteredTools(): Tool<TContext, TData>[] {
473
- return this.getToolsFromScope(ToolScope.REGISTERED);
474
- }
475
-
476
- /**
477
- * Validate that all tool references in this step can be resolved
478
- * Returns validation result with details about missing tools
479
- */
480
- validateToolReferences(): {
481
- valid: boolean;
482
- missing: string[];
483
- found: string[];
484
- details: Array<{ id: string; found: boolean; scope?: string; }>;
485
- } {
486
- if (!this.tools || this.tools.length === 0) {
487
- return { valid: true, missing: [], found: [], details: [] };
488
- }
489
-
490
- // Extract tool IDs from the tools array
491
- const toolIds: string[] = [];
492
- for (const toolRef of this.tools) {
493
- if (typeof toolRef === 'string') {
494
- toolIds.push(toolRef);
495
- } else if (toolRef && toolRef.id) {
496
- toolIds.push(toolRef.id);
497
- }
498
- }
499
-
500
- if (!this.parentAgent?.tool) {
501
- // Fallback validation without ToolManager
502
- const resolved = this.resolveTools();
503
- const resolvedIds = resolved.map(tool => tool.id);
504
- const missing = toolIds.filter(id => !resolvedIds.includes(id));
505
- const found = toolIds.filter(id => resolvedIds.includes(id));
506
-
507
- return {
508
- valid: missing.length === 0,
509
- missing,
510
- found,
511
- details: toolIds.map(id => ({ id, found: resolvedIds.includes(id) }))
512
- };
513
- }
514
-
515
- // Use ToolManager validation
516
- return this.parentAgent.tool.validateToolReferences(toolIds, this);
517
- }
518
-
519
- /**
520
- * Get all transitions from this step
521
- */
522
- getTransitions(): Step<TContext, TData>[] {
523
- return [...this.nextSteps];
524
- }
525
-
526
- /**
527
- * Evaluate when/if conditions using the v2 split logic.
528
- * `if` (code predicate) evaluates first (free); `when` (AI) evaluates only when `if` passes.
529
- * `if` predicates use AND semantics. Non-`!` `when` strings use OR semantics;
530
- * `!` strings are exclusions where any match inhibits activation.
531
- * When both fields are set, the passing `if` gate and AI match are combined with AND.
532
- */
533
- async evaluateWhen(
534
- templateContext: TemplateContext<TContext, TData>
535
- ): Promise<{
536
- shouldActivate: boolean;
537
- aiContextStrings: string[];
538
- aiExclusionStrings: string[];
539
- hasProgrammaticConditions: boolean;
540
- }> {
541
- // If neither `when` nor `if` is set, step is always eligible
542
- if (!this.when && !this.if) {
543
- return {
544
- shouldActivate: true,
545
- aiContextStrings: [],
546
- aiExclusionStrings: [],
547
- hasProgrammaticConditions: false
548
- };
549
- }
550
-
551
- // Evaluate `if` first (free, code-only)
552
- if (this.if) {
553
- const predicates = Array.isArray(this.if) ? this.if : [this.if];
554
- for (const predicate of predicates) {
555
- try {
556
- const result = await predicate({
557
- data: templateContext.data,
558
- context: templateContext.context as TContext,
559
- session: templateContext.session as SessionState<TData>,
560
- history: templateContext.history || [],
561
- });
562
- if (!result) {
563
- // `if` failed — short-circuit, don't bother with `when`
564
- return {
565
- shouldActivate: false,
566
- aiContextStrings: [],
567
- aiExclusionStrings: [],
568
- hasProgrammaticConditions: true
569
- };
570
- }
571
- } catch (error) {
572
- logger.warn(`[Step] "if" predicate failed for step "${this.id}":`, error);
573
- return {
574
- shouldActivate: false,
575
- aiContextStrings: [],
576
- aiExclusionStrings: [],
577
- hasProgrammaticConditions: true
578
- };
579
- }
580
- }
581
- }
582
-
583
- // `if` passed (or was absent) — now evaluate `when` (AI-evaluated strings)
584
- if (this.when) {
585
- const whenConditions = splitWhenConditions(this.when);
586
- // `when` strings are handed to the AI — return them as aiContextStrings
587
- // The programmatic result is true (strings don't fail programmatically;
588
- // they're scored by the AI at routing time)
589
- return {
590
- shouldActivate: true,
591
- aiContextStrings: whenConditions.positive,
592
- aiExclusionStrings: whenConditions.negative,
593
- hasProgrammaticConditions: !!this.if
594
- };
595
- }
596
-
597
- // Only `if` was set and it passed
598
- return {
599
- shouldActivate: true,
600
- aiContextStrings: [],
601
- aiExclusionStrings: [],
602
- hasProgrammaticConditions: true
603
- };
604
- }
605
-
606
- /**
607
- * Evaluate the skip condition (if-only shape — code predicates, OR semantics).
608
- * Returns true if the step should be skipped.
609
- */
610
- async evaluateSkip(
611
- templateContext: TemplateContext<TContext, TData>
612
- ): Promise<{
613
- shouldSkip: boolean;
614
- aiContextStrings: string[];
615
- hasProgrammaticConditions: boolean;
616
- }> {
617
- if (!this.skip) {
618
- return {
619
- shouldSkip: false,
620
- aiContextStrings: [],
621
- hasProgrammaticConditions: false
622
- };
623
- }
624
-
625
- const predicates = Array.isArray(this.skip) ? this.skip : [this.skip];
626
- // OR semantics: if ANY predicate returns true, skip
627
- for (const predicate of predicates) {
628
- try {
629
- const result = await predicate({
630
- data: templateContext.data,
631
- context: templateContext.context as TContext,
632
- session: templateContext.session as SessionState<TData>,
633
- history: templateContext.history || [],
634
- });
635
- if (result) {
636
- return {
637
- shouldSkip: true,
638
- aiContextStrings: [],
639
- hasProgrammaticConditions: true
640
- };
641
- }
642
- } catch (error) {
643
- logger.warn(`[Step] "skip" predicate failed for step "${this.id}":`, error);
644
- // On error, default to not skipping (safe fallback)
645
- }
646
- }
647
-
648
- return {
649
- shouldSkip: false,
650
- aiContextStrings: [],
651
- hasProgrammaticConditions: true
652
- };
653
- }
654
-
655
-
656
-
657
- /**
658
- * Check if this step has all required data to proceed
659
- */
660
- hasRequires(data: Partial<TData>): boolean {
661
- if (!this.requires || this.requires.length === 0) return true;
662
- return this.requires.every((key) => data[key] !== undefined);
663
- }
664
-
665
- /**
666
- * Get step reference
667
- */
668
- getRef(): StepRef {
669
- return {
670
- id: this.id,
671
- flowId: this.flowId,
672
- };
673
- }
674
-
675
- /**
676
- * Create a step reference with nextStep capability for chaining
677
- */
678
- private createStepRefWithTransition(
679
- ref: StepRef,
680
- step?: Step<TContext, TData>
681
- ): StepResult<TContext, TData> {
682
- const stepInstance = step || this;
683
-
684
- return {
685
- ...ref,
686
- nextStep: (spec: StepOptions<TContext, TData>) =>
687
- stepInstance.nextStep(spec),
688
- branch: (branches: BranchSpec<TContext, TData>[]) =>
689
- stepInstance.branch(branches),
690
- };
691
- }
692
-
693
- /**
694
- * Create a transition result for this step
695
- */
696
- asStepResult(): StepResult<TContext, TData> {
697
- return {
698
- ...this.getRef(),
699
- nextStep: (spec: StepOptions<TContext, TData>) => this.nextStep(spec),
700
- branch: (branches: BranchSpec<TContext, TData>[]) =>
701
- this.branch(branches),
702
- };
703
- }
704
-
705
- /**
706
- * Export step configuration as StepOptions for copying/cloning
707
- * @returns StepOptions that can be used to create a new step with identical configuration
708
- */
709
- toOptions(): StepOptions<TContext, TData> {
710
- return {
711
- id: this.id,
712
- description: this.description,
713
- auto: this._auto,
714
- branches: this._branches,
715
- prompt: this.prompt,
716
- reply: this.reply,
717
- tools: this.tools,
718
- prepare: this.prepare,
719
- finalize: this.finalize,
720
- collect: this.collect,
721
- skip: this.skip,
722
- requires: this.requires,
723
- when: this.when,
724
- if: this.if,
725
- instructions: this.getInstructions(),
726
- };
727
- }
728
-
729
- /**
730
- * Validate the branches array at construction time.
731
- * Checks:
732
- * - Non-empty array
733
- * - Unconditional entries (no `when` and no `if`) only legal as the last entry
734
- * - Directive `then` values: at most one position field, no empty `goTo: {}`
735
- */
736
- private validateBranches(branches: BranchMap<TContext, TData>): void {
737
- if (branches.length === 0) {
738
- throw new FlowConfigurationError(
739
- `[FlowConfigurationError] Empty branches array on step "${this.id}": branches must contain at least one entry. Add branch entries or remove the branches field.`
740
- );
741
- }
742
-
743
- const POSITION_FIELDS = ['goTo', 'goToStep', 'complete', 'abort', 'reset'] as const;
744
-
745
- for (let i = 0; i < branches.length; i++) {
746
- const entry = branches[i];
747
- const isLast = i === branches.length - 1;
748
-
749
- // Non-last entry without `when` or `if` is dead code — later entries are unreachable
750
- if (!isLast && !entry.when && !entry.if) {
751
- throw new FlowConfigurationError(
752
- `[FlowConfigurationError] Dead-code branch at index ${i}: branches[${i}] has neither "when" nor "if" and is not the last entry. Entries after index ${i} are unreachable. Move the unconditional entry to the end or add a condition.`
753
- );
754
- }
755
-
756
- // Validate Directive `then` values
757
- if (entry.then && typeof entry.then === 'object') {
758
- const directive = entry.then;
759
-
760
- // Check for multiple position fields
761
- const setPositionFields = POSITION_FIELDS.filter(
762
- (field) => directive[field] !== undefined
763
- );
764
- if (setPositionFields.length > 1) {
765
- throw new FlowConfigurationError(
766
- `[FlowConfigurationError] Multiple position fields in branches[${i}].then: Directive sets ${setPositionFields.join(', ')}. At most one position field is allowed per Directive. Remove all but one.`
767
- );
768
- }
769
-
770
- // Check for empty goTo: {}
771
- if (directive.goTo !== undefined && typeof directive.goTo === 'object' && directive.goTo !== null) {
772
- const goToObj = directive.goTo as Record<string, unknown>;
773
- if (Object.keys(goToObj).length === 0) {
774
- throw new FlowConfigurationError(
775
- `[FlowConfigurationError] Empty goTo in branches[${i}].then: Directive has "goTo: {}" with no flow target. Provide at least a flow id or title.`
776
- );
777
- }
778
- }
779
- }
780
- }
781
- }
782
- }