@falai/agent 3.4.5 → 4.0.0-alpha.10

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