@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
@@ -1,1098 +0,0 @@
1
- /**
2
- * ToolManager - Centralized tool management with simplified creation APIs
3
- */
4
- import { ToolScope } from "../types/index.js";
5
- import { logger, isToolResultLike, extractResultDirectives } from "../utils/index.js";
6
- import { StreamingToolExecutor } from "./StreamingToolExecutor.js";
7
- import { evaluateToolGates } from "./toolGates.js";
8
- /**
9
- * Error thrown when tool creation fails
10
- */
11
- export class ToolCreationError extends Error {
12
- constructor(message, toolId, cause) {
13
- super(message);
14
- this.toolId = toolId;
15
- this.cause = cause;
16
- this.name = 'ToolCreationError';
17
- }
18
- }
19
- /**
20
- * Error thrown when tool execution fails
21
- */
22
- export class ToolExecutionError extends Error {
23
- constructor(message, toolId, executionContext, cause) {
24
- super(message);
25
- this.toolId = toolId;
26
- this.executionContext = executionContext;
27
- this.cause = cause;
28
- this.name = 'ToolExecutionError';
29
- }
30
- }
31
- /**
32
- * ToolManager - Centralized tool management with simplified APIs
33
- */
34
- export class ToolManager {
35
- constructor(agent) {
36
- this.agent = agent;
37
- /**
38
- * Per-turn transient tool layer populated from Directive.injectTools.
39
- * Resolution order: transient → step → flow → agent.
40
- * Drained at end of turn via try/finally guard.
41
- *
42
- * Tools are deduplicated by `id` with last-definition-wins when
43
- * multiple pre-LLM emitters contribute tools in the same turn.
44
- */
45
- this.transientTools = new Map();
46
- this.toolRegistry = new Map();
47
- }
48
- /**
49
- * Set the transient tool layer for the current turn.
50
- *
51
- * Accepts the merged `injectTools` array from pre-LLM emitters
52
- * (concatenated in outer-to-inner order).
53
- * Deduplicates by tool `id` with last-definition-wins.
54
- *
55
- * Must be paired with `clearTransientTools()` in a try/finally guard
56
- * so the layer is drained even on abnormal termination.
57
- */
58
- setTransientTools(tools) {
59
- this.transientTools.clear();
60
- for (const tool of tools) {
61
- this.transientTools.set(tool.id, tool);
62
- }
63
- if (this.transientTools.size > 0) {
64
- logger.debug(`[ToolManager] Set transient tools for turn: ${Array.from(this.transientTools.keys()).join(', ')}`);
65
- }
66
- }
67
- /**
68
- * Clear the transient tool layer. Called at end of turn via try/finally
69
- * guard so tools do not leak into subsequent turns.
70
- */
71
- clearTransientTools() {
72
- if (this.transientTools.size > 0) {
73
- logger.debug(`[ToolManager] Cleared transient tools: ${Array.from(this.transientTools.keys()).join(', ')}`);
74
- }
75
- this.transientTools.clear();
76
- }
77
- /**
78
- * Check whether the transient layer currently has any tools.
79
- * Useful for testing and debugging.
80
- */
81
- hasTransientTools() {
82
- return this.transientTools.size > 0;
83
- }
84
- /**
85
- * Validate a tool definition for completeness and correctness
86
- */
87
- validateToolDefinition(definition) {
88
- const errors = [];
89
- // Required fields validation
90
- if (!definition.id || typeof definition.id !== 'string') {
91
- errors.push('Tool ID is required and must be a non-empty string');
92
- }
93
- else if (definition.id.trim() === '') {
94
- errors.push('Tool ID cannot be empty or whitespace only');
95
- }
96
- else if (!/^[a-zA-Z0-9_-]+$/.test(definition.id)) {
97
- errors.push('Tool ID must contain only alphanumeric characters, underscores, and hyphens');
98
- }
99
- if (!definition.handler || typeof definition.handler !== 'function') {
100
- errors.push('Tool handler is required and must be a function');
101
- }
102
- if (definition.description !== undefined && (typeof definition.description !== 'string' || definition.description.trim() === '')) {
103
- errors.push('Tool description must be a non-empty string if provided');
104
- }
105
- // Parameters validation (basic JSON schema check)
106
- if (definition.parameters !== undefined) {
107
- try {
108
- if (typeof definition.parameters === 'object' && definition.parameters !== null) {
109
- // Basic validation for JSON schema structure
110
- const params = definition.parameters;
111
- if ('type' in params && params.type && typeof params.type !== 'string') {
112
- errors.push('Tool parameters type must be a string if specified');
113
- }
114
- if ('properties' in params && params.properties && typeof params.properties !== 'object') {
115
- errors.push('Tool parameters properties must be an object if specified');
116
- }
117
- }
118
- else if (typeof definition.parameters !== 'string') {
119
- errors.push('Tool parameters must be an object (JSON schema) or string if provided');
120
- }
121
- }
122
- catch {
123
- errors.push('Tool parameters must be valid JSON schema or string');
124
- }
125
- }
126
- if (errors.length > 0) {
127
- throw new ToolCreationError(`[ToolCreationError] Tool definition validation failed for "${definition.id || 'unknown'}": ${errors.join('; ')}. ` +
128
- `Fix the tool definition to meet the required schema.`, definition.id || 'unknown');
129
- }
130
- }
131
- /**
132
- * Validate data enrichment configuration
133
- */
134
- validateDataEnrichmentConfig(config) {
135
- const errors = [];
136
- if (!config.fields || !Array.isArray(config.fields) || config.fields.length === 0) {
137
- errors.push('Data enrichment fields must be a non-empty array');
138
- }
139
- if (!config.enricher || typeof config.enricher !== 'function') {
140
- errors.push('Data enrichment enricher must be a function');
141
- }
142
- if (errors.length > 0) {
143
- throw new ToolCreationError(`[ToolCreationError] Data enrichment config validation failed for "${config.id || 'unknown'}": ${errors.join('; ')}. ` +
144
- `Fix the enrichment config to satisfy the required fields.`, config.id || 'unknown');
145
- }
146
- }
147
- /**
148
- * Validate validation configuration
149
- */
150
- validateValidationConfig(config) {
151
- const errors = [];
152
- if (!config.fields || !Array.isArray(config.fields) || config.fields.length === 0) {
153
- errors.push('Validation fields must be a non-empty array');
154
- }
155
- if (!config.validator || typeof config.validator !== 'function') {
156
- errors.push('Validation validator must be a function');
157
- }
158
- if (errors.length > 0) {
159
- throw new ToolCreationError(`[ToolCreationError] Validation config validation failed for "${config.id || 'unknown'}": ${errors.join('; ')}. ` +
160
- `Fix the validation config to satisfy the required fields.`, config.id || 'unknown');
161
- }
162
- }
163
- /**
164
- * Validate API call configuration
165
- */
166
- validateApiCallConfig(config) {
167
- const errors = [];
168
- if (!config.endpoint) {
169
- errors.push('API call endpoint is required');
170
- }
171
- else if (typeof config.endpoint !== 'string' && typeof config.endpoint !== 'function') {
172
- errors.push('API call endpoint must be a string or function');
173
- }
174
- if (config.method && !['GET', 'POST', 'PUT', 'DELETE'].includes(config.method)) {
175
- errors.push('API call method must be one of: GET, POST, PUT, DELETE');
176
- }
177
- if (config.headers && typeof config.headers !== 'object' && typeof config.headers !== 'function') {
178
- errors.push('API call headers must be an object or function');
179
- }
180
- if (config.body && typeof config.body !== 'function') {
181
- errors.push('API call body must be a function');
182
- }
183
- if (config.transform && typeof config.transform !== 'function') {
184
- errors.push('API call transform must be a function');
185
- }
186
- if (errors.length > 0) {
187
- throw new ToolCreationError(`[ToolCreationError] API call config validation failed for "${config.id || 'unknown'}": ${errors.join('; ')}. ` +
188
- `Fix the API call config to satisfy the required fields.`, config.id || 'unknown');
189
- }
190
- }
191
- /**
192
- * Validate computation configuration
193
- */
194
- validateComputationConfig(config) {
195
- const errors = [];
196
- if (!config.inputs || !Array.isArray(config.inputs) || config.inputs.length === 0) {
197
- errors.push('Computation inputs must be a non-empty array');
198
- }
199
- if (!config.compute || typeof config.compute !== 'function') {
200
- errors.push('Computation compute function is required');
201
- }
202
- if (errors.length > 0) {
203
- throw new ToolCreationError(`[ToolCreationError] Computation config validation failed for "${config.id || 'unknown'}": ${errors.join('; ')}. ` +
204
- `Fix the computation config to satisfy the required fields.`, config.id || 'unknown');
205
- }
206
- }
207
- /**
208
- * Create a tool instance with type inference from parent Agent
209
- * Does not register the tool anywhere - just creates it
210
- */
211
- create(definition) {
212
- try {
213
- // Validate the tool definition first
214
- this.validateToolDefinition(definition);
215
- logger.debug(`[ToolManager] Created tool: ${definition.id}`);
216
- return definition;
217
- }
218
- catch (error) {
219
- throw new ToolCreationError(`[ToolCreationError] Failed to create tool "${definition.id}": ${error instanceof Error ? error.message : String(error)}. ` +
220
- `Ensure the tool definition passes validation.`, definition.id, error instanceof Error ? error : undefined);
221
- }
222
- }
223
- /**
224
- * Register a tool in the registry for later reference by ID
225
- * Can accept a tool instance
226
- */
227
- register(tool) {
228
- try {
229
- if (!tool) {
230
- throw new ToolCreationError('[ToolCreationError] Tool registration failed: no tool provided. Pass a valid tool object with id and handler.', 'unknown');
231
- }
232
- if (!('handler' in tool) || typeof tool.handler !== 'function') {
233
- throw new ToolCreationError(`[ToolCreationError] Invalid tool for registration: tool "${tool?.id || 'unknown'}" must have a handler function. Add a handler property.`, tool?.id || 'unknown');
234
- }
235
- // Validate the tool
236
- if (!tool.id || typeof tool.id !== 'string' || tool.id.trim() === '') {
237
- throw new ToolCreationError('[ToolCreationError] Tool ID missing: tool ID is required and must be a non-empty string. Provide a unique string id.', tool.id || 'unknown');
238
- }
239
- // Check for ID conflicts and provide better error context
240
- if (this.toolRegistry.has(tool.id)) {
241
- const existingTool = this.toolRegistry.get(tool.id);
242
- logger.warn(`[ToolManager] Overwriting existing registered tool: ${tool.id} (previous: ${existingTool?.id || 'unnamed'})`);
243
- }
244
- this.toolRegistry.set(tool.id, tool);
245
- logger.debug(`[ToolManager] Registered tool: ${tool.id} (${tool.id || 'unnamed'})`);
246
- return tool;
247
- }
248
- catch (error) {
249
- if (error instanceof ToolCreationError) {
250
- throw error;
251
- }
252
- const toolId = tool?.id || 'unknown';
253
- throw new ToolCreationError(`[ToolCreationError] Failed to register tool "${toolId}": ${error instanceof Error ? error.message : String(error)}. ` +
254
- `Ensure the tool object is valid and has id + handler.`, toolId, error instanceof Error ? error : undefined);
255
- }
256
- }
257
- /**
258
- * Register multiple tools at once
259
- */
260
- registerMany(tools) {
261
- return tools.map(tool => this.register(tool));
262
- }
263
- /**
264
- * Get a registered tool by ID
265
- */
266
- getRegisteredTool(toolId) {
267
- return this.toolRegistry.get(toolId);
268
- }
269
- /**
270
- * Get all registered tools
271
- */
272
- getAllRegistered() {
273
- return new Map(this.toolRegistry);
274
- }
275
- /**
276
- * Check if a tool is registered
277
- */
278
- isRegistered(toolId) {
279
- return this.toolRegistry.has(toolId);
280
- }
281
- /**
282
- * Get all registered tool IDs
283
- */
284
- getRegisteredIds() {
285
- return Array.from(this.toolRegistry.keys());
286
- }
287
- /**
288
- * Get tool by ID from a specific scope
289
- */
290
- getFromScope(toolId, scope, step, flow) {
291
- return this.find(toolId, scope, step, flow);
292
- }
293
- /**
294
- * Check if a tool exists in any scope
295
- */
296
- exists(toolId, step, flow) {
297
- return this.find(toolId, ToolScope.ALL, step, flow) !== undefined;
298
- }
299
- /**
300
- * Get tool count by scope
301
- */
302
- getToolCount(scope, step, flow) {
303
- return this.getAvailable(scope, step, flow).length;
304
- }
305
- /**
306
- * Clear all registered tools
307
- */
308
- clearRegistry() {
309
- this.toolRegistry.clear();
310
- logger.debug('[ToolManager] Cleared tool registry');
311
- }
312
- /**
313
- * Remove a tool from registry
314
- */
315
- unregister(toolId) {
316
- const existed = this.toolRegistry.has(toolId);
317
- this.toolRegistry.delete(toolId);
318
- if (existed) {
319
- logger.debug(`[ToolManager] Unregistered tool: ${toolId}`);
320
- }
321
- return existed;
322
- }
323
- /**
324
- * Add a tool to the agent scope (creates and adds in one operation)
325
- */
326
- addToAgent(tool) {
327
- // Validate tool before adding
328
- if (!tool || !tool.id || !tool.handler) {
329
- throw new ToolCreationError(`[ToolCreationError] Invalid tool for addToAgent: tool must have id and handler properties. ` +
330
- `Provide a complete tool object with { id, handler, ... }.`, tool?.id || 'unknown');
331
- }
332
- // Add to agent's tools array using the unified interface
333
- if (this.agent) {
334
- this.agent.addTool(tool);
335
- }
336
- else {
337
- logger.warn(`[ToolManager] No agent available, tool not added to agent scope: ${tool.id}`);
338
- }
339
- logger.debug(`[ToolManager] Added tool to agent scope: ${tool.id}`);
340
- return tool;
341
- }
342
- /**
343
- * Add a tool to a specific flow scope (creates and adds in one operation)
344
- */
345
- addToFlow(flow, tool) {
346
- // Add to flow's tools array using the existing createTool method
347
- if (flow && typeof flow.createTool === 'function') {
348
- flow.createTool(tool);
349
- }
350
- else {
351
- logger.warn(`[ToolManager] Flow does not support createTool method, tool not added to flow scope: ${tool.id}`);
352
- }
353
- logger.debug(`[ToolManager] Added tool to flow scope: ${tool.id}`);
354
- return tool;
355
- }
356
- /**
357
- * Find a tool by ID across different scopes with enhanced resolution logic
358
- * Priority: transient → step → flow → agent → registry
359
- * Supports both ID and name matching for better compatibility
360
- */
361
- find(toolId, scope, step, flow) {
362
- logger.debug(`[ToolManager] Finding tool: ${toolId} with scope: ${scope || 'ALL'}`);
363
- // Check transient tools first (highest priority — per-turn injectTools)
364
- if (!scope || scope === ToolScope.ALL) {
365
- const transientTool = this.transientTools.get(toolId);
366
- if (transientTool) {
367
- logger.debug(`[ToolManager] Found tool in transient scope: ${toolId}`);
368
- return transientTool;
369
- }
370
- }
371
- // Check step-level tools (if step provided and scope allows)
372
- if (step && (!scope || scope === ToolScope.STEP || scope === ToolScope.ALL)) {
373
- if (step.tools) {
374
- for (const toolRef of step.tools) {
375
- if (typeof toolRef !== 'string') {
376
- // Inline tool object - check both id and name
377
- if (toolRef.id === toolId) {
378
- logger.debug(`[ToolManager] Found tool in step scope: ${toolId}`);
379
- return toolRef;
380
- }
381
- }
382
- else {
383
- // String reference - check if it matches and resolve from registry
384
- if (toolRef === toolId) {
385
- const registeredTool = this.toolRegistry.get(toolId);
386
- if (registeredTool) {
387
- logger.debug(`[ToolManager] Found tool reference in step, resolved from registry: ${toolId}`);
388
- return registeredTool;
389
- }
390
- }
391
- }
392
- }
393
- }
394
- }
395
- // Check flow-level tools (if route provided and scope allows)
396
- if (flow && (!scope || scope === ToolScope.FLOW || scope === ToolScope.ALL)) {
397
- if (flow.tools) {
398
- const flowTool = flow.tools.find((t) => t.id === toolId);
399
- if (flowTool) {
400
- logger.debug(`[ToolManager] Found tool in flow scope: ${toolId}`);
401
- return flowTool;
402
- }
403
- }
404
- }
405
- // Check agent-level tools (if scope allows)
406
- if (!scope || scope === ToolScope.AGENT || scope === ToolScope.ALL) {
407
- if (this.agent) {
408
- const agentTools = this.agent.getTools();
409
- const agentTool = agentTools.find((t) => t.id === toolId);
410
- if (agentTool) {
411
- logger.debug(`[ToolManager] Found tool in agent scope: ${toolId}`);
412
- return agentTool;
413
- }
414
- }
415
- }
416
- // Check registry (if scope allows)
417
- if (!scope || scope === ToolScope.REGISTERED || scope === ToolScope.ALL) {
418
- const registeredTool = this.toolRegistry.get(toolId);
419
- if (registeredTool) {
420
- logger.debug(`[ToolManager] Found tool in registry: ${toolId}`);
421
- return registeredTool;
422
- }
423
- // Also check by name in registry
424
- for (const [id, tool] of Array.from(this.toolRegistry.entries())) {
425
- if (tool.id === toolId) {
426
- logger.debug(`[ToolManager] Found tool in registry by name: ${toolId} (id: ${id})`);
427
- return tool;
428
- }
429
- }
430
- }
431
- logger.debug(`[ToolManager] Tool not found: ${toolId}`);
432
- return undefined;
433
- }
434
- /**
435
- * Get available tools for current context with enhanced resolution and deduplication
436
- * Returns tools in priority order with higher-priority scopes taking precedence
437
- * Resolution order: transient → step → flow → agent → registry
438
- */
439
- getAvailable(scope, step, flow) {
440
- const toolMap = new Map();
441
- const resolvedTools = [];
442
- logger.debug(`[ToolManager] Getting available tools with scope: ${scope || 'ALL'}`);
443
- // Add registered tools first (lowest priority)
444
- if (!scope || scope === ToolScope.REGISTERED || scope === ToolScope.ALL) {
445
- for (const [id, tool] of Array.from(this.toolRegistry.entries())) {
446
- toolMap.set(id, tool);
447
- }
448
- logger.debug(`[ToolManager] Added ${this.toolRegistry.size} registered tools`);
449
- }
450
- // Add agent-level tools (override registered tools with same ID)
451
- if (!scope || scope === ToolScope.AGENT || scope === ToolScope.ALL) {
452
- if (this.agent) {
453
- const agentTools = this.agent.getTools();
454
- for (const tool of agentTools) {
455
- toolMap.set(tool.id, tool);
456
- }
457
- logger.debug(`[ToolManager] Added ${agentTools.length} agent tools`);
458
- }
459
- }
460
- // Add route-level tools (override agent and registered tools with same ID)
461
- if (flow && (!scope || scope === ToolScope.FLOW || scope === ToolScope.ALL)) {
462
- if (flow.tools) {
463
- for (const tool of flow.tools) {
464
- toolMap.set(tool.id, tool);
465
- }
466
- logger.debug(`[ToolManager] Added ${flow.tools.length} flow.tools`);
467
- }
468
- }
469
- // Add step-level tools (override flow/agent/registry with same ID)
470
- if (step && (!scope || scope === ToolScope.STEP || scope === ToolScope.ALL)) {
471
- if (step.tools) {
472
- for (const toolRef of step.tools) {
473
- if (typeof toolRef !== 'string') {
474
- // Inline tool object - add directly
475
- toolMap.set(toolRef.id, toolRef);
476
- resolvedTools.push(toolRef);
477
- }
478
- else {
479
- // String reference - resolve from registry and add if found
480
- const registeredTool = this.toolRegistry.get(toolRef);
481
- if (registeredTool) {
482
- toolMap.set(registeredTool.id, registeredTool);
483
- resolvedTools.push(registeredTool);
484
- }
485
- else {
486
- logger.warn(`[ToolExecutionError] Step references unknown tool: "${toolRef}" is not registered. Skipping. Register the tool or remove the reference.`);
487
- }
488
- }
489
- }
490
- logger.debug(`[ToolManager] Added ${step.tools.length} step tools (${resolvedTools.length} resolved)`);
491
- }
492
- }
493
- // Add transient tools (highest priority — override everything with same ID)
494
- if (!scope || scope === ToolScope.ALL) {
495
- if (this.transientTools.size > 0) {
496
- for (const [id, tool] of this.transientTools) {
497
- toolMap.set(id, tool);
498
- }
499
- logger.debug(`[ToolManager] Added ${this.transientTools.size} transient tools`);
500
- }
501
- }
502
- // Convert map to array, preserving priority order
503
- const allTools = Array.from(toolMap.values());
504
- // If we have step-specific tools, prioritize them in the ordering
505
- // (but transient tools that override step tools via same ID are already in the map)
506
- if (resolvedTools.length > 0) {
507
- // Add resolved step tools first, then other tools not already included
508
- const stepToolIds = new Set(resolvedTools.map(t => t.id));
509
- const otherTools = allTools.filter(t => !stepToolIds.has(t.id));
510
- // For step tools, use the map version (which may be overridden by transient)
511
- const finalStepTools = resolvedTools.map(t => toolMap.get(t.id) || t);
512
- return [...finalStepTools, ...otherTools];
513
- }
514
- logger.debug(`[ToolManager] Returning ${allTools.length} available tools`);
515
- return allTools;
516
- }
517
- /**
518
- * Execute a single tool with context and collected data.
519
- */
520
- async executeTool(params) {
521
- const { tool, context, updateContext, updateData, history, data, toolArguments } = params;
522
- const startTime = Date.now();
523
- const executionTimeout = 30000; // 30 seconds default timeout
524
- try {
525
- // Validate tool before execution
526
- if (!tool || !tool.handler || typeof tool.handler !== 'function') {
527
- return {
528
- success: false,
529
- error: `Invalid tool: ${tool?.id || 'unknown'} - missing or invalid handler`,
530
- metadata: { toolId: tool?.id, executionTime: 0 }
531
- };
532
- }
533
- // Build tool context with complete agent data
534
- const collectedDirectives = [];
535
- const toolContext = {
536
- context,
537
- updateContext,
538
- updateData,
539
- history,
540
- data: data || {},
541
- getField: (key) => {
542
- return data?.[key];
543
- },
544
- setField: async (key, value) => {
545
- const update = {};
546
- update[key] = value;
547
- await updateData(update);
548
- },
549
- hasField: (key) => {
550
- return data != null && key in data;
551
- },
552
- dispatch: (directive) => {
553
- collectedDirectives.push(directive);
554
- }
555
- };
556
- logger.debug(`[ToolManager] Executing tool: ${tool.id} with args:`, toolArguments);
557
- // Pre-execution gates (validateInput → checkPermissions). Shared with the
558
- // streaming executor (StreamingToolExecutor) so authorization/validation
559
- // behave identically on every transport. When a gate denies, the handler
560
- // is NOT invoked.
561
- const gateDenial = await evaluateToolGates(tool, toolArguments, toolContext, startTime);
562
- if (gateDenial) {
563
- return gateDenial;
564
- }
565
- // Execute tool with timeout protection. The timer is cleared when the
566
- // race settles AND unref'd so a pending timer never delays process
567
- // shutdown; a handler that loses the race keeps running detached (its
568
- // result is discarded), which we surface in a warn.
569
- let timeoutTimer;
570
- const timeoutPromise = new Promise((_, reject) => {
571
- timeoutTimer = setTimeout(() => reject(new Error(`Tool execution timeout after ${executionTimeout}ms`)), executionTimeout);
572
- timeoutTimer.unref?.();
573
- });
574
- let result;
575
- try {
576
- // Attach a no-op catch to the losing handler promise so a post-timeout
577
- // rejection can't surface as an unhandled rejection and crash the process.
578
- const handlerPromise = Promise.resolve(tool.handler(toolContext, toolArguments));
579
- handlerPromise.catch(() => undefined);
580
- result = await Promise.race([handlerPromise, timeoutPromise]);
581
- }
582
- finally {
583
- clearTimeout(timeoutTimer);
584
- }
585
- const executionTime = Date.now() - startTime;
586
- logger.debug(`[ToolManager] Tool ${tool.id} completed in ${executionTime}ms`);
587
- // Handle different result types. Only SEMANTIC markers identify a
588
- // ToolResult — bare `{data}` / `{error}` shapes are indistinguishable
589
- // from ordinary business payloads (e.g. upstream API envelopes) and are
590
- // wrapped as raw results instead.
591
- let toolResult;
592
- if (isToolResultLike(result)) {
593
- // It's already a ToolResult-like object
594
- toolResult = result;
595
- }
596
- else {
597
- // It's a raw result - wrap it
598
- toolResult = {
599
- data: result,
600
- success: true
601
- };
602
- }
603
- // Collect directives from the result — singular and plural forms both
604
- // count, ordered identically to the concurrent executor.
605
- collectedDirectives.push(...extractResultDirectives(toolResult));
606
- // Apply data updates from tool result with validation
607
- if (toolResult.dataUpdate) {
608
- try {
609
- if (typeof toolResult.dataUpdate === 'object' && toolResult.dataUpdate !== null) {
610
- await updateData(toolResult.dataUpdate);
611
- }
612
- else {
613
- logger.warn(`[DataValidationError] Tool "${tool.id}" returned invalid dataUpdate: expected object, got ${typeof toolResult.dataUpdate}. Fix the tool handler to return a valid dataUpdate object.`);
614
- }
615
- }
616
- catch (updateError) {
617
- logger.error(`[ToolManager] Failed to apply data update from tool ${tool.id}:`, updateError);
618
- return {
619
- success: false,
620
- error: `Failed to apply data update: ${updateError instanceof Error ? updateError.message : String(updateError)}`,
621
- metadata: { toolId: tool.id, executionTime, updateError: updateError instanceof Error ? updateError.message : String(updateError) }
622
- };
623
- }
624
- }
625
- // Apply context updates from tool result with validation
626
- if (toolResult.contextUpdate) {
627
- try {
628
- if (typeof toolResult.contextUpdate === 'object' && toolResult.contextUpdate !== null) {
629
- await updateContext(toolResult.contextUpdate);
630
- }
631
- else {
632
- logger.warn(`[DataValidationError] Tool "${tool.id}" returned invalid contextUpdate: expected object, got ${typeof toolResult.contextUpdate}. Fix the tool handler to return a valid contextUpdate object.`);
633
- }
634
- }
635
- catch (updateError) {
636
- logger.error(`[ToolManager] Failed to apply context update from tool ${tool.id}:`, updateError);
637
- return {
638
- success: false,
639
- error: `Failed to apply context update: ${updateError instanceof Error ? updateError.message : String(updateError)}`,
640
- metadata: { toolId: tool.id, executionTime, updateError: updateError instanceof Error ? updateError.message : String(updateError) }
641
- };
642
- }
643
- }
644
- // Return execution result with metadata
645
- return {
646
- success: toolResult.success !== false, // Default to true unless explicitly false
647
- data: toolResult.data,
648
- contextUpdate: toolResult.contextUpdate,
649
- dataUpdate: toolResult.dataUpdate,
650
- error: toolResult.error,
651
- directives: collectedDirectives.length > 0 ? collectedDirectives : undefined,
652
- metadata: {
653
- toolId: tool.id,
654
- toolName: tool.id,
655
- executionTime,
656
- ...(toolResult.meta || {})
657
- }
658
- };
659
- }
660
- catch (error) {
661
- const executionTime = Date.now() - startTime;
662
- logger.error(`[ToolManager] Tool execution error for ${tool.id} after ${executionTime}ms:`, error);
663
- if (error instanceof Error && error.message.includes("Tool execution timeout")) {
664
- // The losing handler may still be running with captured callbacks.
665
- // Its writes are NOT rolled back here — tools should stay idempotent
666
- // or accept their own cancellation via interruptBehavior/abort.
667
- logger.warn(`[ToolManager] Handler for "${tool.id}" exceeded ${executionTimeout}ms and was abandoned while still running. ` +
668
- `Its eventual side effects are not cancelled or rolled back.`);
669
- }
670
- // Re-throw the error so callers can handle it
671
- throw error;
672
- }
673
- }
674
- /**
675
- * Execute tool calls with concurrency control using StreamingToolExecutor.
676
- * Creates a StreamingToolExecutor, resolves tools, queues them, and yields
677
- * ToolExecutionUpdate results in original request order.
678
- *
679
- * Concurrency-safe tools run in parallel; non-safe tools run serially.
680
- * Progress messages are yielded immediately.
681
- */
682
- async *executeWithConcurrency(params) {
683
- const { toolCalls, context, data, history, signal, flow, step } = params;
684
- if (toolCalls.length === 0) {
685
- return;
686
- }
687
- // Build a ToolContext for the executor
688
- const toolContext = {
689
- context,
690
- data: data || {},
691
- history: history || [],
692
- step: step ? { id: step.id, flowId: flow?.id || '' } : undefined,
693
- updateContext: (updates) => {
694
- Object.assign(context, updates);
695
- return Promise.resolve();
696
- },
697
- updateData: (updates) => {
698
- if (data) {
699
- Object.assign(data, updates);
700
- }
701
- return Promise.resolve();
702
- },
703
- getField: (key) => {
704
- return data?.[key];
705
- },
706
- setField: (key, value) => {
707
- if (data) {
708
- data[key] = value;
709
- }
710
- return Promise.resolve();
711
- },
712
- hasField: (key) => {
713
- return data != null && key in data;
714
- },
715
- dispatch: (_directive) => {
716
- // Handlers never see THIS context — StreamingToolExecutor.executeTool
717
- // wraps each call in a per-call context whose dispatch attributes the
718
- // directive to that tool. Reaching here means a gate or future caller
719
- // dispatched outside a tool execution; surface it instead of dropping.
720
- logger.warn("[ToolManager] ctx.dispatch called outside tool execution has no turn to attach to; directive dropped.");
721
- },
722
- };
723
- const executor = new StreamingToolExecutor(toolContext, {
724
- signal,
725
- });
726
- // Resolve and queue each tool call
727
- for (const toolCall of toolCalls) {
728
- const tool = this.find(toolCall.toolName, undefined, step, flow);
729
- if (!tool) {
730
- logger.warn(`[ToolExecutionError] Tool not found for concurrent execution: "${toolCall.toolName}" is not registered in any scope. Skipping. Register the tool or check the tool name.`);
731
- continue;
732
- }
733
- // Tool carries all metadata fields directly — no cast needed
734
- executor.addTool(toolCall, tool);
735
- }
736
- // Yield all results in order
737
- yield* executor.getRemainingResults();
738
- }
739
- /**
740
- * Create a data enrichment tool that modifies collected data
741
- * Returns a tool instance that can be registered or added to scope
742
- */
743
- createDataEnrichment(config) {
744
- // Validate configuration first
745
- this.validateDataEnrichmentConfig(config);
746
- const tool = {
747
- id: config.id,
748
- description: config.description || `Enriches data fields: ${config.fields.join(', ')}`,
749
- parameters: {
750
- type: 'object',
751
- properties: {
752
- fields: {
753
- type: 'array',
754
- items: { type: 'string' },
755
- description: `Fields to enrich: ${config.fields.join(', ')}`
756
- }
757
- }
758
- },
759
- handler: async (context) => {
760
- try {
761
- // Extract the specified fields from current data
762
- const fieldData = {};
763
- for (const field of config.fields) {
764
- if (context.hasField(field)) {
765
- const value = context.getField(field);
766
- if (value !== undefined) {
767
- fieldData[field] = value;
768
- }
769
- }
770
- }
771
- // Call the enricher function
772
- const enrichedData = await config.enricher(context.context, fieldData);
773
- // Update the data with enriched values
774
- if (enrichedData && typeof enrichedData === 'object') {
775
- await context.updateData(enrichedData);
776
- }
777
- logger.debug(`[ToolManager] Data enrichment completed for tool: ${config.id}`);
778
- return {
779
- success: true,
780
- dataUpdate: enrichedData
781
- };
782
- }
783
- catch (error) {
784
- const errorMessage = error instanceof Error ? error.message : String(error);
785
- logger.error(`[ToolManager] Data enrichment failed for ${config.id}: ${errorMessage}`);
786
- throw new ToolExecutionError(`[ToolExecutionError] Data enrichment failed for tool "${config.id}": ${errorMessage}. ` +
787
- `Check the enrichment handler and field references.`, config.id, { fields: config.fields }, error instanceof Error ? error : undefined);
788
- }
789
- }
790
- };
791
- return tool;
792
- }
793
- /**
794
- * Create a validation tool that validates data fields
795
- * Returns a tool instance that can be registered or added to scope
796
- */
797
- createValidation(config) {
798
- // Validate configuration first
799
- this.validateValidationConfig(config);
800
- const tool = {
801
- id: config.id,
802
- description: config.description || `Validates data fields: ${config.fields.join(', ')}`,
803
- parameters: {
804
- type: 'object',
805
- properties: {
806
- fields: {
807
- type: 'array',
808
- items: { type: 'string' },
809
- description: `Fields to validate: ${config.fields.join(', ')}`
810
- }
811
- }
812
- },
813
- handler: async (context) => {
814
- try {
815
- // Extract the specified fields from current data
816
- const fieldData = {};
817
- for (const field of config.fields) {
818
- if (context.hasField(field)) {
819
- const value = context.getField(field);
820
- if (value !== undefined) {
821
- fieldData[field] = value;
822
- }
823
- }
824
- }
825
- // Call the validator function
826
- const result = await config.validator(context.context, fieldData);
827
- logger.debug(`[ToolManager] Validation completed for tool: ${config.id}, valid: ${result.valid}`);
828
- return result;
829
- }
830
- catch (error) {
831
- const errorMessage = error instanceof Error ? error.message : String(error);
832
- logger.error(`[ToolManager] Validation failed for ${config.id}: ${errorMessage}`);
833
- // Return validation failure result instead of throwing
834
- return {
835
- valid: false,
836
- errors: [{
837
- field: 'validation',
838
- message: `Validation error: ${errorMessage}`,
839
- value: undefined,
840
- schemaPath: config.id
841
- }],
842
- warnings: []
843
- };
844
- }
845
- }
846
- };
847
- return tool;
848
- }
849
- /**
850
- * Create an API call tool that makes external HTTP requests
851
- * Returns a tool instance that can be registered or added to scope
852
- */
853
- createApiCall(config) {
854
- // Validate configuration first
855
- this.validateApiCallConfig(config);
856
- const tool = {
857
- id: config.id,
858
- description: config.description || `Makes API call to external service`,
859
- parameters: {
860
- type: 'object',
861
- properties: {
862
- endpoint: {
863
- type: 'string',
864
- description: 'API endpoint URL'
865
- },
866
- method: {
867
- type: 'string',
868
- enum: ['GET', 'POST', 'PUT', 'DELETE'],
869
- description: 'HTTP method'
870
- }
871
- }
872
- },
873
- handler: async (context, args) => {
874
- try {
875
- // Resolve endpoint URL
876
- const endpoint = typeof config.endpoint === 'function'
877
- ? config.endpoint(context.context, context.data)
878
- : config.endpoint;
879
- // Resolve headers
880
- const headers = typeof config.headers === 'function'
881
- ? config.headers(context.context)
882
- : config.headers || {};
883
- // Prepare request options
884
- const requestOptions = {
885
- method: config.method || 'GET',
886
- headers: {
887
- 'Content-Type': 'application/json',
888
- ...headers
889
- }
890
- };
891
- // Add body for non-GET requests
892
- if (config.body && (config.method === 'POST' || config.method === 'PUT')) {
893
- const bodyData = config.body(context.context, context.data, args);
894
- requestOptions.body = JSON.stringify(bodyData);
895
- }
896
- // Make the API call
897
- const response = await fetch(endpoint, requestOptions);
898
- if (!response.ok) {
899
- throw new Error(`HTTP ${response.status}: ${response.statusText}`);
900
- }
901
- // Parse response
902
- let responseData;
903
- const contentType = response.headers.get('content-type');
904
- if (contentType && contentType.includes('application/json')) {
905
- responseData = await response.json();
906
- }
907
- else {
908
- responseData = await response.text();
909
- }
910
- // Transform response if transformer provided
911
- const result = config.transform ? config.transform(responseData) : responseData;
912
- logger.debug(`[ToolManager] API call completed for tool: ${config.id}`);
913
- return result;
914
- }
915
- catch (error) {
916
- const errorMessage = error instanceof Error ? error.message : String(error);
917
- logger.error(`[ToolManager] API call failed for ${config.id}: ${errorMessage}`);
918
- throw new ToolExecutionError(`[ToolExecutionError] API call failed for tool "${config.id}": ${errorMessage}. ` +
919
- `Check the endpoint URL, method, and network connectivity.`, config.id, { endpoint: config.endpoint, method: config.method, args }, error instanceof Error ? error : undefined);
920
- }
921
- }
922
- };
923
- return tool;
924
- }
925
- /**
926
- * Create a computation tool that performs calculations on input data
927
- * Returns a tool instance that can be registered or added to scope
928
- */
929
- createComputation(config) {
930
- // Validate configuration first
931
- this.validateComputationConfig(config);
932
- const tool = {
933
- id: config.id,
934
- description: config.description || `Performs computation on inputs: ${config.inputs.join(', ')}`,
935
- parameters: {
936
- type: 'object',
937
- properties: {
938
- inputs: {
939
- type: 'array',
940
- items: { type: 'string' },
941
- description: `Input fields: ${config.inputs.join(', ')}`
942
- }
943
- }
944
- },
945
- handler: async (context, args) => {
946
- try {
947
- // Extract the specified input fields from current data
948
- const inputData = {};
949
- for (const input of config.inputs) {
950
- if (context.hasField(input)) {
951
- const value = context.getField(input);
952
- if (value !== undefined) {
953
- inputData[input] = value;
954
- }
955
- }
956
- }
957
- // Call the compute function
958
- const result = await config.compute(context.context, inputData, args);
959
- logger.debug(`[ToolManager] Computation completed for tool: ${config.id}`);
960
- return result;
961
- }
962
- catch (error) {
963
- const errorMessage = error instanceof Error ? error.message : String(error);
964
- logger.error(`[ToolManager] Computation failed for ${config.id}: ${errorMessage}`);
965
- throw new ToolExecutionError(`[ToolExecutionError] Computation failed for tool "${config.id}": ${errorMessage}. ` +
966
- `Check the compute function and input field references.`, config.id, { inputs: config.inputs, args }, error instanceof Error ? error : undefined);
967
- }
968
- }
969
- };
970
- return tool;
971
- }
972
- /**
973
- * Get detailed information about a tool for debugging
974
- */
975
- getToolInfo(toolId, scope, step, flow) {
976
- const tool = this.find(toolId, scope, step, flow);
977
- if (!tool) {
978
- return { found: false };
979
- }
980
- // Determine which scope the tool was found in
981
- let foundScope = 'unknown';
982
- // Check step scope
983
- if (step?.tools) {
984
- const stepTool = step.tools.find((t) => (typeof t === 'string' && t === toolId) ||
985
- (typeof t === 'object' && (t.id === toolId)));
986
- if (stepTool)
987
- foundScope = 'step';
988
- }
989
- // Check route scope
990
- if (foundScope === 'unknown' && flow?.tools) {
991
- const flowTool = flow.tools.find((t) => t.id === toolId);
992
- if (flowTool)
993
- foundScope = 'flow';
994
- }
995
- // Check agent scope
996
- if (foundScope === 'unknown' && this.agent) {
997
- const agentTools = this.agent.tools;
998
- const agentTool = agentTools.find((t) => t.id === toolId);
999
- if (agentTool)
1000
- foundScope = 'agent';
1001
- }
1002
- // Check registry
1003
- if (foundScope === 'unknown' && this.toolRegistry.has(toolId)) {
1004
- foundScope = 'registry';
1005
- }
1006
- return {
1007
- found: true,
1008
- tool,
1009
- scope: foundScope,
1010
- metadata: {
1011
- id: tool.id,
1012
- hasDescription: !!tool.description,
1013
- hasParameters: !!tool.parameters,
1014
- handlerLength: tool.handler.length
1015
- }
1016
- };
1017
- }
1018
- /**
1019
- * Validate that all tools in a list exist and are accessible
1020
- */
1021
- validateToolReferences(toolIds, step, flow) {
1022
- const missing = [];
1023
- const found = [];
1024
- const details = [];
1025
- for (const toolId of toolIds) {
1026
- const info = this.getToolInfo(toolId, ToolScope.ALL, step, flow);
1027
- if (info.found) {
1028
- found.push(toolId);
1029
- details.push({ id: toolId, found: true, scope: info.scope });
1030
- }
1031
- else {
1032
- missing.push(toolId);
1033
- details.push({ id: toolId, found: false });
1034
- }
1035
- }
1036
- return {
1037
- valid: missing.length === 0,
1038
- missing,
1039
- found,
1040
- details
1041
- };
1042
- }
1043
- /**
1044
- * Get comprehensive statistics about the tool system
1045
- */
1046
- getStatistics() {
1047
- const registeredToolIds = Array.from(this.toolRegistry.keys());
1048
- const agentTools = this.agent ? this.agent.getTools() : [];
1049
- const agentToolIds = agentTools.map((t) => t.id);
1050
- // Find duplicate IDs between registry and agent
1051
- const duplicateIds = registeredToolIds.filter(id => agentToolIds.includes(id));
1052
- const allAvailable = this.getAvailable();
1053
- return {
1054
- registeredTools: this.toolRegistry.size,
1055
- agentTools: agentTools.length,
1056
- totalAvailable: allAvailable.length,
1057
- registeredToolIds,
1058
- duplicateIds
1059
- };
1060
- }
1061
- /**
1062
- * Perform health check on the tool system
1063
- */
1064
- healthCheck() {
1065
- const issues = [];
1066
- const warnings = [];
1067
- const stats = this.getStatistics();
1068
- // Check for duplicate tool IDs
1069
- if (stats.duplicateIds.length > 0) {
1070
- warnings.push(`Duplicate tool IDs found between registry and agent: ${stats.duplicateIds.join(', ')}`);
1071
- }
1072
- // Check for tools with missing handlers
1073
- for (const [id, tool] of Array.from(this.toolRegistry.entries())) {
1074
- if (!tool.handler || typeof tool.handler !== 'function') {
1075
- issues.push(`Tool '${id}' has invalid or missing handler`);
1076
- }
1077
- if (!tool.id || tool.id.trim() === '') {
1078
- issues.push(`Tool has empty or invalid ID: ${JSON.stringify(tool)}`);
1079
- }
1080
- }
1081
- // Check agent tools if available
1082
- if (this.agent) {
1083
- const agentTools = this.agent.getTools();
1084
- for (const tool of agentTools) {
1085
- if (!tool.handler || typeof tool.handler !== 'function') {
1086
- issues.push(`Agent tool '${tool.id}' has invalid or missing handler`);
1087
- }
1088
- }
1089
- }
1090
- return {
1091
- healthy: issues.length === 0,
1092
- issues,
1093
- warnings,
1094
- statistics: stats
1095
- };
1096
- }
1097
- }
1098
- //# sourceMappingURL=ToolManager.js.map