@robota-sdk/agent-core 3.0.0-beta.7 → 3.0.0-beta.71

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 (511) hide show
  1. package/CHANGELOG.md +122 -0
  2. package/README.md +41 -12
  3. package/dist/browser/index.d.ts +3736 -3090
  4. package/dist/browser/index.d.ts.map +1 -0
  5. package/dist/browser/index.js +12 -5
  6. package/dist/browser/index.js.map +1 -0
  7. package/dist/node/index.cjs +11 -5
  8. package/dist/node/index.d.ts +3736 -3090
  9. package/dist/node/index.d.ts.map +1 -0
  10. package/dist/node/index.js +12 -5
  11. package/dist/node/index.js.map +1 -0
  12. package/package.json +8 -5
  13. package/dist/abstracts/abstract-agent.d.ts +0 -56
  14. package/dist/abstracts/abstract-agent.d.ts.map +0 -1
  15. package/dist/abstracts/abstract-agent.js +0 -55
  16. package/dist/abstracts/abstract-agent.js.map +0 -1
  17. package/dist/abstracts/abstract-ai-provider.d.ts +0 -187
  18. package/dist/abstracts/abstract-ai-provider.d.ts.map +0 -1
  19. package/dist/abstracts/abstract-ai-provider.js +0 -252
  20. package/dist/abstracts/abstract-ai-provider.js.map +0 -1
  21. package/dist/abstracts/abstract-executor.d.ts +0 -110
  22. package/dist/abstracts/abstract-executor.d.ts.map +0 -1
  23. package/dist/abstracts/abstract-executor.js +0 -156
  24. package/dist/abstracts/abstract-executor.js.map +0 -1
  25. package/dist/abstracts/abstract-manager.d.ts +0 -42
  26. package/dist/abstracts/abstract-manager.d.ts.map +0 -1
  27. package/dist/abstracts/abstract-manager.js +0 -49
  28. package/dist/abstracts/abstract-manager.js.map +0 -1
  29. package/dist/abstracts/abstract-module.d.ts +0 -365
  30. package/dist/abstracts/abstract-module.d.ts.map +0 -1
  31. package/dist/abstracts/abstract-module.js +0 -474
  32. package/dist/abstracts/abstract-module.js.map +0 -1
  33. package/dist/abstracts/abstract-plugin.d.ts +0 -369
  34. package/dist/abstracts/abstract-plugin.d.ts.map +0 -1
  35. package/dist/abstracts/abstract-plugin.js +0 -258
  36. package/dist/abstracts/abstract-plugin.js.map +0 -1
  37. package/dist/abstracts/abstract-tool.d.ts +0 -175
  38. package/dist/abstracts/abstract-tool.d.ts.map +0 -1
  39. package/dist/abstracts/abstract-tool.js +0 -140
  40. package/dist/abstracts/abstract-tool.js.map +0 -1
  41. package/dist/abstracts/abstract-workflow-converter.d.ts +0 -136
  42. package/dist/abstracts/abstract-workflow-converter.d.ts.map +0 -1
  43. package/dist/abstracts/abstract-workflow-converter.js +0 -252
  44. package/dist/abstracts/abstract-workflow-converter.js.map +0 -1
  45. package/dist/abstracts/abstract-workflow-validator.d.ts +0 -203
  46. package/dist/abstracts/abstract-workflow-validator.d.ts.map +0 -1
  47. package/dist/abstracts/abstract-workflow-validator.js +0 -447
  48. package/dist/abstracts/abstract-workflow-validator.js.map +0 -1
  49. package/dist/abstracts/index.d.ts +0 -6
  50. package/dist/abstracts/index.d.ts.map +0 -1
  51. package/dist/abstracts/index.js +0 -9
  52. package/dist/abstracts/index.js.map +0 -1
  53. package/dist/agents/constants.d.ts +0 -23
  54. package/dist/agents/constants.d.ts.map +0 -1
  55. package/dist/agents/constants.js +0 -22
  56. package/dist/agents/constants.js.map +0 -1
  57. package/dist/agents/index.d.ts +0 -1
  58. package/dist/agents/index.d.ts.map +0 -1
  59. package/dist/agents/index.js +0 -4
  60. package/dist/agents/index.js.map +0 -1
  61. package/dist/agents/robota.test.d.ts +0 -2
  62. package/dist/agents/robota.test.d.ts.map +0 -1
  63. package/dist/agents/robota.test.js +0 -416
  64. package/dist/agents/robota.test.js.map +0 -1
  65. package/dist/browser/builtin-templates.json +0 -107
  66. package/dist/core/robota.d.ts +0 -694
  67. package/dist/core/robota.d.ts.map +0 -1
  68. package/dist/core/robota.js +0 -1277
  69. package/dist/core/robota.js.map +0 -1
  70. package/dist/executors/local-executor.d.ts +0 -96
  71. package/dist/executors/local-executor.d.ts.map +0 -1
  72. package/dist/executors/local-executor.js +0 -197
  73. package/dist/executors/local-executor.js.map +0 -1
  74. package/dist/executors/local-executor.test.d.ts +0 -2
  75. package/dist/executors/local-executor.test.d.ts.map +0 -1
  76. package/dist/executors/local-executor.test.js +0 -192
  77. package/dist/executors/local-executor.test.js.map +0 -1
  78. package/dist/index.d.ts +0 -274
  79. package/dist/index.d.ts.map +0 -1
  80. package/dist/index.js +0 -235
  81. package/dist/index.js.map +0 -1
  82. package/dist/interfaces/agent.d.ts +0 -198
  83. package/dist/interfaces/agent.d.ts.map +0 -1
  84. package/dist/interfaces/agent.js +0 -2
  85. package/dist/interfaces/agent.js.map +0 -1
  86. package/dist/interfaces/event-service.d.ts +0 -79
  87. package/dist/interfaces/event-service.d.ts.map +0 -1
  88. package/dist/interfaces/event-service.js +0 -2
  89. package/dist/interfaces/event-service.js.map +0 -1
  90. package/dist/interfaces/executor.d.ts +0 -128
  91. package/dist/interfaces/executor.d.ts.map +0 -1
  92. package/dist/interfaces/executor.js +0 -2
  93. package/dist/interfaces/executor.js.map +0 -1
  94. package/dist/interfaces/history-module.d.ts +0 -19
  95. package/dist/interfaces/history-module.d.ts.map +0 -1
  96. package/dist/interfaces/history-module.js +0 -2
  97. package/dist/interfaces/history-module.js.map +0 -1
  98. package/dist/interfaces/index.d.ts +0 -13
  99. package/dist/interfaces/index.d.ts.map +0 -1
  100. package/dist/interfaces/index.js +0 -4
  101. package/dist/interfaces/index.js.map +0 -1
  102. package/dist/interfaces/manager.d.ts +0 -142
  103. package/dist/interfaces/manager.d.ts.map +0 -1
  104. package/dist/interfaces/manager.js +0 -2
  105. package/dist/interfaces/manager.js.map +0 -1
  106. package/dist/interfaces/messages.d.ts +0 -75
  107. package/dist/interfaces/messages.d.ts.map +0 -1
  108. package/dist/interfaces/messages.js +0 -29
  109. package/dist/interfaces/messages.js.map +0 -1
  110. package/dist/interfaces/progress-reporting.d.ts +0 -86
  111. package/dist/interfaces/progress-reporting.d.ts.map +0 -1
  112. package/dist/interfaces/progress-reporting.js +0 -37
  113. package/dist/interfaces/progress-reporting.js.map +0 -1
  114. package/dist/interfaces/provider.d.ts +0 -217
  115. package/dist/interfaces/provider.d.ts.map +0 -1
  116. package/dist/interfaces/provider.js +0 -2
  117. package/dist/interfaces/provider.js.map +0 -1
  118. package/dist/interfaces/service.d.ts +0 -205
  119. package/dist/interfaces/service.d.ts.map +0 -1
  120. package/dist/interfaces/service.js +0 -6
  121. package/dist/interfaces/service.js.map +0 -1
  122. package/dist/interfaces/tool.d.ts +0 -248
  123. package/dist/interfaces/tool.d.ts.map +0 -1
  124. package/dist/interfaces/tool.js +0 -2
  125. package/dist/interfaces/tool.js.map +0 -1
  126. package/dist/interfaces/types.d.ts +0 -71
  127. package/dist/interfaces/types.d.ts.map +0 -1
  128. package/dist/interfaces/types.js +0 -33
  129. package/dist/interfaces/types.js.map +0 -1
  130. package/dist/interfaces/workflow-converter.d.ts +0 -193
  131. package/dist/interfaces/workflow-converter.d.ts.map +0 -1
  132. package/dist/interfaces/workflow-converter.js +0 -11
  133. package/dist/interfaces/workflow-converter.js.map +0 -1
  134. package/dist/interfaces/workflow-validator.d.ts +0 -209
  135. package/dist/interfaces/workflow-validator.d.ts.map +0 -1
  136. package/dist/interfaces/workflow-validator.js +0 -16
  137. package/dist/interfaces/workflow-validator.js.map +0 -1
  138. package/dist/managers/agent-factory.d.ts +0 -132
  139. package/dist/managers/agent-factory.d.ts.map +0 -1
  140. package/dist/managers/agent-factory.js +0 -284
  141. package/dist/managers/agent-factory.js.map +0 -1
  142. package/dist/managers/agent-factory.test.d.ts +0 -2
  143. package/dist/managers/agent-factory.test.d.ts.map +0 -1
  144. package/dist/managers/agent-factory.test.js +0 -249
  145. package/dist/managers/agent-factory.test.js.map +0 -1
  146. package/dist/managers/agent-templates.d.ts +0 -84
  147. package/dist/managers/agent-templates.d.ts.map +0 -1
  148. package/dist/managers/agent-templates.js +0 -159
  149. package/dist/managers/agent-templates.js.map +0 -1
  150. package/dist/managers/ai-provider-manager.d.ts +0 -80
  151. package/dist/managers/ai-provider-manager.d.ts.map +0 -1
  152. package/dist/managers/ai-provider-manager.js +0 -226
  153. package/dist/managers/ai-provider-manager.js.map +0 -1
  154. package/dist/managers/conversation-history-manager.d.ts +0 -455
  155. package/dist/managers/conversation-history-manager.d.ts.map +0 -1
  156. package/dist/managers/conversation-history-manager.js +0 -578
  157. package/dist/managers/conversation-history-manager.js.map +0 -1
  158. package/dist/managers/conversation-history-manager.test.d.ts +0 -2
  159. package/dist/managers/conversation-history-manager.test.d.ts.map +0 -1
  160. package/dist/managers/conversation-history-manager.test.js +0 -374
  161. package/dist/managers/conversation-history-manager.test.js.map +0 -1
  162. package/dist/managers/index.d.ts +0 -8
  163. package/dist/managers/index.d.ts.map +0 -1
  164. package/dist/managers/index.js +0 -8
  165. package/dist/managers/index.js.map +0 -1
  166. package/dist/managers/module-registry.d.ts +0 -161
  167. package/dist/managers/module-registry.d.ts.map +0 -1
  168. package/dist/managers/module-registry.js +0 -519
  169. package/dist/managers/module-registry.js.map +0 -1
  170. package/dist/managers/module-type-registry.d.ts +0 -113
  171. package/dist/managers/module-type-registry.d.ts.map +0 -1
  172. package/dist/managers/module-type-registry.js +0 -439
  173. package/dist/managers/module-type-registry.js.map +0 -1
  174. package/dist/managers/plugins.d.ts +0 -166
  175. package/dist/managers/plugins.d.ts.map +0 -1
  176. package/dist/managers/plugins.js +0 -339
  177. package/dist/managers/plugins.js.map +0 -1
  178. package/dist/managers/tool-manager.d.ts +0 -70
  179. package/dist/managers/tool-manager.d.ts.map +0 -1
  180. package/dist/managers/tool-manager.js +0 -138
  181. package/dist/managers/tool-manager.js.map +0 -1
  182. package/dist/managers/tool-manager.test.d.ts +0 -2
  183. package/dist/managers/tool-manager.test.d.ts.map +0 -1
  184. package/dist/managers/tool-manager.test.js +0 -186
  185. package/dist/managers/tool-manager.test.js.map +0 -1
  186. package/dist/node/builtin-templates.json +0 -107
  187. package/dist/node/index.d.cts +0 -4238
  188. package/dist/plugins/conversation-history/conversation-history-plugin.d.ts +0 -67
  189. package/dist/plugins/conversation-history/conversation-history-plugin.d.ts.map +0 -1
  190. package/dist/plugins/conversation-history/conversation-history-plugin.js +0 -270
  191. package/dist/plugins/conversation-history/conversation-history-plugin.js.map +0 -1
  192. package/dist/plugins/conversation-history/index.d.ts +0 -3
  193. package/dist/plugins/conversation-history/index.d.ts.map +0 -1
  194. package/dist/plugins/conversation-history/index.js +0 -2
  195. package/dist/plugins/conversation-history/index.js.map +0 -1
  196. package/dist/plugins/conversation-history/storages/database-storage.d.ts +0 -19
  197. package/dist/plugins/conversation-history/storages/database-storage.d.ts.map +0 -1
  198. package/dist/plugins/conversation-history/storages/database-storage.js +0 -94
  199. package/dist/plugins/conversation-history/storages/database-storage.js.map +0 -1
  200. package/dist/plugins/conversation-history/storages/file-storage.d.ts +0 -15
  201. package/dist/plugins/conversation-history/storages/file-storage.d.ts.map +0 -1
  202. package/dist/plugins/conversation-history/storages/file-storage.js +0 -94
  203. package/dist/plugins/conversation-history/storages/file-storage.js.map +0 -1
  204. package/dist/plugins/conversation-history/storages/index.d.ts +0 -4
  205. package/dist/plugins/conversation-history/storages/index.d.ts.map +0 -1
  206. package/dist/plugins/conversation-history/storages/index.js +0 -4
  207. package/dist/plugins/conversation-history/storages/index.js.map +0 -1
  208. package/dist/plugins/conversation-history/storages/memory-storage.d.ts +0 -15
  209. package/dist/plugins/conversation-history/storages/memory-storage.d.ts.map +0 -1
  210. package/dist/plugins/conversation-history/storages/memory-storage.js +0 -33
  211. package/dist/plugins/conversation-history/storages/memory-storage.js.map +0 -1
  212. package/dist/plugins/conversation-history/types.d.ts +0 -61
  213. package/dist/plugins/conversation-history/types.d.ts.map +0 -1
  214. package/dist/plugins/conversation-history/types.js +0 -2
  215. package/dist/plugins/conversation-history/types.js.map +0 -1
  216. package/dist/plugins/error-handling/context-adapter.d.ts +0 -30
  217. package/dist/plugins/error-handling/context-adapter.d.ts.map +0 -1
  218. package/dist/plugins/error-handling/context-adapter.js +0 -41
  219. package/dist/plugins/error-handling/context-adapter.js.map +0 -1
  220. package/dist/plugins/error-handling/error-handling-plugin.d.ts +0 -49
  221. package/dist/plugins/error-handling/error-handling-plugin.d.ts.map +0 -1
  222. package/dist/plugins/error-handling/error-handling-plugin.js +0 -229
  223. package/dist/plugins/error-handling/error-handling-plugin.js.map +0 -1
  224. package/dist/plugins/error-handling/index.d.ts +0 -10
  225. package/dist/plugins/error-handling/index.d.ts.map +0 -1
  226. package/dist/plugins/error-handling/index.js +0 -10
  227. package/dist/plugins/error-handling/index.js.map +0 -1
  228. package/dist/plugins/error-handling/types.d.ts +0 -73
  229. package/dist/plugins/error-handling/types.d.ts.map +0 -1
  230. package/dist/plugins/error-handling/types.js +0 -14
  231. package/dist/plugins/error-handling/types.js.map +0 -1
  232. package/dist/plugins/event-emitter/metrics.d.ts +0 -17
  233. package/dist/plugins/event-emitter/metrics.d.ts.map +0 -1
  234. package/dist/plugins/event-emitter/metrics.js +0 -17
  235. package/dist/plugins/event-emitter/metrics.js.map +0 -1
  236. package/dist/plugins/event-emitter/types.d.ts +0 -112
  237. package/dist/plugins/event-emitter/types.d.ts.map +0 -1
  238. package/dist/plugins/event-emitter/types.js +0 -65
  239. package/dist/plugins/event-emitter/types.js.map +0 -1
  240. package/dist/plugins/event-emitter-plugin.d.ts +0 -222
  241. package/dist/plugins/event-emitter-plugin.d.ts.map +0 -1
  242. package/dist/plugins/event-emitter-plugin.js +0 -432
  243. package/dist/plugins/event-emitter-plugin.js.map +0 -1
  244. package/dist/plugins/event-emitter-plugin.test.d.ts +0 -2
  245. package/dist/plugins/event-emitter-plugin.test.d.ts.map +0 -1
  246. package/dist/plugins/event-emitter-plugin.test.js +0 -94
  247. package/dist/plugins/event-emitter-plugin.test.js.map +0 -1
  248. package/dist/plugins/execution/execution-analytics-plugin.d.ts +0 -129
  249. package/dist/plugins/execution/execution-analytics-plugin.d.ts.map +0 -1
  250. package/dist/plugins/execution/execution-analytics-plugin.js +0 -517
  251. package/dist/plugins/execution/execution-analytics-plugin.js.map +0 -1
  252. package/dist/plugins/execution/index.d.ts +0 -3
  253. package/dist/plugins/execution/index.d.ts.map +0 -1
  254. package/dist/plugins/execution/index.js +0 -2
  255. package/dist/plugins/execution/index.js.map +0 -1
  256. package/dist/plugins/execution/types.d.ts +0 -90
  257. package/dist/plugins/execution/types.d.ts.map +0 -1
  258. package/dist/plugins/execution/types.js +0 -2
  259. package/dist/plugins/execution/types.js.map +0 -1
  260. package/dist/plugins/index.d.ts +0 -10
  261. package/dist/plugins/index.d.ts.map +0 -1
  262. package/dist/plugins/index.js +0 -11
  263. package/dist/plugins/index.js.map +0 -1
  264. package/dist/plugins/limits/types.d.ts +0 -61
  265. package/dist/plugins/limits/types.d.ts.map +0 -1
  266. package/dist/plugins/limits/types.js +0 -2
  267. package/dist/plugins/limits/types.js.map +0 -1
  268. package/dist/plugins/limits-plugin.d.ts +0 -113
  269. package/dist/plugins/limits-plugin.d.ts.map +0 -1
  270. package/dist/plugins/limits-plugin.js +0 -380
  271. package/dist/plugins/limits-plugin.js.map +0 -1
  272. package/dist/plugins/logging/formatters.d.ts +0 -14
  273. package/dist/plugins/logging/formatters.d.ts.map +0 -1
  274. package/dist/plugins/logging/formatters.js +0 -24
  275. package/dist/plugins/logging/formatters.js.map +0 -1
  276. package/dist/plugins/logging/index.d.ts +0 -3
  277. package/dist/plugins/logging/index.d.ts.map +0 -1
  278. package/dist/plugins/logging/index.js +0 -2
  279. package/dist/plugins/logging/index.js.map +0 -1
  280. package/dist/plugins/logging/logging-plugin.d.ts +0 -91
  281. package/dist/plugins/logging/logging-plugin.d.ts.map +0 -1
  282. package/dist/plugins/logging/logging-plugin.js +0 -335
  283. package/dist/plugins/logging/logging-plugin.js.map +0 -1
  284. package/dist/plugins/logging/storages/console-storage.d.ts +0 -14
  285. package/dist/plugins/logging/storages/console-storage.d.ts.map +0 -1
  286. package/dist/plugins/logging/storages/console-storage.js +0 -38
  287. package/dist/plugins/logging/storages/console-storage.js.map +0 -1
  288. package/dist/plugins/logging/storages/file-storage.d.ts +0 -14
  289. package/dist/plugins/logging/storages/file-storage.d.ts.map +0 -1
  290. package/dist/plugins/logging/storages/file-storage.js +0 -41
  291. package/dist/plugins/logging/storages/file-storage.js.map +0 -1
  292. package/dist/plugins/logging/storages/index.d.ts +0 -5
  293. package/dist/plugins/logging/storages/index.d.ts.map +0 -1
  294. package/dist/plugins/logging/storages/index.js +0 -5
  295. package/dist/plugins/logging/storages/index.js.map +0 -1
  296. package/dist/plugins/logging/storages/remote-storage.d.ts +0 -20
  297. package/dist/plugins/logging/storages/remote-storage.d.ts.map +0 -1
  298. package/dist/plugins/logging/storages/remote-storage.js +0 -61
  299. package/dist/plugins/logging/storages/remote-storage.js.map +0 -1
  300. package/dist/plugins/logging/storages/silent-storage.d.ts +0 -10
  301. package/dist/plugins/logging/storages/silent-storage.d.ts.map +0 -1
  302. package/dist/plugins/logging/storages/silent-storage.js +0 -15
  303. package/dist/plugins/logging/storages/silent-storage.js.map +0 -1
  304. package/dist/plugins/logging/types.d.ts +0 -84
  305. package/dist/plugins/logging/types.d.ts.map +0 -1
  306. package/dist/plugins/logging/types.js +0 -2
  307. package/dist/plugins/logging/types.js.map +0 -1
  308. package/dist/plugins/performance/collectors/system-metrics-collector.d.ts +0 -12
  309. package/dist/plugins/performance/collectors/system-metrics-collector.d.ts.map +0 -1
  310. package/dist/plugins/performance/collectors/system-metrics-collector.js +0 -65
  311. package/dist/plugins/performance/collectors/system-metrics-collector.js.map +0 -1
  312. package/dist/plugins/performance/index.d.ts +0 -5
  313. package/dist/plugins/performance/index.d.ts.map +0 -1
  314. package/dist/plugins/performance/index.js +0 -4
  315. package/dist/plugins/performance/index.js.map +0 -1
  316. package/dist/plugins/performance/performance-plugin.d.ts +0 -49
  317. package/dist/plugins/performance/performance-plugin.d.ts.map +0 -1
  318. package/dist/plugins/performance/performance-plugin.js +0 -293
  319. package/dist/plugins/performance/performance-plugin.js.map +0 -1
  320. package/dist/plugins/performance/storages/index.d.ts +0 -2
  321. package/dist/plugins/performance/storages/index.d.ts.map +0 -1
  322. package/dist/plugins/performance/storages/index.js +0 -4
  323. package/dist/plugins/performance/storages/index.js.map +0 -1
  324. package/dist/plugins/performance/storages/memory-storage.d.ts +0 -19
  325. package/dist/plugins/performance/storages/memory-storage.d.ts.map +0 -1
  326. package/dist/plugins/performance/storages/memory-storage.js +0 -69
  327. package/dist/plugins/performance/storages/memory-storage.js.map +0 -1
  328. package/dist/plugins/performance/types.d.ts +0 -154
  329. package/dist/plugins/performance/types.d.ts.map +0 -1
  330. package/dist/plugins/performance/types.js +0 -2
  331. package/dist/plugins/performance/types.js.map +0 -1
  332. package/dist/plugins/usage/aggregate-usage-stats.d.ts +0 -12
  333. package/dist/plugins/usage/aggregate-usage-stats.d.ts.map +0 -1
  334. package/dist/plugins/usage/aggregate-usage-stats.js +0 -115
  335. package/dist/plugins/usage/aggregate-usage-stats.js.map +0 -1
  336. package/dist/plugins/usage/index.d.ts +0 -5
  337. package/dist/plugins/usage/index.d.ts.map +0 -1
  338. package/dist/plugins/usage/index.js +0 -4
  339. package/dist/plugins/usage/index.js.map +0 -1
  340. package/dist/plugins/usage/storages/file-storage.d.ts +0 -22
  341. package/dist/plugins/usage/storages/file-storage.d.ts.map +0 -1
  342. package/dist/plugins/usage/storages/file-storage.js +0 -111
  343. package/dist/plugins/usage/storages/file-storage.js.map +0 -1
  344. package/dist/plugins/usage/storages/index.d.ts +0 -5
  345. package/dist/plugins/usage/storages/index.d.ts.map +0 -1
  346. package/dist/plugins/usage/storages/index.js +0 -5
  347. package/dist/plugins/usage/storages/index.js.map +0 -1
  348. package/dist/plugins/usage/storages/memory-storage.d.ts +0 -22
  349. package/dist/plugins/usage/storages/memory-storage.d.ts.map +0 -1
  350. package/dist/plugins/usage/storages/memory-storage.js +0 -42
  351. package/dist/plugins/usage/storages/memory-storage.js.map +0 -1
  352. package/dist/plugins/usage/storages/remote-storage.d.ts +0 -26
  353. package/dist/plugins/usage/storages/remote-storage.d.ts.map +0 -1
  354. package/dist/plugins/usage/storages/remote-storage.js +0 -115
  355. package/dist/plugins/usage/storages/remote-storage.js.map +0 -1
  356. package/dist/plugins/usage/storages/silent-storage.d.ts +0 -19
  357. package/dist/plugins/usage/storages/silent-storage.d.ts.map +0 -1
  358. package/dist/plugins/usage/storages/silent-storage.js +0 -26
  359. package/dist/plugins/usage/storages/silent-storage.js.map +0 -1
  360. package/dist/plugins/usage/types.d.ts +0 -127
  361. package/dist/plugins/usage/types.d.ts.map +0 -1
  362. package/dist/plugins/usage/types.js +0 -2
  363. package/dist/plugins/usage/types.js.map +0 -1
  364. package/dist/plugins/usage/usage-plugin.d.ts +0 -67
  365. package/dist/plugins/usage/usage-plugin.d.ts.map +0 -1
  366. package/dist/plugins/usage/usage-plugin.js +0 -309
  367. package/dist/plugins/usage/usage-plugin.js.map +0 -1
  368. package/dist/plugins/webhook/http-client.d.ts +0 -30
  369. package/dist/plugins/webhook/http-client.d.ts.map +0 -1
  370. package/dist/plugins/webhook/http-client.js +0 -110
  371. package/dist/plugins/webhook/http-client.js.map +0 -1
  372. package/dist/plugins/webhook/index.d.ts +0 -9
  373. package/dist/plugins/webhook/index.d.ts.map +0 -1
  374. package/dist/plugins/webhook/index.js +0 -9
  375. package/dist/plugins/webhook/index.js.map +0 -1
  376. package/dist/plugins/webhook/transformer.d.ts +0 -63
  377. package/dist/plugins/webhook/transformer.d.ts.map +0 -1
  378. package/dist/plugins/webhook/transformer.js +0 -157
  379. package/dist/plugins/webhook/transformer.js.map +0 -1
  380. package/dist/plugins/webhook/types.d.ts +0 -183
  381. package/dist/plugins/webhook/types.d.ts.map +0 -1
  382. package/dist/plugins/webhook/types.js +0 -2
  383. package/dist/plugins/webhook/types.js.map +0 -1
  384. package/dist/plugins/webhook/webhook-plugin.d.ts +0 -92
  385. package/dist/plugins/webhook/webhook-plugin.d.ts.map +0 -1
  386. package/dist/plugins/webhook/webhook-plugin.js +0 -328
  387. package/dist/plugins/webhook/webhook-plugin.js.map +0 -1
  388. package/dist/schemas/agent-template-schema.d.ts +0 -137
  389. package/dist/schemas/agent-template-schema.d.ts.map +0 -1
  390. package/dist/schemas/agent-template-schema.js +0 -87
  391. package/dist/schemas/agent-template-schema.js.map +0 -1
  392. package/dist/services/conversation-service/index.d.ts +0 -88
  393. package/dist/services/conversation-service/index.d.ts.map +0 -1
  394. package/dist/services/conversation-service/index.js +0 -441
  395. package/dist/services/conversation-service/index.js.map +0 -1
  396. package/dist/services/conversation-service/types.d.ts +0 -32
  397. package/dist/services/conversation-service/types.d.ts.map +0 -1
  398. package/dist/services/conversation-service/types.js +0 -8
  399. package/dist/services/conversation-service/types.js.map +0 -1
  400. package/dist/services/event-service.d.ts +0 -61
  401. package/dist/services/event-service.d.ts.map +0 -1
  402. package/dist/services/event-service.js +0 -110
  403. package/dist/services/event-service.js.map +0 -1
  404. package/dist/services/event-service.test.d.ts +0 -2
  405. package/dist/services/event-service.test.d.ts.map +0 -1
  406. package/dist/services/event-service.test.js +0 -86
  407. package/dist/services/event-service.test.js.map +0 -1
  408. package/dist/services/execution-service.d.ts +0 -151
  409. package/dist/services/execution-service.d.ts.map +0 -1
  410. package/dist/services/execution-service.js +0 -1262
  411. package/dist/services/execution-service.js.map +0 -1
  412. package/dist/services/execution-service.test.d.ts +0 -2
  413. package/dist/services/execution-service.test.d.ts.map +0 -1
  414. package/dist/services/execution-service.test.js +0 -338
  415. package/dist/services/execution-service.test.js.map +0 -1
  416. package/dist/services/history-module.d.ts +0 -15
  417. package/dist/services/history-module.d.ts.map +0 -1
  418. package/dist/services/history-module.js +0 -42
  419. package/dist/services/history-module.js.map +0 -1
  420. package/dist/services/in-memory-history-store.d.ts +0 -12
  421. package/dist/services/in-memory-history-store.d.ts.map +0 -1
  422. package/dist/services/in-memory-history-store.js +0 -41
  423. package/dist/services/in-memory-history-store.js.map +0 -1
  424. package/dist/services/index.d.ts +0 -7
  425. package/dist/services/index.d.ts.map +0 -1
  426. package/dist/services/index.js +0 -13
  427. package/dist/services/index.js.map +0 -1
  428. package/dist/services/task-events.d.ts +0 -6
  429. package/dist/services/task-events.d.ts.map +0 -1
  430. package/dist/services/task-events.js +0 -6
  431. package/dist/services/task-events.js.map +0 -1
  432. package/dist/services/tool-execution-service.d.ts +0 -74
  433. package/dist/services/tool-execution-service.d.ts.map +0 -1
  434. package/dist/services/tool-execution-service.js +0 -189
  435. package/dist/services/tool-execution-service.js.map +0 -1
  436. package/dist/services/user-events.d.ts +0 -7
  437. package/dist/services/user-events.d.ts.map +0 -1
  438. package/dist/services/user-events.js +0 -6
  439. package/dist/services/user-events.js.map +0 -1
  440. package/dist/tools/implementations/function-tool/index.d.ts +0 -9
  441. package/dist/tools/implementations/function-tool/index.d.ts.map +0 -1
  442. package/dist/tools/implementations/function-tool/index.js +0 -13
  443. package/dist/tools/implementations/function-tool/index.js.map +0 -1
  444. package/dist/tools/implementations/function-tool/schema-converter.d.ts +0 -32
  445. package/dist/tools/implementations/function-tool/schema-converter.d.ts.map +0 -1
  446. package/dist/tools/implementations/function-tool/schema-converter.js +0 -164
  447. package/dist/tools/implementations/function-tool/schema-converter.js.map +0 -1
  448. package/dist/tools/implementations/function-tool/types.d.ts +0 -72
  449. package/dist/tools/implementations/function-tool/types.d.ts.map +0 -1
  450. package/dist/tools/implementations/function-tool/types.js +0 -14
  451. package/dist/tools/implementations/function-tool/types.js.map +0 -1
  452. package/dist/tools/implementations/function-tool.d.ts +0 -49
  453. package/dist/tools/implementations/function-tool.d.ts.map +0 -1
  454. package/dist/tools/implementations/function-tool.js +0 -223
  455. package/dist/tools/implementations/function-tool.js.map +0 -1
  456. package/dist/tools/implementations/index.d.ts +0 -4
  457. package/dist/tools/implementations/index.d.ts.map +0 -1
  458. package/dist/tools/implementations/index.js +0 -5
  459. package/dist/tools/implementations/index.js.map +0 -1
  460. package/dist/tools/implementations/mcp-tool.d.ts +0 -72
  461. package/dist/tools/implementations/mcp-tool.d.ts.map +0 -1
  462. package/dist/tools/implementations/mcp-tool.js +0 -246
  463. package/dist/tools/implementations/mcp-tool.js.map +0 -1
  464. package/dist/tools/implementations/openapi-tool.d.ts +0 -56
  465. package/dist/tools/implementations/openapi-tool.d.ts.map +0 -1
  466. package/dist/tools/implementations/openapi-tool.js +0 -324
  467. package/dist/tools/implementations/openapi-tool.js.map +0 -1
  468. package/dist/tools/implementations/relay-mcp-tool.d.ts +0 -38
  469. package/dist/tools/implementations/relay-mcp-tool.d.ts.map +0 -1
  470. package/dist/tools/implementations/relay-mcp-tool.js +0 -46
  471. package/dist/tools/implementations/relay-mcp-tool.js.map +0 -1
  472. package/dist/tools/index.d.ts +0 -3
  473. package/dist/tools/index.d.ts.map +0 -1
  474. package/dist/tools/index.js +0 -4
  475. package/dist/tools/index.js.map +0 -1
  476. package/dist/tools/registry/index.d.ts +0 -2
  477. package/dist/tools/registry/index.d.ts.map +0 -1
  478. package/dist/tools/registry/index.js +0 -3
  479. package/dist/tools/registry/index.js.map +0 -1
  480. package/dist/tools/registry/tool-registry.d.ts +0 -54
  481. package/dist/tools/registry/tool-registry.d.ts.map +0 -1
  482. package/dist/tools/registry/tool-registry.js +0 -146
  483. package/dist/tools/registry/tool-registry.js.map +0 -1
  484. package/dist/utils/errors.d.ts +0 -155
  485. package/dist/utils/errors.d.ts.map +0 -1
  486. package/dist/utils/errors.js +0 -203
  487. package/dist/utils/errors.js.map +0 -1
  488. package/dist/utils/execution-proxy.d.ts +0 -75
  489. package/dist/utils/execution-proxy.d.ts.map +0 -1
  490. package/dist/utils/execution-proxy.js +0 -230
  491. package/dist/utils/execution-proxy.js.map +0 -1
  492. package/dist/utils/index.d.ts +0 -11
  493. package/dist/utils/index.d.ts.map +0 -1
  494. package/dist/utils/index.js +0 -7
  495. package/dist/utils/index.js.map +0 -1
  496. package/dist/utils/logger.d.ts +0 -74
  497. package/dist/utils/logger.d.ts.map +0 -1
  498. package/dist/utils/logger.js +0 -143
  499. package/dist/utils/logger.js.map +0 -1
  500. package/dist/utils/message-converter.d.ts +0 -68
  501. package/dist/utils/message-converter.d.ts.map +0 -1
  502. package/dist/utils/message-converter.js +0 -87
  503. package/dist/utils/message-converter.js.map +0 -1
  504. package/dist/utils/periodic-task.d.ts +0 -14
  505. package/dist/utils/periodic-task.d.ts.map +0 -1
  506. package/dist/utils/periodic-task.js +0 -26
  507. package/dist/utils/periodic-task.js.map +0 -1
  508. package/dist/utils/validation.d.ts +0 -40
  509. package/dist/utils/validation.d.ts.map +0 -1
  510. package/dist/utils/validation.js +0 -162
  511. package/dist/utils/validation.js.map +0 -1
@@ -1,6 +1,13 @@
1
- import Dr from'jssha';import {spawn}from'child_process';var ee={isPrimitive:i=>i==null||typeof i=="string"||typeof i=="number"||typeof i=="boolean",isArray:i=>Array.isArray(i)&&i.every(e=>ee.isUniversalValue(e)),isObject:i=>typeof i=="object"&&i!==null&&!Array.isArray(i)&&!(i instanceof Date)&&Object.values(i).every(e=>ee.isUniversalValue(e)),isUniversalValue:i=>i instanceof Date?true:ee.isPrimitive(i)||ee.isArray(i)||ee.isObject(i)};function dt(i){return "generateImage"in i&&typeof i.generateImage=="function"}function ct(i){return "createVideo"in i&&"getVideoJob"in i&&"cancelVideoJob"in i&&typeof i.createVideo=="function"&&typeof i.getVideoJob=="function"&&typeof i.cancelVideoJob=="function"}function ve(i){return "getEstimatedDuration"in i||"getExecutionSteps"in i||"setProgressCallback"in i}function Wt(i,e){if(ve(i)&&i.getEstimatedDuration)return i.getEstimatedDuration(e)}function Yt(i,e){if(ve(i)&&i.getExecutionSteps)return i.getExecutionSteps(e)}function Jt(i,e){return ve(i)&&i.setProgressCallback?(i.setProgressCallback(e),true):false}var Ee=class{history=[];isInitialized=false;config;async configure(e){this.config=e,await this.ensureInitialized();}getHistory(){return [...this.history]}clearHistory(){this.history=[];}addMessage(e){this.history.push(e);}validateInput(e){if(!e||typeof e!="string")throw new Error("Input must be a non-empty string")}async ensureInitialized(){this.isInitialized||(await this.initialize(),this.isInitialized=true);}async dispose(){this.clearHistory(),this.isInitialized=false;}};var Y=class{initialized=false;async initialize(){this.initialized||(await this.doInitialize(),this.initialized=true);}async dispose(){await this.doDispose(),this.initialized=false;}isInitialized(){return this.initialized}ensureInitialized(){if(!this.initialized)throw new Error(`${this.constructor.name} is not initialized`)}};function Kt(i){return i.role==="user"}function he(i){return i.role==="assistant"}function Zt(i){return i.role==="system"}function Qt(i){return i.role==="tool"}var _={debug:()=>{},info:()=>{},warn:()=>{},error:()=>{},log:()=>{},group:()=>{},groupEnd:()=>{}},te=class i{static instance;globalLevel;constructor(){this.globalLevel="warn";}static getInstance(){return i.instance||(i.instance=new i),i.instance}getGlobalLevel(){return this.globalLevel}setGlobalLevel(e){this.globalLevel=e;}},qe=class{level;packageName;sinkLogger;constructor(e,t){this.packageName=e,this.sinkLogger=t||_;}debug(...e){if(this.shouldLog("debug")){let[t,r]=e;this.forward("debug",String(t??""),Ie(r)?r:void 0);}}info(...e){if(this.shouldLog("info")){let[t,r]=e;this.forward("info",String(t??""),Ie(r)?r:void 0);}}warn(...e){if(this.shouldLog("warn")){let[t,r]=e;this.forward("warn",String(t??""),Ie(r)?r:void 0);}}error(...e){if(this.shouldLog("error")){let[t,r]=e;this.forward("error",String(t??""),Ie(r)?r:void 0);}}log(...e){this.info(...e);}getLevel(){return this.level||te.getInstance().getGlobalLevel()}shouldLog(e){let t=this.getLevel();if(t==="silent")return false;let r=["debug","info","warn","error","silent"];return r.indexOf(e)>=r.indexOf(t)}forward(e,t,r){let o={timestamp:new Date().toISOString(),level:e,message:t,...r&&{context:r},packageName:this.packageName},s=`[${o.timestamp}] [${o.level.toUpperCase()}] [${o.packageName}] ${o.message}`;switch(e){case "debug":this.sinkLogger.debug(s,r??{});return;case "info":this.sinkLogger.info(s,r??{});return;case "warn":this.sinkLogger.warn(s,r??{});return;case "error":this.sinkLogger.error(s,r??{});return;case "silent":return}}};function Ie(i){return typeof i=="object"&&i!==null&&!(i instanceof Error)&&!(i instanceof Date)&&!Array.isArray(i)}function C(i,e){return new qe(i,e)}function je(i){te.getInstance().setGlobalLevel(i);}function ro(){return te.getInstance().getGlobalLevel()}var y=C("agents");var We=class{config;executor;logger;constructor(e=_){this.logger=e;}async configure(e){this.config=e,this.hasExecutor(e)&&e.executor&&(this.executor=e.executor);}hasExecutor(e){return typeof e=="object"&&e!==null&&"executor"in e}async generateResponse(e){let t=await this.chat(e.messages,{...e.model!==void 0&&{model:e.model},...e.temperature!==void 0&&{temperature:e.temperature},...e.maxTokens!==void 0&&{maxTokens:e.maxTokens},...e.tools!==void 0&&{tools:e.tools}});return {content:t.content??null,toolCalls:he(t)?t.toolCalls:void 0,model:e.model,metadata:e.metadata}}async*generateStreamingResponse(e){if(!this.chatStream)throw new Error(`[AI-PROVIDER] Streaming is not supported by provider "${this.name}"`);for await(let t of this.chatStream(e.messages,{...e.model!==void 0&&{model:e.model},...e.temperature!==void 0&&{temperature:e.temperature},...e.maxTokens!==void 0&&{maxTokens:e.maxTokens},...e.tools!==void 0&&{tools:e.tools}}))yield {content:t.content??null,toolCalls:he(t)?t.toolCalls:void 0,model:e.model,metadata:e.metadata};}supportsTools(){return true}validateConfig(){return true}validateMessages(e){if(!Array.isArray(e))throw new Error("Messages must be an array");if(e.length===0)throw new Error("Messages array cannot be empty");for(let t of e)if(!t.role||!["user","assistant","system","tool"].includes(t.role))throw new Error(`Invalid message role: ${t.role}`)}validateTools(e){if(e){if(!Array.isArray(e))throw new Error("Tools must be an array");for(let t of e){if(!t.name||typeof t.name!="string")throw new Error("Tool must have a valid name");if(!t.description||typeof t.description!="string")throw new Error("Tool must have a valid description");if(!t.parameters||typeof t.parameters!="object"||t.parameters===null||Array.isArray(t.parameters))throw new Error("Tool must have valid parameters")}}}async executeViaExecutorOrDirect(e,t){if(!this.executor)throw new Error(`Executor is required for ${this.name} provider. Configure an executor or use direct execution path.`);if(!t?.model)throw new Error(`Model is required for executor execution in ${this.name} provider.`);return await this.executor.executeChat({messages:e,options:t,provider:this.name,model:t.model,...t.tools&&{tools:t.tools}})}async*executeStreamViaExecutorOrDirect(e,t){if(!this.executor||!this.executor.executeChatStream)throw new Error(`Streaming executor is required for ${this.name} provider.`);if(!t?.model)throw new Error(`Model is required for executor streaming in ${this.name} provider.`);this.logger.debug?.("\u{1F50D} [TOOL-FLOW] AbstractAIProvider.executeStreamViaExecutorOrDirect() - Executor request",{provider:this.name,model:t.model,hasTools:!!t.tools,toolsCount:t.tools?.length||0,toolNames:t.tools?.map(o=>o.name)||[]});let r=this.executor.executeChatStream({messages:e,options:t,provider:this.name,model:t.model,stream:true,...t.tools&&{tools:t.tools}});for await(let o of r)yield o;}async dispose(){this.executor?.dispose&&await this.executor.dispose();}};var b={CREATED:"created",EXECUTION_START:"execution_start",EXECUTION_COMPLETE:"execution_complete",EXECUTION_ERROR:"execution_error",AGGREGATION_COMPLETE:"aggregation_complete",CONFIG_UPDATED:"config_updated"},B="agent";var R=class extends Error{constructor(t,r){super(t);this.context=r;this.name=this.constructor.name,Object.setPrototypeOf(this,new.target.prototype);}},m=class extends R{code="CONFIGURATION_ERROR";category="user";recoverable=false;constructor(e,t){super(`Configuration Error: ${e}`,t);}},I=class extends R{constructor(t,r,o){super(`Validation Error: ${t}`,o);this.field=r;}code="VALIDATION_ERROR";category="user";recoverable=false},Ye=class extends R{constructor(t,r,o,s){super(`Provider Error (${r}): ${t}`,s);this.provider=r;this.originalError=o;}code="PROVIDER_ERROR";category="provider";recoverable=true},gt=class extends R{constructor(t,r,o){super(`Authentication Error: ${t}`,o);this.provider=r;}code="AUTHENTICATION_ERROR";category="user";recoverable=false},mt=class extends R{constructor(t,r,o,s){super(`Rate Limit Error: ${t}`,s);this.retryAfter=r;this.provider=o;}code="RATE_LIMIT_ERROR";category="provider";recoverable=true},pt=class extends R{constructor(t,r,o){super(`Network Error: ${t}`,o);this.originalError=r;}code="NETWORK_ERROR";category="system";recoverable=true},D=class extends R{constructor(t,r,o,s){super(`Tool Execution Error (${r}): ${t}`,s);this.toolName=r;this.originalError=o;}code="TOOL_EXECUTION_ERROR";category="system";recoverable=false},ft=class extends R{constructor(t,r,o,s){super(`Model "${t}" is not available for provider "${r}"`,s);this.availableModels=o;}code="MODEL_NOT_AVAILABLE";category="user";recoverable=false},vt=class extends R{code="CIRCUIT_BREAKER_OPEN";category="system";recoverable=true;constructor(e="Circuit breaker is open",t){super(e,t);}},j=class extends R{constructor(t,r,o){super(`Plugin Error (${r}): ${t}`,o);this.pluginName=r;}code="PLUGIN_ERROR";category="system";recoverable=false},Et=class extends R{code="STORAGE_ERROR";category="system";recoverable=true;constructor(e,t){super(`Storage Error: ${e}`,t);}},Te=class extends R{code="CACHE_INTEGRITY_ERROR";category="system";recoverable=false;constructor(e,t){super(`Cache Integrity Error: ${e}`,t);}},ht=class{static isRecoverable(e){return e instanceof R?e.recoverable:false}static getErrorCode(e){return e instanceof R?e.code:"UNKNOWN_ERROR"}static fromUnknown(e,t="An unknown error occurred"){if(e instanceof R)return e;if(e instanceof Error)return new m(e.message||t);let r=typeof e=="string"?e:t;return new m(r)}static wrapProviderError(e,t,r){let o=e instanceof Error?e:new Error(String(e));return new Ye(`Failed to ${r}`,t,o,{operation:r})}};var O={CALL_START:"call_start",CALL_COMPLETE:"call_complete",CALL_ERROR:"call_error",CALL_RESPONSE_READY:"call_response_ready"},X="tool",ye=class{tools;logger;constructor(e,t=_){this.tools=e,this.logger=t;}requireExecutionRequestFields(e){if(!e.executionId)throw new I("[STRICT-POLICY][EMITTER-CONTRACT] Tool execution request missing executionId");if(!e.ownerType)throw new I(`[STRICT-POLICY][EMITTER-CONTRACT] Tool execution request missing ownerType: executionId=${e.executionId}`);if(!e.ownerId)throw new I(`[STRICT-POLICY][EMITTER-CONTRACT] Tool execution request missing ownerId: executionId=${e.executionId}`);return {executionId:e.executionId,ownerType:e.ownerType,ownerId:e.ownerId}}async executeTool(e,t,r){this.logger.debug(`Executing tool: ${e}`);try{if(!r?.executionId)throw new I("ToolExecutionService requires executionId (toolCallId) in ToolExecutionContext");let o=r.eventService;if(o){let l={timestamp:new Date,toolName:e,parameters:t};o.emit(O.CALL_START,l);}let{toolName:s,parameters:n,...a}=r,d={...a,toolName:e,parameters:t,executionId:r.executionId},u=await this.tools.executeTool(e,t,d);if(this.logger.debug(`Tool execution completed: ${e}`),o){let l={timestamp:new Date,toolName:e,result:u};o.emit(O.CALL_COMPLETE,l),o.emit(O.CALL_RESPONSE_READY,l);}return {success:!0,result:u,toolName:e,executionId:d.executionId}}catch(o){this.logger.error(`Tool execution failed: ${e}`);let s=o instanceof Error?o:new Error(String(o)),n=r?.eventService;if(n&&r?.executionId){let a={timestamp:new Date,toolName:e,error:s.message};n.emit(O.CALL_ERROR,a);}return {success:false,error:s.message,toolName:e,executionId:r?.executionId}}}createExecutionRequestsWithContext(e,t){return e.map(r=>{let o;try{o=JSON.parse(r.function.arguments);}catch{throw new I(`Failed to parse arguments for tool "${r.function.name}" (call ${r.id}): invalid JSON`)}return {toolName:r.function.name,parameters:o,executionId:r.id,ownerType:"tool",ownerId:r.id,ownerPath:[...t.ownerPathBase,{type:"tool",id:r.id}],metadata:t.metadataFactory?t.metadataFactory(r):void 0}})}async executeTools(e){this.logger.debug(`Executing ${e.requests.length} tools in ${e.mode} mode`);let t=[],r=[];if(e.mode==="parallel"){let o=e.requests.map(n=>(()=>{let a=this.requireExecutionRequestFields(n);return this.executeTool(n.toolName,n.parameters,{toolName:n.toolName,parameters:n.parameters,executionId:a.executionId,ownerType:a.ownerType,ownerId:a.ownerId,ownerPath:n.ownerPath,metadata:n.metadata,eventService:n.eventService,baseEventService:n.baseEventService})})());if((await Promise.allSettled(o)).forEach((n,a)=>{let d=e.requests[a];if(!d)return;if(n.status==="fulfilled"){let l=n.value;if(t.push(l),!l.success){let g=new Error(`Tool execution failed: toolName=${String(l.toolName)} executionId=${String(l.executionId)} error=${String(l.error||"Unknown error")}`);r.push(g);}return}let u=n.reason instanceof Error?n.reason:new Error(String(n.reason));r.push(u),t.push({toolName:d.toolName,result:null,success:false,error:u.message,executionId:d.executionId});}),r.length>0&&!e.continueOnError)throw r[0]}else for(let o of e.requests)try{let s=this.requireExecutionRequestFields(o),n=await this.executeTool(o.toolName,o.parameters,{toolName:o.toolName,parameters:o.parameters,executionId:s.executionId,ownerType:s.ownerType,ownerId:s.ownerId,ownerPath:o.ownerPath,metadata:o.metadata,eventService:o.eventService,baseEventService:o.baseEventService});if(t.push(n),n.success||r.push(new Error(`Tool execution failed: toolName=${String(n.toolName)} executionId=${String(n.executionId)} error=${String(n.error||"Unknown error")}`)),!n.success&&!e.continueOnError)break}catch(s){let n=s instanceof Error?s:new Error(String(s));if(r.push(n),!e.continueOnError)break}return {results:t,errors:r}}};var x={START:"start",COMPLETE:"complete",ERROR:"error",ASSISTANT_MESSAGE_START:"assistant_message_start",ASSISTANT_MESSAGE_COMPLETE:"assistant_message_complete",USER_MESSAGE:"user_message",TOOL_RESULTS_TO_LLM:"tool_results_to_llm",TOOL_RESULTS_READY:"tool_results_ready"},U="execution";function xe(i){return "executionId"in i||"toolName"in i}function Me(i){let e=0,t=false;for(let r=0;r<i.length;r++){let o=i[r]===" "||i[r]===" "||i[r]===`
2
- `||i[r]==="\r";!o&&!t?(e++,t=true):o&&(t=false);}return e}var re=class{listeners=new Set;subscribe(e){this.listeners.add(e);}unsubscribe(e){this.listeners.delete(e);}notifyListeners(e,t,r){for(let o of this.listeners)o(e,t,r);}},oe=class extends re{emit(e,t,r){}},Pe=new oe;function J(i){return i===Pe||i instanceof oe}function Tt(i,e){if(!i||i.trim().length===0)throw new Error("[EVENTS] ownerType is required to compose event names.");if(i.includes("."))throw new Error(`[EVENTS] ownerType must not contain '.': "${i}"`);if(!e||e.trim().length===0)throw new Error("[EVENTS] local event name is required.");if(e.includes("."))throw new Error(`[EVENTS] Local event name must not contain '.': "${e}"`);return `${i}.${e}`}var It=36,er=10;function tr(){return `span_${Date.now().toString(It)}_${Math.random().toString(It).slice(2,er)}`}var be=class extends re{base;binding;constructor(e,t){super(),this.base=e,this.binding=t;}emit(e,t,r){if(e.includes("."))throw new Error(`[EVENTS] Local event name must not contain '.': "${e}"`);let o={...r,ownerType:this.binding.ownerType,ownerId:this.binding.ownerId,ownerPath:this.binding.ownerPath,depth:this.binding.ownerPath.length,spanId:r?.spanId??tr()},s=Tt(this.binding.ownerType,e);this.base.emit(s,t,o);}subscribe(e){this.base.subscribe(e);}unsubscribe(e){this.base.unsubscribe(e);}};function $(i,e){return new be(i,e)}var Ce={ASSIGNED:"assigned",COMPLETED:"completed"};var Re=class{baseEventService;logger;ownerPathBase;toolEventServices;agentOwnerPathBase;constructor(e,t,r){this.baseEventService=e,this.logger=t,this.ownerPathBase=this.buildBaseOwnerPath(r),this.toolEventServices=new Map,this.agentOwnerPathBase=[];}prepareOwnerPathBases(e){this.toolEventServices.clear();let t=[...this.ownerPathBase,{type:"agent",id:e}];this.agentOwnerPathBase=t;}resetOwnerPathBases(){this.toolEventServices.clear(),this.agentOwnerPathBase=[];}ensureToolEventService(e,t){if(J(this.baseEventService))return this.baseEventService;if(!e)throw new Error("[EVENT-SERVICE] Missing ownerId for tool event context");if(!t||t.length===0)throw new Error("[EVENT-SERVICE] Missing ownerPath for tool event context");if(this.toolEventServices.has(e))return this.toolEventServices.get(e);let r=$(this.baseEventService,{ownerType:X,ownerId:e,ownerPath:t.map(o=>({...o}))});return this.toolEventServices.set(e,r),r}clearToolEventServices(){this.toolEventServices.clear();}getBaseEventService(){return this.baseEventService}buildBaseOwnerPath(e){return e?.ownerPath?.length?e.ownerPath.map(t=>({...t})):[]}buildExecutionOwnerContext(e,t){if(!e||e.length===0)throw new Error("[EXECUTION] Missing rootId for execution owner context");if(!t||t.length===0)throw new Error("[EXECUTION] Missing executionId for execution owner context");let o=[...this.agentOwnerPathBase.length?this.agentOwnerPathBase:this.ownerPathBase];return e&&!o.some(s=>s.type==="agent"&&s.id===e)&&o.push({type:"agent",id:e}),o.push({type:"execution",id:t}),{ownerType:U,ownerId:t,ownerPath:o}}buildThinkingOwnerContext(e,t,r,o){if(!r||r.length===0)throw new Error("[EXECUTION] Missing thinkingNodeId for thinking owner context");let n=[...this.buildExecutionOwnerContext(e,t).ownerPath];return o&&(n.push({type:"thinking",id:o}),n.push({type:"tool_result",id:`tool_result_${o}`})),n.push({type:"thinking",id:r}),{ownerType:U,ownerId:t,ownerPath:n}}buildToolOwnerContext(e,t,r){if(!r||r.length===0)throw new Error("[EXECUTION] Missing toolCallId for tool owner context");let s=[...this.buildExecutionOwnerContext(e,t).ownerPath,{type:"tool",id:r}];return {ownerType:X,ownerId:r,ownerPath:s}}buildResponseOwnerContext(e,t,r,o){let s=this.buildThinkingOwnerContext(e,t,r,o).ownerPath,n=`response_${r}`,a=[...s,{type:"response",id:n}];return {ownerType:U,ownerId:t,ownerPath:a}}emitExecution(e,t,r,o){this.emitWithContext(e,t,()=>this.buildExecutionOwnerContext(r,o),s=>{if(!s.ownerType||!s.ownerId)throw new Error("[EXECUTION] Missing owner context for execution event");return $(this.baseEventService,{ownerType:s.ownerType,ownerId:s.ownerId,ownerPath:s.ownerPath})});}emitTool(e,t,r,o,s){this.emitWithContext(e,t,()=>this.buildToolOwnerContext(r,o,s),n=>this.ensureToolEventService(n.ownerId,n.ownerPath));}emitWithContext(e,t,r,o){if(J(this.baseEventService))return;let s=r(),n=o(s),a={timestamp:new Date,...t};n.emit(e,a,s);}emitExecutionStartEvent(e,t,r,o,s,n){this.emitExecution(x.START,{parameters:{input:e,agentConfiguration:o.aiProviderInfo,availableTools:o.toolsInfo,toolCount:o.toolsInfo.length,hasTools:o.toolsInfo.length>0,systemMessage:t.defaultModel.systemMessage,provider:t.defaultModel.provider,model:t.defaultModel.model,temperature:t.defaultModel.temperature,maxTokens:t.defaultModel.maxTokens},metadata:{method:"execute",inputLength:e.length,messageCount:r.length,aiProvider:o.aiProviderInfo.providerName,model:o.aiProviderInfo.model,toolsAvailable:o.toolsInfo.map(a=>a.name),agentCapabilities:{canUseTools:o.toolsInfo.length>0,supportedActions:o.toolsInfo.map(a=>a.name)}}},s,n);}emitUserMessageEvent(e,t,r){this.emitExecution(x.USER_MESSAGE,{parameters:{input:e,userPrompt:e,userMessageContent:e,messageLength:e.length,wordCount:Me(e),characterCount:e.length},metadata:{messageRole:"user",inputLength:e.length,messageType:"user_message",hasQuestions:e.includes("?"),containsUrgency:/urgent|asap|critical|emergency/i.test(e),estimatedComplexity:e.length>200?"high":e.length>50?"medium":"low"}},t,r);}emitAssistantMessageComplete(e,t,r,o,s,n){if(typeof e.content!="string"||e.content.length===0)throw new Error("[EXECUTION] assistant response must have content or tool calls");if(!(e.timestamp instanceof Date))throw new Error("[EXECUTION] assistant response timestamp is required");let a=e.content,d=e.timestamp,u=new Date().getTime()-d.getTime();this.emitWithContext(x.ASSISTANT_MESSAGE_COMPLETE,{parameters:{assistantMessage:a,responseLength:a.length,wordCount:Me(a),responseTime:u,contentPreview:a.length>200?a.substring(0,200)+"...":a},result:{success:true,data:a.substring(0,100)+"...",fullResponse:a,responseMetrics:{length:a.length,estimatedReadTime:Math.ceil(Me(a)/200),hasCodeBlocks:/```/.test(a),hasLinks:/https?:\/\//.test(a),complexity:a.length>1e3?"high":a.length>300?"medium":"low"}},metadata:{executionId:t,round:r,completed:true,reason:"no_tool_calls",responseCharacteristics:{hasQuestions:a.includes("?"),isError:/error|fail|wrong/i.test(a),isComplete:/complete|done|finish/i.test(a),containsNumbers:/\d/.test(a)}}},()=>this.buildResponseOwnerContext(o,t,s,n),l=>{if(!l.ownerType||!l.ownerId)throw new Error("[EXECUTION] Missing owner context for response event");return $(this.baseEventService,{ownerType:l.ownerType,ownerId:l.ownerId,ownerPath:l.ownerPath})});}emitToolResultsEvents(e,t,r,o,s,n,a,d){let u=e.map(c=>{if(!c.id||c.id.length===0)throw new Error("[EXECUTION] Tool call missing id for tool results ready payload");return c.id});if(u.length===0)throw new Error("[EXECUTION] Tool results ready requires toolCallIds");let l=()=>this.buildThinkingOwnerContext(o,s,a,d),g=c=>{if(!c.ownerType||!c.ownerId)throw new Error("[EXECUTION] Missing owner context for tool results event");return $(this.baseEventService,{ownerType:c.ownerType,ownerId:c.ownerId,ownerPath:c.ownerPath})};this.emitWithContext(x.TOOL_RESULTS_READY,{parameters:{toolCallIds:u,round:n},metadata:{round:n}},l,g),this.emitWithContext(x.TOOL_RESULTS_TO_LLM,{parameters:{toolsExecuted:r.length,round:n},metadata:{toolsExecuted:t.results.map(c=>{if(!c.toolName||c.toolName.length===0)throw new Error("[EXECUTION] Tool result missing toolName");return c.toolName}),round:n}},l,g);}};var ar={beforeRun:async(i,e)=>{i.beforeRun&&e.input&&await i.beforeRun(e.input,e.metadata);},afterRun:async(i,e)=>{i.afterRun&&e.input&&e.response&&await i.afterRun(e.input,e.response,e.metadata);},beforeProviderCall:async(i,e)=>{i.beforeProviderCall&&e.messages&&await i.beforeProviderCall(e.messages);},afterProviderCall:async(i,e)=>{i.afterProviderCall&&e.messages&&e.responseMessage&&await i.afterProviderCall(e.messages,e.responseMessage);},onError:async(i,e)=>{if(i.onError&&e.error){let t={action:`${U}.${x.ERROR}`,metadata:{}},r=e.executionContext?.executionId;typeof r=="string"&&r.length>0&&(t.executionId=r);let o=e.executionContext?.sessionId;typeof o=="string"&&o.length>0&&(t.sessionId=o);let s=e.executionContext?.userId;typeof s=="string"&&s.length>0&&(t.userId=s),await i.onError(e.error,t);}}};async function k(i,e,t,r){let o=ar[e];if(o)for(let s of i)try{await o(s,t);}catch(n){r.warn("Plugin hook failed",{pluginName:s.name,hookName:e,error:n instanceof Error?n.message:String(n)});}}async function*xt(i,e,t,r,o){let{aiProviders:s,tools:n,conversationHistory:a,toolExecutionService:d,plugins:u,logger:l,eventEmitter:g}=o;l.debug("ExecutionService.executeStream called");let c=o.generateExecutionId(),p=Date.now();if(!r?.conversationId||r.conversationId.length===0)throw new Error("[EXECUTION] conversationId is required for streaming");let v=r.conversationId;g.prepareOwnerPathBases(v);try{let f=a.getConversationSession(r.conversationId);i&&f.addUserMessage(i,{executionId:c}),await k(u,"beforeRun",{input:i,...r?.metadata?{metadata:r.metadata}:{}},l);let S=s.getCurrentProvider();if(!S)throw new Error("No AI provider configured");let P=s.getProvider(S.provider);if(!P)throw new Error(`AI provider '${S.provider}' not found`);if(typeof P.chatStream!="function")throw new Error("Provider must have chatStream method to support streaming execution");l.debug("ExecutionService calling provider.chatStream");let A=f.getMessages(),T=Array.isArray(t.tools)?t.tools.length:void 0;l.debug("[EXECUTION-SERVICE] config.tools:",{length:T});let L=n.getTools(),lt=Array.isArray(L)?L.length:void 0;l.debug("[EXECUTION-SERVICE] this.tools.getTools():",{length:lt}),l.debug("[EXECUTION-SERVICE] config.tools exists:",{exists:!!t.tools}),l.debug("[EXECUTION-SERVICE] config.tools.length > 0:",{hasTools:t.tools&&t.tools.length>0});let F={model:t.defaultModel.model,...t.tools&&t.tools.length>0&&{tools:n.getTools()}};l.debug("[EXECUTION-SERVICE] Final chatOptions has tools:",{hasTools:!!F.tools});let fe=Array.isArray(F.tools)?F.tools.length:void 0;l.debug("[EXECUTION-SERVICE] Final chatOptions.tools length:",{length:fe});let V=P.chatStream;if(!V)throw new Error("Provider does not support streaming");let Q=V.call(P,A,F),H="",w=[],h=-1;for await(let q of Q)if(q.content&&(H+=q.content,yield {chunk:q.content,isComplete:!1}),q.role==="assistant"){let Xe=q;if(Array.isArray(Xe.toolCalls)&&Xe.toolCalls.length>0){for(let M of Xe.toolCalls)if(M.id&&M.id!==""){if(!M.type||M.type.length===0)throw new Error(`[EXECUTION] Tool call "${M.id}" missing type in stream`);if(!M.function?.name||M.function.name.length===0)throw new Error(`[EXECUTION] Tool call "${M.id}" missing function name in stream`);if(typeof M.function.arguments!="string")throw new Error(`[EXECUTION] Tool call "${M.id}" missing arguments in stream`);h=w.length,w.push({id:M.id,type:M.type,function:{name:M.function.name,arguments:M.function.arguments}}),l.debug(`[TOOL-STREAM] New tool call started: ${M.id} (${M.function?.name})`);}else if(h>=0){let ut=typeof M.function?.name=="string"&&M.function.name.length>0,Fe=typeof M.function?.arguments=="string"&&M.function.arguments.length>0;if(!ut&&!Fe)throw new Error(`[EXECUTION] Tool call fragment missing name/arguments for ${w[h].id}`);ut&&(w[h].function.name+=M.function.name),Fe&&(w[h].function.arguments+=M.function.arguments);let jt=Fe?M.function.arguments:M.function.name;l.debug(`[TOOL-STREAM] Adding fragment to tool ${w[h].id}: "${jt}"`);}}}if(l.debug("[EXECUTION-SERVICE-STREAM] Stream completed, toolCalls detected:",{count:w.length}),typeof H!="string")throw new Error("[EXECUTION] Streaming response content is required");f.addAssistantMessage(H,w,{executionId:c}),w.length>0&&(yield*lr(w,f,v,c,d,g,l)),await k(u,"afterRun",{input:i,response:H,...r?.metadata?{metadata:r.metadata}:{}},l),yield {chunk:"",isComplete:!0};}catch(f){throw l.error("ExecutionService streaming execution failed",{error:f instanceof Error?f.message:String(f),executionTime:Date.now()-p}),await k(u,"onError",{input:i,error:f instanceof Error?f:new Error(String(f)),...r?.metadata?{metadata:r.metadata}:{}},l),f}finally{g.resetOwnerPathBases();}}async function*lr(i,e,t,r,o,s,n){n.debug("[EXECUTION-SERVICE-STREAM] Executing tools:",{tools:i.map(v=>v.function.name)});let a=t,d=`thinking_${a}_${Date.now()}_${r}`,u=[...s.buildExecutionOwnerContext(a,r).ownerPath,{type:"thinking",id:d}],g={requests:o.createExecutionRequestsWithContext(i,{ownerPathBase:u}),mode:"parallel",maxConcurrency:5,continueOnError:true},c=await o.executeTools(g);for(let v of i){if(!v.id)throw new Error("[EXECUTION] Tool call missing id in streaming mode");if(!v.function?.name||v.function.name.length===0)throw new Error(`[EXECUTION] Tool call "${v.id}" missing function name in streaming mode`);let f=c.results.find(T=>T.executionId===v.id),S=c.errors.find(T=>xe(T)&&T.executionId===v.id),P,A={executionId:r};if(f&&f.success){if(typeof f.result>"u")throw new Error("[EXECUTION] Tool result missing result payload in streaming mode");P=typeof f.result=="string"?f.result:JSON.stringify(f.result),A.success=true,f.toolName&&(A.toolName=f.toolName),yield {chunk:`
3
- [Tool: ${v.function.name} executed successfully]`,isComplete:false};}else if(S){let T=S,L=T.error?.message?T.error.message:T.message?T.message:"";if(!L||L.length===0)throw new Error("[EXECUTION] Tool execution error missing message in streaming mode");P=`Error: ${L}`,A.success=false,A.error=L,T.toolName&&(A.toolName=T.toolName),yield {chunk:`
4
- [Tool: ${v.function.name} failed: ${L}]`,isComplete:false};}else throw new Error(`[EXECUTION] Missing tool result for tool call "${v.id}" in streaming mode`);e.addToolMessageWithId(P,v.id,v.function.name,A);}let p=i.map(v=>{if(!v.id||v.id.length===0)throw new Error("[EXECUTION] Tool call missing id for streaming tool results ready payload");return v.id});if(p.length===0)throw new Error("[EXECUTION] Tool results ready requires toolCallIds in streaming mode");s.emitExecution(x.TOOL_RESULTS_READY,{parameters:{toolCallIds:p,round:1},metadata:{toolsExecuted:c.results.map(v=>{if(!v.toolName||v.toolName.length===0)throw new Error("[EXECUTION] Tool result missing toolName");return v.toolName}),round:1}},t,r);}function cr(i,e){let t=Array.isArray(e.lastTrackedAssistantMessage?.toolCalls)&&e.lastTrackedAssistantMessage.toolCalls.length>0,r=`thinking_${i}_round${e.runningAssistantCount+1}`,o=t?`thinking_${i}_round${e.runningAssistantCount}`:void 0;return {thinkingNodeId:r,previousThinkingNodeId:o}}async function gr(i,e,t,r){if(!e.defaultModel?.model)throw new Error("Model is required in defaultModel configuration. Please specify a model.");if(typeof e.defaultModel.model!="string"||e.defaultModel.model.trim()==="")throw new Error("Model must be a non-empty string in defaultModel configuration.");let o={model:e.defaultModel.model,...e.defaultModel.maxTokens!==void 0&&{maxTokens:e.defaultModel.maxTokens},...e.defaultModel.temperature!==void 0&&{temperature:e.defaultModel.temperature},...t.availableTools.length>0&&{tools:t.availableTools}};if(r){let s=r.lookup(i,e.defaultModel.model,e.defaultModel.provider,{temperature:e.defaultModel.temperature,maxTokens:e.defaultModel.maxTokens});if(s)return {role:"assistant",content:s,timestamp:new Date};let n=await t.provider.chat(i,o);return typeof n.content=="string"&&r.store(i,e.defaultModel.model,e.defaultModel.provider,n.content,{temperature:e.defaultModel.temperature,maxTokens:e.defaultModel.maxTokens}),n}return t.provider.chat(i,o)}function mr(i,e,t,r,o){let s=i.role==="assistant"?i.toolCalls:void 0,n=Array.isArray(s)&&s.length>0;if(typeof i.content!="string"&&!n)throw new Error("[EXECUTION] Provider response must have content or tool calls");if(s&&!Array.isArray(s))throw new Error("[EXECUTION] assistant toolCalls must be an array");let a=i.content??"";if(o.debug(`[ROUND-${r}] Provider response completed`,{executionId:e,conversationId:t,round:r,responseLength:a.length,hasToolCalls:Array.isArray(s)&&s.length>0,toolCallsCount:Array.isArray(s)?s.length:0}),i.role!=="assistant")throw new Error(`Unexpected response role: ${i.role}`);let d=i,u=d.toolCalls??[];if(!Array.isArray(u))throw new Error("[EXECUTION] assistantResponse.toolCalls must be an array");return {assistantResponse:d,assistantToolCalls:u}}async function pr(i,e,t,r,o,s,n,a,d){let{toolExecutionService:u,logger:l,eventEmitter:g}=d;l.debug("Tool calls detected, executing tools",{toolCallCount:i.length,round:o,toolCalls:i.map(T=>({id:T.id,name:T.function?.name}))});let c=g.buildThinkingOwnerContext(t,r,s,n).ownerPath,p=i.length,v=`${s}`,P={requests:u.createExecutionRequestsWithContext(i,{ownerPathBase:c,metadataFactory:T=>({conversationId:t,round:o,directParentId:s,batchId:v,expectedCount:p,toolCallId:T.id})}).map(T=>{if(!T.ownerId)throw new Error("[EXECUTION] Tool request missing ownerId");return {...T,eventService:g.ensureToolEventService(T.ownerId,T.ownerPath),baseEventService:g.getBaseEventService()}}),mode:"parallel",maxConcurrency:5,continueOnError:true},A=await u.executeTools(P);a.toolsExecuted.push(...A.results.map(T=>{if(!T.toolName||T.toolName.length===0)throw new Error("[EXECUTION] Tool result missing toolName");return T.toolName})),fr(i,A,e,o,l),g.emitToolResultsEvents(i,A,a.toolsExecuted,t,r,o,s,n),g.clearToolEventServices();}function fr(i,e,t,r,o){for(let s of i){if(!s.id)throw new Error(`Tool call missing ID: ${JSON.stringify(s)}`);let n=s.function?.name;if(!n||n.length===0)throw new Error(`[EXECUTION] Tool call "${s.id}" missing function name`);let a=e.results.find(g=>g.executionId===s.id),d=e.errors.find(g=>xe(g)&&g.executionId===s.id),u,l={round:r};if(a&&a.success){if(typeof a.result>"u")throw new Error("[EXECUTION] Tool result missing result payload");u=typeof a.result=="string"?a.result:JSON.stringify(a.result),l.success=true,a.toolName&&(l.toolName=a.toolName);}else if(a&&!a.success){if(!a.error||a.error.length===0)throw new Error("[EXECUTION] Tool result missing error message");u=`Error: ${a.error}`,l.success=false,l.error=a.error,a.toolName&&(l.toolName=a.toolName);}else if(d){let g=d,c=g.error?.message?g.error.message:g.message?g.message:"";if(!c||c.length===0)throw new Error("[EXECUTION] Tool execution error missing message");u=`Error: ${c}`,l.success=false,l.error=c,g.toolName&&(l.toolName=g.toolName);}else throw new Error(`No execution result found for tool call ID: ${s.id}`);o.debug("Adding tool result to conversation",{toolCallId:s.id,toolName:n,content:u.substring(0,100),round:r,currentHistoryLength:t.getMessages().length}),t.addToolMessageWithId(u,s.id,n,l),o.debug("Tool result added to history",{toolCallId:s.id,newHistoryLength:t.getMessages().length,round:r});}}async function Mt(i,e,t,r,o,s,n,a,d){let{plugins:u,logger:l,eventEmitter:g,cacheService:c}=d,p=i.currentRound;l.debug(`[ROUND-${p}] Starting execution round ${p}`,{executionId:o,conversationId:s.conversationId,round:p,maxRounds:e});let v=t.getMessages();if(!Array.isArray(v))throw new Error("[EXECUTION] Conversation messages must be an array");let{thinkingNodeId:f,previousThinkingNodeId:S}=cr(r,i),P=v;l.debug("Current conversation messages",{round:p,messageCount:P.length,fullHistory:P.map((h,q)=>({index:q,role:h.role,content:h.content?.substring(0,100),hasToolCalls:"toolCalls"in h?!!h.toolCalls?.length:false,toolCallId:"toolCallId"in h?h.toolCallId:void 0,toolCallsCount:"toolCalls"in h?h.toolCalls?.length:0}))}),await k(u,"beforeProviderCall",{messages:P},l),l.debug("Sending messages to AI provider",{round:p,messageCount:P.length,lastFewMessages:P.slice(-5).map(h=>({role:h.role,content:h.content?.substring(0,50),hasToolCalls:"toolCalls"in h?!!h.toolCalls?.length:false,toolCallId:"toolCallId"in h?h.toolCallId:void 0}))}),g.emitWithContext(x.ASSISTANT_MESSAGE_START,{parameters:{round:p,messageCount:P.length},metadata:{round:p,thinkingNodeId:f}},()=>g.buildThinkingOwnerContext(r,o,f,S),h=>{if(!h.ownerType||!h.ownerId)throw new Error("[EXECUTION] Missing owner context for thinking event");return $(g.getBaseEventService(),{ownerType:h.ownerType,ownerId:h.ownerId,ownerPath:h.ownerPath})});let A=4,T=.9,L=Math.ceil(JSON.stringify(P).length/A),F={"claude-sonnet-4-6":2e5,"claude-sonnet-4-5":2e5,"claude-opus-4-6":1e6,"claude-opus-4-5":2e5,"claude-haiku-4-5":2e5}[n.defaultModel.model]??2e5;if(L>F*T)return l.warn("[ROUND] Context overflow prevention \u2014 estimated tokens exceed 90% of context window",{estimatedTokens:L,contextLimit:F,round:p}),true;if(p>1&&"onTextDelta"in a.provider){let h=a.provider.onTextDelta;h&&h(`
1
+ import{randomUUID as e}from"node:crypto";import t from"jssha";import{spawn as n}from"node:child_process";const r={isPrimitive:e=>e==null||typeof e==`string`||typeof e==`number`||typeof e==`boolean`,isArray:e=>Array.isArray(e)&&e.every(e=>r.isUniversalValue(e)),isObject:e=>typeof e==`object`&&!!e&&!Array.isArray(e)&&!(e instanceof Date)&&Object.values(e).every(e=>r.isUniversalValue(e)),isUniversalValue:e=>e instanceof Date?!0:r.isPrimitive(e)||r.isArray(e)||r.isObject(e)};function i(e){return{functionCalling:{supported:e},nativeWebTools:{webSearch:{supported:!1,enabled:!1,reason:`Provider does not declare native web search support.`},webFetch:{supported:!1,enabled:!1,reason:`Provider does not declare native web fetch support.`}}}}function a(e){let t=typeof e.supportsTools==`function`?e.supportsTools():!1;return e.getCapabilities?.()??i(t)}function o(e,t,n){n?.webSearch===!0&&s(e,`web search`,t.nativeWebTools.webSearch),n?.webFetch===!0&&s(e,`web fetch`,t.nativeWebTools.webFetch)}function s(e,t,n){if(!n.supported)throw Error(`Provider ${e} does not support native ${t}.${c(n.reason)}`);if(!n.enabled)throw Error(`Provider ${e} supports native ${t} but it is not enabled.${c(n.reason)}`)}function c(e){return e?` ${e}`:``}function l(e,t){return e.find(e=>e.type===t||e.aliases?.includes(t)===!0)}function u(e){return e.map(e=>{if(!e.aliases||e.aliases.length===0)return e.type;let t=e.aliases.length===1?`alias`:`aliases`;return`${e.type} (${t}: ${e.aliases.join(`, `)})`}).join(`, `)}function d(e){if(e?.credentialRequirement!==void 0)return e.credentialRequirement;if(e?.requiresApiKey===!0)return{anyOf:[`apiKey`]}}function f(e){return`generateImage`in e&&typeof e.generateImage==`function`}function p(e){return`createVideo`in e&&`getVideoJob`in e&&`cancelVideoJob`in e&&typeof e.createVideo==`function`&&typeof e.getVideoJob==`function`&&typeof e.cancelVideoJob==`function`}function m(e){return`getEstimatedDuration`in e||`getExecutionSteps`in e||`setProgressCallback`in e}function h(e,t){if(m(e)&&e.getEstimatedDuration)return e.getEstimatedDuration(t)}function g(e,t){if(m(e)&&e.getExecutionSteps)return e.getExecutionSteps(t)}function _(e,t){return m(e)&&e.setProgressCallback?(e.setProgressCallback(t),!0):!1}var v=class{history=[];isInitialized=!1;config;async configure(e){this.config=e,await this.ensureInitialized()}getHistory(){return[...this.history]}clearHistory(){this.history=[]}addMessage(e){this.history.push(e)}validateInput(e){if(!e||typeof e!=`string`)throw Error(`Input must be a non-empty string`)}async ensureInitialized(){this.isInitialized||=(await this.initialize(),!0)}async dispose(){this.clearHistory(),this.isInitialized=!1}},y=class{initialized=!1;async initialize(){this.initialized||=(await this.doInitialize(),!0)}async dispose(){await this.doDispose(),this.initialized=!1}isInitialized(){return this.initialized}ensureInitialized(){if(!this.initialized)throw Error(`${this.constructor.name} is not initialized`)}};function b(e){if(!Array.isArray(e))throw Error(`Messages must be an array`);if(e.length===0)throw Error(`Messages array cannot be empty`);for(let t of e)if(!t.role||![`user`,`assistant`,`system`,`tool`].includes(t.role))throw Error(`Invalid message role: ${t.role}`)}function x(e){if(e){if(!Array.isArray(e))throw Error(`Tools must be an array`);for(let t of e){if(!t.name||typeof t.name!=`string`)throw Error(`Tool must have a valid name`);if(!t.description||typeof t.description!=`string`)throw Error(`Tool must have a valid description`);if(!t.parameters||typeof t.parameters!=`object`||t.parameters===null||Array.isArray(t.parameters))throw Error(`Tool must have valid parameters`)}}}async function S(e,t,n,r){if(!e)throw Error(`Executor is required for ${t} provider. Configure an executor or use direct execution path.`);if(!r?.model)throw Error(`Model is required for executor execution in ${t} provider.`);return e.executeChat({messages:n,options:r,provider:t,model:r.model,...r.tools&&{tools:r.tools}})}async function*C(e,t,n,r){if(!e||!e.executeChatStream)throw Error(`Streaming executor is required for ${t} provider.`);if(!r?.model)throw Error(`Model is required for executor streaming in ${t} provider.`);let i=e.executeChatStream({messages:n,options:r,provider:t,model:r.model,stream:!0,...r.tools&&{tools:r.tools}});for await(let e of i)yield e}function w(e){return e.category===`chat`}function T(e){let t=e.data;if(!t)throw Error(`Chat entry ${e.id} has no data`);return{...t,id:e.id,timestamp:e.timestamp}}function E(e){return{id:e.id,timestamp:e.timestamp,category:`chat`,type:e.role,data:{...e}}}function D(e){return e.filter(w).map(T)}function ee(e){return e.role===`user`}function O(e){return e.role===`assistant`}function te(e){return e.role===`system`}function ne(e){return e.role===`tool`}const k={debug:()=>{},info:()=>{},warn:()=>{},error:()=>{},log:()=>{},group:()=>{},groupEnd:()=>{}};var re=class e{static instance;globalLevel;constructor(){this.globalLevel=`warn`}static getInstance(){return e.instance||=new e,e.instance}getGlobalLevel(){return this.globalLevel}setGlobalLevel(e){this.globalLevel=e}},ie=class{level;packageName;sinkLogger;constructor(e,t){this.packageName=e,this.sinkLogger=t||k}debug(...e){if(this.shouldLog(`debug`)){let[t,n]=e;this.forward(`debug`,String(t??``),A(n)?n:void 0)}}info(...e){if(this.shouldLog(`info`)){let[t,n]=e;this.forward(`info`,String(t??``),A(n)?n:void 0)}}warn(...e){if(this.shouldLog(`warn`)){let[t,n]=e;this.forward(`warn`,String(t??``),A(n)?n:void 0)}}error(...e){if(this.shouldLog(`error`)){let[t,n]=e;this.forward(`error`,String(t??``),A(n)?n:void 0)}}log(...e){this.info(...e)}getLevel(){return this.level||re.getInstance().getGlobalLevel()}shouldLog(e){let t=this.getLevel();if(t===`silent`)return!1;let n=[`debug`,`info`,`warn`,`error`,`silent`];return n.indexOf(e)>=n.indexOf(t)}forward(e,t,n){let r={timestamp:new Date().toISOString(),level:e,message:t,...n&&{context:n},packageName:this.packageName},i=`[${r.timestamp}] [${r.level.toUpperCase()}] [${r.packageName}] ${r.message}`;switch(e){case`debug`:this.sinkLogger.debug(i,n??{});return;case`info`:this.sinkLogger.info(i,n??{});return;case`warn`:this.sinkLogger.warn(i,n??{});return;case`error`:this.sinkLogger.error(i,n??{});return;case`silent`:return}}};function A(e){return typeof e==`object`&&!!e&&!(e instanceof Error)&&!(e instanceof Date)&&!Array.isArray(e)}function j(e,t){return new ie(e,t)}function ae(e){re.getInstance().setGlobalLevel(e)}function oe(){return re.getInstance().getGlobalLevel()}const M=j(`agents`);var se=class{config;executor;logger;constructor(e=k){this.logger=e}async configure(e){this.config=e,this.hasExecutor(e)&&e.executor&&(this.executor=e.executor)}hasExecutor(e){return typeof e==`object`&&!!e&&`executor`in e}async*streamWithAbort(e,t){let n=e[Symbol.asyncIterator]();try{for(;!t?.aborted;){let e=await ce(n,t);if(e.done||(await le(t),t?.aborted))break;yield e.value}}finally{t?.aborted&&await n.return?.()}}async generateResponse(e){let t=await this.chat(e.messages,{...e.model!==void 0&&{model:e.model},...e.temperature!==void 0&&{temperature:e.temperature},...e.maxTokens!==void 0&&{maxTokens:e.maxTokens},...e.tools!==void 0&&{tools:e.tools}});return{content:t.content??null,toolCalls:O(t)?t.toolCalls:void 0,model:e.model,metadata:e.metadata}}async*generateStreamingResponse(e){if(!this.chatStream)throw Error(`[AI-PROVIDER] Streaming is not supported by provider "${this.name}"`);for await(let t of this.chatStream(e.messages,{...e.model!==void 0&&{model:e.model},...e.temperature!==void 0&&{temperature:e.temperature},...e.maxTokens!==void 0&&{maxTokens:e.maxTokens},...e.tools!==void 0&&{tools:e.tools}}))yield{content:t.content??null,toolCalls:O(t)?t.toolCalls:void 0,model:e.model,metadata:e.metadata}}supportsTools(){return!0}getCapabilities(){return i(this.supportsTools())}validateConfig(){return!0}validateMessages(e){b(e)}validateTools(e){x(e)}validateNativeWebTools(e){o(this.name,this.getCapabilities(),e)}async executeViaExecutorOrDirect(e,t){return S(this.executor,this.name,e,t)}async*executeStreamViaExecutorOrDirect(e,t){this.logger.debug?.(`🔍 [TOOL-FLOW] AbstractAIProvider.executeStreamViaExecutorOrDirect() - Executor request`,{provider:this.name,model:t?.model,hasTools:!!t?.tools,toolsCount:t?.tools?.length||0,toolNames:t?.tools?.map(e=>e.name)||[]}),yield*C(this.executor,this.name,e,t)}async dispose(){this.executor?.dispose&&await this.executor.dispose()}};async function ce(e,t){if(!t)return e.next();if(t.aborted)return{done:!0,value:void 0};let n,r=new Promise(e=>{n=()=>e({done:!0,value:void 0}),t.addEventListener(`abort`,n,{once:!0})});try{return await Promise.race([e.next(),r])}finally{n&&t.removeEventListener(`abort`,n)}}async function le(e){e?.aborted||await new Promise(e=>setTimeout(e,0))}let ue=function(e){return e.MONITORING=`monitoring`,e.LOGGING=`logging`,e.STORAGE=`storage`,e.NOTIFICATION=`notification`,e.SECURITY=`security`,e.PERFORMANCE=`performance`,e.ERROR_HANDLING=`error_handling`,e.LIMITS=`limits`,e.EVENT_PROCESSING=`event_processing`,e.CUSTOM=`custom`,e}({}),de=function(e){return e[e.CRITICAL=1e3]=`CRITICAL`,e[e.HIGH=800]=`HIGH`,e[e.NORMAL=500]=`NORMAL`,e[e.LOW=200]=`LOW`,e[e.MINIMAL=100]=`MINIMAL`,e}({});const N={CREATED:`created`,EXECUTION_START:`execution_start`,EXECUTION_COMPLETE:`execution_complete`,EXECUTION_ERROR:`execution_error`,AGGREGATION_COMPLETE:`aggregation_complete`,CONFIG_UPDATED:`config_updated`},P=`agent`,F={START:`start`,COMPLETE:`complete`,ERROR:`error`,ASSISTANT_MESSAGE_START:`assistant_message_start`,ASSISTANT_MESSAGE_COMPLETE:`assistant_message_complete`,USER_MESSAGE:`user_message`,TOOL_RESULTS_TO_LLM:`tool_results_to_llm`,TOOL_RESULTS_READY:`tool_results_ready`},I=`execution`;function fe(e){return`executionId`in e||`toolName`in e}function pe(e){let t=0,n=!1;for(let r=0;r<e.length;r++){let i=e[r]===` `||e[r]===` `||e[r]===`
2
+ `||e[r]===`\r`;!i&&!n?(t++,n=!0):i&&(n=!1)}return t}var L=class{listeners=new Set;subscribe(e){this.listeners.add(e)}unsubscribe(e){this.listeners.delete(e)}notifyListeners(e,t,n){for(let r of this.listeners)r(e,t,n)}},me=class extends L{emit(e,t,n){}};const he=new me;function R(e){return e===he||e instanceof me}function ge(e,t){if(!e||e.trim().length===0)throw Error(`[EVENTS] ownerType is required to compose event names.`);if(e.includes(`.`))throw Error(`[EVENTS] ownerType must not contain '.': "${e}"`);if(!t||t.trim().length===0)throw Error(`[EVENTS] local event name is required.`);if(t.includes(`.`))throw Error(`[EVENTS] Local event name must not contain '.': "${t}"`);return`${e}.${t}`}function _e(){return`span_${Date.now().toString(36)}_${Math.random().toString(36).slice(2,10)}`}var ve=class extends L{base;binding;constructor(e,t){super(),this.base=e,this.binding=t}emit(e,t,n){if(e.includes(`.`))throw Error(`[EVENTS] Local event name must not contain '.': "${e}"`);let r={...n,ownerType:this.binding.ownerType,ownerId:this.binding.ownerId,ownerPath:this.binding.ownerPath,depth:this.binding.ownerPath.length,spanId:n?.spanId??_e()},i=ge(this.binding.ownerType,e);this.base.emit(i,t,r)}subscribe(e){this.base.subscribe(e)}unsubscribe(e){this.base.unsubscribe(e)}};function z(e,t){return new ve(e,t)}function ye(e,t){return z(e,t)}var be=class extends L{emit(e,t,n){this.notifyListeners(e,t,n)}};const xe={ASSIGNED:`assigned`,COMPLETED:`completed`},Se=`task`,Ce={MESSAGE:`message`,INPUT:`input`},we=`user`;function Te(e,t,n,r,i,a,o){e.emitExecution(F.START,{parameters:{input:t,agentConfiguration:i.aiProviderInfo,availableTools:i.toolsInfo,toolCount:i.toolsInfo.length,hasTools:i.toolsInfo.length>0,systemMessage:n.defaultModel.systemMessage,provider:n.defaultModel.provider,model:n.defaultModel.model,temperature:n.defaultModel.temperature,maxTokens:n.defaultModel.maxTokens},metadata:{method:`execute`,inputLength:t.length,messageCount:r.length,aiProvider:i.aiProviderInfo.providerName,model:i.aiProviderInfo.model,toolsAvailable:i.toolsInfo.map(e=>e.name),agentCapabilities:{canUseTools:i.toolsInfo.length>0,supportedActions:i.toolsInfo.map(e=>e.name)}}},a,o)}function Ee(e,t,n,r){e.emitExecution(F.USER_MESSAGE,{parameters:{input:t,userPrompt:t,userMessageContent:t,messageLength:t.length,wordCount:pe(t),characterCount:t.length},metadata:{messageRole:`user`,inputLength:t.length,messageType:`user_message`,hasQuestions:t.includes(`?`),containsUrgency:/urgent|asap|critical|emergency/i.test(t),estimatedComplexity:t.length>200?`high`:t.length>50?`medium`:`low`}},n,r)}function De(e,t,n,r,i,a,o,s){if(typeof n.content!=`string`||n.content.length===0)throw Error(`[EXECUTION] assistant response must have content or tool calls`);if(!(n.timestamp instanceof Date))throw Error(`[EXECUTION] assistant response timestamp is required`);let c=n.content,l=n.timestamp,u=new Date().getTime()-l.getTime();e.emitWithContext(F.ASSISTANT_MESSAGE_COMPLETE,{parameters:{assistantMessage:c,responseLength:c.length,wordCount:pe(c),responseTime:u,contentPreview:c.length>200?c.substring(0,200)+`...`:c},result:{success:!0,data:c.substring(0,100)+`...`,fullResponse:c,responseMetrics:{length:c.length,estimatedReadTime:Math.ceil(pe(c)/200),hasCodeBlocks:/```/.test(c),hasLinks:/https?:\/\//.test(c),complexity:c.length>1e3?`high`:c.length>300?`medium`:`low`}},metadata:{executionId:r,round:i,completed:!0,reason:`no_tool_calls`,responseCharacteristics:{hasQuestions:c.includes(`?`),isError:/error|fail|wrong/i.test(c),isComplete:/complete|done|finish/i.test(c),containsNumbers:/\d/.test(c)}}},()=>e.buildResponseOwnerContext(a,r,o,s),e=>{if(!e.ownerType||!e.ownerId)throw Error(`[EXECUTION] Missing owner context for response event`);return z(t,{ownerType:e.ownerType,ownerId:e.ownerId,ownerPath:e.ownerPath})})}function Oe(e,t,n,r,i,a,o,s,c,l){let u=n.map(e=>{if(!e.id||e.id.length===0)throw Error(`[EXECUTION] Tool call missing id for tool results ready payload`);return e.id});if(u.length===0)throw Error(`[EXECUTION] Tool results ready requires toolCallIds`);let d=()=>e.buildThinkingOwnerContext(a,o,c,l),f=e=>{if(!e.ownerType||!e.ownerId)throw Error(`[EXECUTION] Missing owner context for tool results event`);return z(t,{ownerType:e.ownerType,ownerId:e.ownerId,ownerPath:e.ownerPath})};e.emitWithContext(F.TOOL_RESULTS_READY,{parameters:{toolCallIds:u,round:s},metadata:{round:s}},d,f),e.emitWithContext(F.TOOL_RESULTS_TO_LLM,{parameters:{toolsExecuted:i.length,round:s},metadata:{toolsExecuted:r.results.map(e=>{if(!e.toolName||e.toolName.length===0)throw Error(`[EXECUTION] Tool result missing toolName`);return e.toolName}),round:s}},d,f)}var B=class extends Error{context;constructor(e,t){super(e),this.context=t,this.name=this.constructor.name,Object.setPrototypeOf(this,new.target.prototype)}},V=class extends B{code=`CONFIGURATION_ERROR`;category=`user`;recoverable=!1;constructor(e,t){super(`Configuration Error: ${e}`,t)}},H=class extends B{field;code=`VALIDATION_ERROR`;category=`user`;recoverable=!1;constructor(e,t,n){super(`Validation Error: ${e}`,n),this.field=t}},ke=class extends B{provider;originalError;code=`PROVIDER_ERROR`;category=`provider`;recoverable=!0;constructor(e,t,n,r){super(`Provider Error (${t}): ${e}`,r),this.provider=t,this.originalError=n}},Ae=class extends B{provider;code=`AUTHENTICATION_ERROR`;category=`user`;recoverable=!1;constructor(e,t,n){super(`Authentication Error: ${e}`,n),this.provider=t}},je=class extends B{retryAfter;provider;code=`RATE_LIMIT_ERROR`;category=`provider`;recoverable=!0;constructor(e,t,n,r){super(`Rate Limit Error: ${e}`,r),this.retryAfter=t,this.provider=n}},Me=class extends B{originalError;code=`NETWORK_ERROR`;category=`system`;recoverable=!0;constructor(e,t,n){super(`Network Error: ${e}`,n),this.originalError=t}},U=class extends B{toolName;originalError;code=`TOOL_EXECUTION_ERROR`;category=`system`;recoverable=!1;constructor(e,t,n,r){super(`Tool Execution Error (${t}): ${e}`,r),this.toolName=t,this.originalError=n}},Ne=class extends B{availableModels;code=`MODEL_NOT_AVAILABLE`;category=`user`;recoverable=!1;constructor(e,t,n,r){super(`Model "${e}" is not available for provider "${t}"`,r),this.availableModels=n}},Pe=class extends B{code=`CIRCUIT_BREAKER_OPEN`;category=`system`;recoverable=!0;constructor(e=`Circuit breaker is open`,t){super(e,t)}},W=class extends B{pluginName;code=`PLUGIN_ERROR`;category=`system`;recoverable=!1;constructor(e,t,n){super(`Plugin Error (${t}): ${e}`,n),this.pluginName=t}},Fe=class extends B{code=`STORAGE_ERROR`;category=`system`;recoverable=!0;constructor(e,t){super(`Storage Error: ${e}`,t)}},Ie=class extends B{code=`CACHE_INTEGRITY_ERROR`;category=`system`;recoverable=!1;constructor(e,t){super(`Cache Integrity Error: ${e}`,t)}},Le=class{static isRecoverable(e){return e instanceof B?e.recoverable:!1}static getErrorCode(e){return e instanceof B?e.code:`UNKNOWN_ERROR`}static fromUnknown(e,t=`An unknown error occurred`){return e instanceof B?e:e instanceof Error?new V(e.message||t):new V(typeof e==`string`?e:t)}static wrapProviderError(e,t,n){let r=e instanceof Error?e:Error(String(e));return new ke(`Failed to ${n}`,t,r,{operation:n})}};function Re(e){if(!e.executionId)throw new H(`[STRICT-POLICY][EMITTER-CONTRACT] Tool execution request missing executionId`);if(!e.ownerType)throw new H(`[STRICT-POLICY][EMITTER-CONTRACT] Tool execution request missing ownerType: executionId=${e.executionId}`);if(!e.ownerId)throw new H(`[STRICT-POLICY][EMITTER-CONTRACT] Tool execution request missing ownerId: executionId=${e.executionId}`);return{executionId:e.executionId,ownerType:e.ownerType,ownerId:e.ownerId}}function ze(e){let t=Re(e);return{toolName:e.toolName,parameters:e.parameters,executionId:t.executionId,ownerType:t.ownerType,ownerId:t.ownerId,ownerPath:e.ownerPath,metadata:e.metadata,eventService:e.eventService,baseEventService:e.baseEventService}}function Be(e){return{toolName:e.toolName,executionId:e.executionId??``,success:!1,error:`Execution interrupted by user`,result:null}}function Ve(e,t){return{toolName:e.toolName,result:null,success:!1,error:t.message,executionId:e.executionId}}function He(e){return Error(`Tool execution failed: toolName=${String(e.toolName)} executionId=${String(e.executionId)} error=${String(e.error||`Unknown error`)}`)}function Ue(e){return e!==void 0}function We(e){return e!==void 0}function Ge(e,t){if(e===0)return 0;if(t===void 0||!Number.isFinite(t))return e;let n=Math.floor(t);return n<1?1:Math.min(n,e)}async function Ke(e,t,n,r){let i=e.requests[r];if(i)try{let a=e.signal?.aborted?Be(i):await t.executeTool(i.toolName,i.parameters,ze(i));n.resultsByIndex[r]=a,a.success||(n.errorsByIndex[r]=He(a))}catch(e){let t=e instanceof Error?e:Error(String(e));n.errorsByIndex[r]=t,n.resultsByIndex[r]=Ve(i,t)}}async function qe(e,t,n){for(;n.nextRequestIndex<e.requests.length;){let r=n.nextRequestIndex;n.nextRequestIndex+=1,await Ke(e,t,n,r)}}async function Je(e,t){let n={resultsByIndex:Array(e.requests.length),errorsByIndex:Array(e.requests.length),nextRequestIndex:0},r=Ge(e.requests.length,e.maxConcurrency),i=Array.from({length:r},()=>qe(e,t,n));await Promise.all(i);let a=n.resultsByIndex.filter(Ue),o=n.errorsByIndex.filter(We);if(o.length>0&&!e.continueOnError)throw o[0];return{results:a,errors:o}}async function Ye(e,t){let n=[],r=[];for(let i of e.requests)try{let a=await t.executeTool(i.toolName,i.parameters,ze(i));if(n.push(a),a.success||r.push(He(a)),!a.success&&!e.continueOnError)break}catch(t){let n=t instanceof Error?t:Error(String(t));if(r.push(n),!e.continueOnError)break}return{results:n,errors:r}}async function Xe(e,t,n){return n.debug(`Executing ${e.requests.length} tools in ${e.mode} mode`),e.mode===`parallel`?Je(e,t):Ye(e,t)}const G={CALL_START:`call_start`,CALL_COMPLETE:`call_complete`,CALL_ERROR:`call_error`,CALL_RESPONSE_READY:`call_response_ready`},K=`tool`,Ze=`unknown_tool`;var Qe=class{tools;logger;constructor(e,t=k){this.tools=e,this.logger=t}async executeTool(e,t,n){this.logger.debug(`Executing tool: ${e}`);try{if(!n?.executionId)throw new H(`ToolExecutionService requires executionId (toolCallId) in ToolExecutionContext`);if(!this.tools.hasTool(e)){let t=this.tools.getTools().map(e=>e.name).sort(),r=$e(e,t),i=n.eventService;if(i){let t={timestamp:new Date,toolName:e,error:r};i.emit(G.CALL_ERROR,t)}return this.logger.warn(`Tool call skipped because requested tool is not registered`,{toolName:e,availableTools:t}),{success:!1,error:r,toolName:e,executionId:n.executionId,metadata:{errorCode:Ze,requestedTool:e,availableTools:t}}}let r=n.eventService;if(r){let n={timestamp:new Date,toolName:e,parameters:t};r.emit(G.CALL_START,n)}let{toolName:i,parameters:a,...o}=n,s={...o,toolName:e,parameters:t,executionId:n.executionId},c=await this.tools.executeTool(e,t,s);if(this.logger.debug(`Tool execution completed: ${e}`),r){let t={timestamp:new Date,toolName:e,result:c};r.emit(G.CALL_COMPLETE,t),r.emit(G.CALL_RESPONSE_READY,t)}return{success:!0,result:c,toolName:e,executionId:s.executionId}}catch(t){this.logger.error(`Tool execution failed: ${e}`);let r=t instanceof Error?t:Error(String(t)),i=n?.eventService;if(i&&n?.executionId){let t={timestamp:new Date,toolName:e,error:r.message};i.emit(G.CALL_ERROR,t)}return{success:!1,error:r.message,toolName:e,executionId:n?.executionId}}}createExecutionRequestsWithContext(e,t){return e.map(e=>{let n;try{n=JSON.parse(e.function.arguments)}catch{throw new H(`Failed to parse arguments for tool "${e.function.name}" (call ${e.id}): invalid JSON`)}return{toolName:e.function.name,parameters:n,executionId:e.id,ownerType:`tool`,ownerId:e.id,ownerPath:[...t.ownerPathBase,{type:`tool`,id:e.id}],metadata:t.metadataFactory?t.metadataFactory(e):void 0}})}async executeTools(e){return Xe(e,this,this.logger)}};function $e(e,t){return`Tool "${e}" is not registered, so the tool call was not executed. Available tools: ${t.length>0?t.join(`, `):`no registered tools are available`}.`}function et(e){return e?.ownerPath?.length?e.ownerPath.map(e=>({...e})):[]}function tt(e,t,n,r){if(!n||n.length===0)throw Error(`[EXECUTION] Missing rootId for execution owner context`);if(!r||r.length===0)throw Error(`[EXECUTION] Missing executionId for execution owner context`);let i=[...e.length?e:t];return n&&!i.some(e=>e.type===`agent`&&e.id===n)&&i.push({type:`agent`,id:n}),i.push({type:`execution`,id:r}),{ownerType:I,ownerId:r,ownerPath:i}}function nt(e,t,n,r,i,a){if(!i||i.length===0)throw Error(`[EXECUTION] Missing thinkingNodeId for thinking owner context`);let o=[...tt(e,t,n,r).ownerPath];return a&&(o.push({type:`thinking`,id:a}),o.push({type:`tool_result`,id:`tool_result_${a}`})),o.push({type:`thinking`,id:i}),{ownerType:I,ownerId:r,ownerPath:o}}function rt(e,t,n,r,i){if(!i||i.length===0)throw Error(`[EXECUTION] Missing toolCallId for tool owner context`);return{ownerType:K,ownerId:i,ownerPath:[...tt(e,t,n,r).ownerPath,{type:`tool`,id:i}]}}function it(e,t,n,r,i,a){let o=nt(e,t,n,r,i,a).ownerPath,s=`response_${i}`;return{ownerType:I,ownerId:r,ownerPath:[...o,{type:`response`,id:s}]}}var at=class{baseEventService;logger;ownerPathBase;toolEventServices;agentOwnerPathBase;constructor(e,t,n){this.baseEventService=e,this.logger=t,this.ownerPathBase=et(n),this.toolEventServices=new Map,this.agentOwnerPathBase=[]}prepareOwnerPathBases(e){this.toolEventServices.clear();let t=[...this.ownerPathBase,{type:`agent`,id:e}];this.agentOwnerPathBase=t}resetOwnerPathBases(){this.toolEventServices.clear(),this.agentOwnerPathBase=[]}ensureToolEventService(e,t){if(R(this.baseEventService))return this.baseEventService;if(!e)throw Error(`[EVENT-SERVICE] Missing ownerId for tool event context`);if(!t||t.length===0)throw Error(`[EVENT-SERVICE] Missing ownerPath for tool event context`);if(this.toolEventServices.has(e))return this.toolEventServices.get(e);let n=z(this.baseEventService,{ownerType:K,ownerId:e,ownerPath:t.map(e=>({...e}))});return this.toolEventServices.set(e,n),n}clearToolEventServices(){this.toolEventServices.clear()}getBaseEventService(){return this.baseEventService}buildExecutionOwnerContext(e,t){return tt(this.agentOwnerPathBase,this.ownerPathBase,e,t)}buildThinkingOwnerContext(e,t,n,r){return nt(this.agentOwnerPathBase,this.ownerPathBase,e,t,n,r)}buildToolOwnerContext(e,t,n){return rt(this.agentOwnerPathBase,this.ownerPathBase,e,t,n)}buildResponseOwnerContext(e,t,n,r){return it(this.agentOwnerPathBase,this.ownerPathBase,e,t,n,r)}emitExecution(e,t,n,r){this.emitWithContext(e,t,()=>this.buildExecutionOwnerContext(n,r),e=>{if(!e.ownerType||!e.ownerId)throw Error(`[EXECUTION] Missing owner context for execution event`);return z(this.baseEventService,{ownerType:e.ownerType,ownerId:e.ownerId,ownerPath:e.ownerPath})})}emitTool(e,t,n,r,i){this.emitWithContext(e,t,()=>this.buildToolOwnerContext(n,r,i),e=>this.ensureToolEventService(e.ownerId,e.ownerPath))}emitWithContext(e,t,n,r){if(R(this.baseEventService))return;let i=n(),a=r(i),o={timestamp:new Date,...t};a.emit(e,o,i)}emitExecutionStartEvent(e,t,n,r,i,a){Te(this,e,t,n,r,i,a)}emitUserMessageEvent(e,t,n){Ee(this,e,t,n)}emitAssistantMessageComplete(e,t,n,r,i,a){De(this,this.baseEventService,e,t,n,r,i,a)}emitToolResultsEvents(e,t,n,r,i,a,o,s){Oe(this,this.baseEventService,e,t,n,r,i,a,o,s)}};function ot(e){let t=st(e.metadata),n=q(e.usage);return t??n}function st(e){if(!e)return;let t=q({inputTokens:J(e,`inputTokens`),outputTokens:J(e,`outputTokens`),promptTokens:J(e,`promptTokens`),completionTokens:J(e,`completionTokens`),totalTokens:J(e,`totalTokens`)});if(t)return t;let n=e.usage;if(typeof n==`string`)return ct(n);if(ut(n))return q(n)}function ct(e){try{return q(JSON.parse(e))}catch{return}}function q(e){if(!e)return;let t=lt(e.inputTokens,e.promptTokens),n=lt(e.outputTokens,e.completionTokens);if(t===void 0||n===void 0)return;let r=lt(e.totalTokens);return{inputTokens:t,outputTokens:n,...r!==void 0&&{totalTokens:r}}}function J(e,t){let n=e[t];return typeof n==`number`&&Number.isFinite(n)?n:void 0}function lt(...e){return e.find(e=>typeof e==`number`&&Number.isFinite(e))}function ut(e){return typeof e==`object`&&!!e&&!Array.isArray(e)&&Object.values(e).every(e=>typeof e==`number`&&Number.isFinite(e))}const dt=4;function ft(e){return Math.ceil(JSON.stringify(e).length/4)}function pt(e,t={}){let n=ft(e),r=mt(e),i=r?.tokens,a=ht(t.usageFloorTokens);return{usedTokens:r?.index===e.length-1?Math.max(i??0,a??0):Math.max(n,i??0,a??0),serializedTokens:n,...i!==void 0&&{providerTokens:i},...a!==void 0&&{usageFloorTokens:a}}}function mt(e){for(let t=e.length-1;t>=0;t--){let n=ot(e[t]);if(n)return{tokens:n.totalTokens??n.inputTokens+n.outputTokens,index:t}}}function ht(e){if(!(e===void 0||!Number.isFinite(e)||e<=0))return Math.ceil(e)}const gt={"claude-opus-4-6":{name:`Claude Opus 4.6`,id:`claude-opus-4-6`,contextWindow:1e6,maxOutput:128e3},"claude-sonnet-4-6":{name:`Claude Sonnet 4.6`,id:`claude-sonnet-4-6`,contextWindow:1e6,maxOutput:64e3},"claude-haiku-4-5":{name:`Claude Haiku 4.5`,id:`claude-haiku-4-5`,contextWindow:2e5,maxOutput:64e3},"claude-haiku-4-5-20251001":{name:`Claude Haiku 4.5`,id:`claude-haiku-4-5-20251001`,contextWindow:2e5,maxOutput:64e3},"claude-sonnet-4-5":{name:`Claude Sonnet 4.5`,id:`claude-sonnet-4-5`,contextWindow:2e5,maxOutput:64e3},"claude-sonnet-4-5-20250929":{name:`Claude Sonnet 4.5`,id:`claude-sonnet-4-5-20250929`,contextWindow:2e5,maxOutput:64e3},"claude-opus-4-5":{name:`Claude Opus 4.5`,id:`claude-opus-4-5`,contextWindow:2e5,maxOutput:64e3},"claude-opus-4-5-20251101":{name:`Claude Opus 4.5`,id:`claude-opus-4-5-20251101`,contextWindow:2e5,maxOutput:64e3}},_t=2e5;function vt(e){return gt[e]?.contextWindow??2e5}const yt=16384;function bt(e){return gt[e]?.maxOutput??16384}function xt(e){return gt[e]?.name??e}function St(e){if(e>=1e6){let t=e/1e6;return Number.isInteger(t)?`${t}M`:`${parseFloat(t.toFixed(1))}M`}if(e<=0)return`0K`;if(e<1e3)return`<1K`;let t=e/1e3;return Number.isInteger(t)?`${t}K`:`${parseFloat(t.toFixed(1))}K`}const Ct=.95;function wt(e,t,n){let r=pt(e,{usageFloorTokens:n}),i=vt(t),a=i*Ct,o=i>0?Math.round(r.usedTokens/i*1e4)/100:100;return{shouldBlock:r.usedTokens>a,estimatedTokens:r.usedTokens,contextLimit:i,thresholdTokens:a,thresholdPercentage:Ct*100,usedPercentage:o,serializedTokens:r.serializedTokens,...r.providerTokens!==void 0&&{providerTokens:r.providerTokens},...r.usageFloorTokens!==void 0&&{usageFloorTokens:r.usageFloorTokens}}}function Tt(e,t,n,r,i,a){let o=wt(e,t.defaultModel.model,n.cumulativeInputTokens);return o.shouldBlock?(i.warn(`[ROUND] Context hard-capacity prevention before provider call`,{estimatedTokens:o.estimatedTokens,contextLimit:o.contextLimit,thresholdTokens:o.thresholdTokens,thresholdPercentage:o.thresholdPercentage,serializedTokens:o.serializedTokens,providerTokens:o.providerTokens??0,usageFloorTokens:o.usageFloorTokens??0,round:a}),r.addAssistantMessage(`Context window is near capacity. Cannot process further in this round. Estimated ${o.estimatedTokens.toLocaleString()} / ${o.contextLimit.toLocaleString()} tokens (${Math.round(o.usedPercentage)}%) exceeds the hard-block threshold ${Math.round(o.thresholdPercentage)}%. Run /compact and retry.`,[],{round:a,contextOverflow:!0,estimatedTokens:o.estimatedTokens,contextLimit:o.contextLimit,thresholdTokens:o.thresholdTokens,thresholdPercentage:o.thresholdPercentage,serializedTokens:o.serializedTokens,providerTokens:o.providerTokens??0,usageFloorTokens:o.usageFloorTokens??0,usedPercentage:o.usedPercentage}),!0):!1}function Et(e,t){let n=Array.isArray(t.lastTrackedAssistantMessage?.toolCalls)&&t.lastTrackedAssistantMessage.toolCalls.length>0;return{thinkingNodeId:`thinking_${e}_round${t.runningAssistantCount+1}`,previousThinkingNodeId:n?`thinking_${e}_round${t.runningAssistantCount}`:void 0}}async function Dt(t,n,r,i,a){if(!n.defaultModel?.model)throw Error(`Model is required in defaultModel configuration. Please specify a model.`);if(typeof n.defaultModel.model!=`string`||n.defaultModel.model.trim()===``)throw Error(`Model must be a non-empty string in defaultModel configuration.`);let o={model:n.defaultModel.model,...n.defaultModel.maxTokens!==void 0&&{maxTokens:n.defaultModel.maxTokens},...n.defaultModel.temperature!==void 0&&{temperature:n.defaultModel.temperature},...r.availableTools.length>0&&{tools:r.availableTools},...n.responseFormat?.type?{responseFormat:{type:n.responseFormat.type}}:{},...a},s=r.provider.chat.bind(r.provider);if(i){let r=i.lookup(t,n.defaultModel.model,n.defaultModel.provider,{temperature:n.defaultModel.temperature,maxTokens:n.defaultModel.maxTokens});if(r)return{role:`assistant`,content:r,timestamp:new Date,id:e(),state:`complete`};let a=await Ot(s,t,o,n.timeout);return typeof a.content==`string`&&i.store(t,n.defaultModel.model,n.defaultModel.provider,a.content,{temperature:n.defaultModel.temperature,maxTokens:n.defaultModel.maxTokens}),a}return Ot(s,t,o,n.timeout)}async function Ot(e,t,n,r){let i=kt(r),a=n.signal;if(i===void 0&&a===void 0)return e(t,n);if(a?.aborted)throw At();let o=new AbortController,s,c=!1,l,u=()=>{s!==void 0&&(clearTimeout(s),s=void 0)},d=e=>{c||(c=!0,l?.(e),o.abort(e))},f=()=>{i===void 0||c||(u(),s=setTimeout(()=>{d(Error(`Provider call idle timeout after ${i}ms`))},i))},p=()=>{d(At())};a?.addEventListener(`abort`,p,{once:!0});let m=n.onTextDelta,h={...n,signal:o.signal,...m===void 0?{}:{onTextDelta:e=>{f(),m(e)}}};f();try{return await Promise.race([e(t,h),new Promise((e,t)=>{l=t})])}finally{c=!0,u(),a?.removeEventListener(`abort`,p)}}function kt(e){if(!(e===void 0||!Number.isFinite(e)||e<=0))return e}function At(){let e=Error(`aborted`);return e.name=`AbortError`,e}function jt(e,t,n,r,i){let a=e.role===`assistant`?e.toolCalls:void 0,o=Array.isArray(a)&&a.length>0;if(typeof e.content!=`string`&&!o)throw Error(`[EXECUTION] Provider response must have content or tool calls`);if(a&&!Array.isArray(a))throw Error(`[EXECUTION] assistant toolCalls must be an array`);let s=e.content??``;if(i.debug(`[ROUND-${r}] Provider response completed`,{executionId:t,conversationId:n,round:r,responseLength:s.length,hasToolCalls:Array.isArray(a)&&a.length>0,toolCallsCount:Array.isArray(a)?a.length:0}),e.role!==`assistant`)throw Error(`Unexpected response role: ${e.role}`);let c=e,l=c.toolCalls??[];if(!Array.isArray(l))throw Error(`[EXECUTION] assistantResponse.toolCalls must be an array`);return{assistantResponse:c,assistantToolCalls:l}}function Mt(e,t,n,r){let i=0,a=0;return{wrappedOnTextDelta:a=>{e.onExecutionEvent?.(`provider_stream_raw_delta`,{executionId:n,conversationId:e.conversationId,round:r,sequence:i,delta:a}),i++,t.appendStreaming(a),e.onTextDelta?.(a)},wrappedOnProviderNativeRawPayload:t=>{let i=t.sequence??a;a=Math.max(a,i+1),e.onExecutionEvent?.(`provider_native_raw_payload`,{executionId:n,conversationId:e.conversationId,round:r,...t,sequence:i})}}}async function Nt(e,t,n,r,i,a,o,s,c,l,u){try{i.onExecutionEvent?.(`provider_request`,{executionId:s,conversationId:i.conversationId,round:o,provider:n.currentInfo.provider,model:t.defaultModel.model,messages:e,tools:n.availableTools});let a=await Dt(e,t,n,r,{signal:i.signal,onTextDelta:l,onProviderNativeRawPayload:u});return i.onExecutionEvent?.(`provider_response_raw`,{executionId:s,conversationId:i.conversationId,round:o,response:a,responseKind:`provider-normalized-message`}),i.onExecutionEvent?.(`provider_response_normalized`,{executionId:s,conversationId:i.conversationId,round:o,response:a,toolCallsCount:a.role===`assistant`&&Array.isArray(a.toolCalls)?a.toolCalls.length:0}),a}catch(e){if(e instanceof Error&&(e.name===`AbortError`||e.message.includes(`aborted`)||e.message.includes(`abort`)))throw a.commitAssistant(`interrupted`,{round:o}),e;a.discardPending();let t=e instanceof Error?e.message:String(e);return c.error(`[ROUND] Provider call failed`,{error:t,round:o}),a.addAssistantMessage(`Request failed: ${t}`,[],{round:o,providerError:!0}),null}}function Pt(e){return!e.success&&e.metadata?.errorCode===`unknown_tool`}function Ft(e,t,n,r,i,a){let o=!1,s=0,c=0;for(let l of e){if(!l.id)throw Error(`Tool call missing ID: ${JSON.stringify(l)}`);let e=l.function?.name;if(!e||e.length===0)throw Error(`[EXECUTION] Tool call "${l.id}" missing function name`);if(o){i.warn(`[ROUND] Skipping tool result due to context overflow`,{toolCallId:l.id,toolName:e,round:r}),n.addToolMessageWithId(`Error: Context window near capacity. Tool execution result skipped. Respond with available results and re-request skipped tools if needed.`,l.id,e,{round:r,success:!1,error:`context_overflow`,toolName:e}),c++;continue}let u=t.results.find(e=>e.executionId===l.id),d=t.errors.find(e=>fe(e)&&e.executionId===l.id),f,p={round:r};if(u&&u.success){if(u.result===void 0)throw Error(`[EXECUTION] Tool result missing result payload`);f=typeof u.result==`string`?u.result:JSON.stringify(u.result),p.success=!0,u.toolName&&(p.toolName=u.toolName)}else if(u&&!u.success){if(!u.error||u.error.length===0)throw Error(`[EXECUTION] Tool result missing error message`);f=`Error: ${u.error}`,p.success=!1,p.error=u.error,u.toolName&&(p.toolName=u.toolName),u.metadata?.errorCode===`unknown_tool`&&(p.errorCode=Ze,typeof u.metadata.requestedTool==`string`&&(p.requestedTool=u.metadata.requestedTool),Array.isArray(u.metadata.availableTools)&&(p.availableTools=u.metadata.availableTools.filter(e=>typeof e==`string`)))}else if(d){let e=d,t=e.error?.message?e.error.message:e.message?e.message:``;if(!t||t.length===0)throw Error(`[EXECUTION] Tool execution error missing message`);f=`Error: ${t}`,p.success=!1,p.error=t,e.toolName&&(p.toolName=e.toolName)}else throw Error(`No execution result found for tool call ID: ${l.id}`);if(i.debug(`Adding tool result to conversation`,{toolCallId:l.id,toolName:e,content:f.substring(0,100),round:r,currentHistoryLength:n.getMessages().length}),n.addToolMessageWithId(f,l.id,e,p),a){let e=pt(n.getMessages(),{usageFloorTokens:a.cumulativeInputTokens}).usedTokens;e>a.contextLimit*.8&&(i.warn(`[ROUND] Context budget exceeded after tool result — skipping remaining tools`,{estimatedTokens:e,contextLimit:a.contextLimit,toolCallId:l.id,round:r}),o=!0)}s++,i.debug(`Tool result added to history`,{toolCallId:l.id,newHistoryLength:n.getMessages().length,round:r})}return{contextOverflowed:o,addedCount:s,skippedCount:c,unknownToolFailureCount:0,unknownToolNames:[]}}function It(e,t,n){for(let r of e){let e=r.function?.name??`unknown`,i=`${e}::${typeof r.function?.arguments==`string`?r.function.arguments:JSON.stringify(r.function?.arguments??{})}`,a=(t.sameToolInputCounts.get(i)??0)+1;if(t.sameToolInputCounts.set(i,a),a>n)throw Error(`[EXECUTION] Tool "${e}" called with identical input ${a} times — aborting to prevent infinite loop`)}}async function Lt(e,t,n,r,i,a,o,s,c,l,u,d,f){let{toolExecutionService:p,logger:m,eventEmitter:h}=c,g=f??l?.maxSameToolInputs;g!==void 0&&It(e,s,g),m.debug(`Tool calls detected, executing tools`,{toolCallCount:e.length,round:i,toolCalls:e.map(e=>({id:e.id,name:e.function?.name}))});let _=h.buildThinkingOwnerContext(n,r,a,o).ownerPath,v=e.length,y=`${a}`,b=p.createExecutionRequestsWithContext(e,{ownerPathBase:_,metadataFactory:e=>({conversationId:n,round:i,directParentId:a,batchId:y,expectedCount:v,toolCallId:e.id})}).map(e=>{if(!e.ownerId)throw Error(`[EXECUTION] Tool request missing ownerId`);return{...e,eventService:h.ensureToolEventService(e.ownerId,e.ownerPath),baseEventService:h.getBaseEventService()}}),x={requests:b,mode:`parallel`,maxConcurrency:5,continueOnError:!0,signal:u};d?.(`tool_batch_started`,{executionId:r,conversationId:n,round:i,batchId:y,mode:x.mode,maxConcurrency:x.maxConcurrency,requestCount:b.length,tools:b.map(e=>e.toolName)}),b.forEach((e,t)=>{d?.(`tool_execution_request`,{executionId:r,conversationId:n,round:i,batchId:y,index:t,toolName:e.toolName,toolCallId:e.executionId,parameters:e.parameters,ownerPath:e.ownerPath})});let S=await p.executeTools(x),C=S.results.filter(Pt).map(e=>e.toolName).filter(e=>typeof e==`string`&&e.length>0);S.results.forEach((e,t)=>{d?.(`tool_execution_result`,{executionId:r,conversationId:n,round:i,batchId:y,index:t,toolName:e.toolName,toolCallId:e.executionId,success:e.success,result:e.result,error:e.error,metadata:e.metadata})}),s.toolsExecuted.push(...S.results.filter(e=>!Pt(e)).map(e=>{if(!e.toolName||e.toolName.length===0)throw Error(`[EXECUTION] Tool result missing toolName`);return e.toolName}));let w=vt(l?.defaultModel?.model??``),T=t.getMessages().length,E=Ft(e,S,t,i,m,{contextLimit:w,cumulativeInputTokens:s.cumulativeInputTokens});return t.getMessages().slice(T).forEach((e,t)=>{d?.(`tool_message_committed`,{executionId:r,conversationId:n,round:i,batchId:y,index:t,message:e}),d?.(`history_mutation`,{executionId:r,conversationId:n,round:i,batchId:y,mutation:`append_message`,index:T+t,message:e})}),h.emitToolResultsEvents(e,S,s.toolsExecuted,n,r,i,a,o),h.clearToolEventServices(),{...E,unknownToolFailureCount:C.length,unknownToolNames:C}}function Rt(e){let t=ot(e);if(!t)return;let n=t.totalTokens??t.inputTokens+t.outputTokens;return{inputTokens:t.inputTokens,outputTokens:t.outputTokens,usage:{totalTokens:n,inputTokens:t.inputTokens,outputTokens:t.outputTokens}}}const zt={beforeRun:async(e,t)=>{e.beforeRun&&t.input&&await e.beforeRun(t.input,t.metadata)},afterRun:async(e,t)=>{e.afterRun&&t.input&&t.response&&await e.afterRun(t.input,t.response,t.metadata)},beforeProviderCall:async(e,t)=>{e.beforeProviderCall&&t.messages&&await e.beforeProviderCall(t.messages)},afterProviderCall:async(e,t)=>{e.afterProviderCall&&t.messages&&t.responseMessage&&await e.afterProviderCall(t.messages,t.responseMessage)},onError:async(e,t)=>{if(e.onError&&t.error){let n={action:`${I}.${F.ERROR}`,metadata:{}},r=t.executionContext?.executionId;typeof r==`string`&&r.length>0&&(n.executionId=r);let i=t.executionContext?.sessionId;typeof i==`string`&&i.length>0&&(n.sessionId=i);let a=t.executionContext?.userId;typeof a==`string`&&a.length>0&&(n.userId=a),await e.onError(t.error,n)}}};async function Y(e,t,n,r){let i=zt[t];if(i)for(let a of e)try{await i(a,n)}catch(e){r.warn(`Plugin hook failed`,{pluginName:a.name,hookName:t,error:e instanceof Error?e.message:String(e)})}}async function Bt(e,t,n,r,i,a,o,s,c){let{plugins:l,logger:u,eventEmitter:d,cacheService:f}=c,p=e.currentRound;u.debug(`[ROUND-${p}] Starting execution round ${p}`,{executionId:i,conversationId:a.conversationId,round:p,maxRounds:t});let m=n.getMessages(),{thinkingNodeId:h,previousThinkingNodeId:g}=Et(r,e);if(await Y(l,`beforeProviderCall`,{messages:m},u),u.debug(`Sending messages to AI provider`,{round:p,messageCount:m.length,lastFewMessages:m.slice(-5).map(e=>({role:e.role,content:e.content?.substring(0,50),hasToolCalls:`toolCalls`in e?!!e.toolCalls?.length:!1,toolCallId:`toolCallId`in e?e.toolCallId:void 0}))}),d.emitWithContext(F.ASSISTANT_MESSAGE_START,{parameters:{round:p,messageCount:m.length},metadata:{round:p,thinkingNodeId:h}},()=>d.buildThinkingOwnerContext(r,i,h,g),e=>{if(!e.ownerType||!e.ownerId)throw Error(`[EXECUTION] Missing owner context for thinking event`);return z(d.getBaseEventService(),{ownerType:e.ownerType,ownerId:e.ownerId,ownerPath:e.ownerPath})}),Tt(m,o,e,n,u,p))return!0;p>1&&a.onTextDelta?.(`
5
3
 
6
- `);}let fe=await gr(P,n,a,c),{assistantResponse:V,assistantToolCalls:Q}=mr(fe,o,s.conversationId,p,l);await k(u,"afterProviderCall",{messages:P,responseMessage:fe},l);let H=typeof V.metadata?.inputTokens=="number"?V.metadata.inputTokens:0,w=typeof V.metadata?.outputTokens=="number"?V.metadata.outputTokens:0;return t.addAssistantMessage(V.content??"",Q,{round:p,...H>0&&{inputTokens:H},...w>0&&{outputTokens:w},...(H>0||w>0)&&{usage:{totalTokens:H+w,inputTokens:H,outputTokens:w}}}),i.runningAssistantCount++,i.lastTrackedAssistantMessage=V,Q.length===0?(l.debug(`[AGENT-FLOW-CONTROL] Round ${p} completed - no tool calls, execution finished for agent ${s.conversationId}`),g.emitAssistantMessageComplete(V,o,p,r,f,S),true):(await pr(Q,t,r,o,p,f,S,i,d),l.debug(`Round ${p} completed - continuing to next round for agent ${s.conversationId}`),false)}var Se=class{toolExecutionService;aiProviders;tools;conversationHistory;plugins=[];logger;eventEmitter;cacheService;constructor(e,t,r,o,s,n){if(this.toolExecutionService=new ye(t),this.aiProviders=e,this.tools=t,this.conversationHistory=r,this.plugins=[],this.logger=C("ExecutionService"),!o)throw new Error("[EXECUTION] EventService is required");this.eventEmitter=new Re(o,this.logger,s),this.cacheService=n;}registerPlugin(e){let t=e.priority??0,r=this.plugins.findIndex(o=>(o.priority??0)<t);r===-1?this.plugins.push(e):this.plugins.splice(r,0,e),this.logger.debug("Plugin registered",{pluginName:e.name,priority:t,hasBeforeRun:typeof e.beforeRun,hasAfterRun:typeof e.afterRun,hasBeforeProviderCall:typeof e.beforeProviderCall,hasAfterProviderCall:typeof e.afterProviderCall});}removePlugin(e){let t=this.plugins.findIndex(r=>r.name===e);return t!==-1?(this.plugins.splice(t,1),this.logger.debug("Plugin removed",{pluginName:e}),true):false}getPlugin(e){return this.plugins.find(t=>t.name===e)}getPlugins(){return [...this.plugins]}async execute(e,t,r,o){let s=this.generateExecutionId(),n=new Date,a=this.requireConversationId(o,"execute"),d={messages:t,config:r,startTime:n,executionId:s,conversationId:a,...o?.sessionId&&{sessionId:o.sessionId},...o?.userId&&{userId:o.userId},...o?.metadata&&{metadata:o.metadata}};this.eventEmitter.prepareOwnerPathBases(a),this.logger.debug("Starting execution pipeline",{executionId:s,conversationId:a,messageCount:t.length,hasContext:!!o});let u=this.resolveProviderAndTools(r);this.eventEmitter.emitExecutionStartEvent(e,r,t,u,a,s);try{let l=this.initializeConversationSession(a,t,r,s);l.addUserMessage(e,{executionId:s}),this.eventEmitter.emitUserMessageEvent(e,a,s),await k(this.plugins,"beforeRun",{input:e,...o?.metadata?{metadata:o.metadata}:{}},this.logger),this.validateProvider(u);let g={toolsExecuted:[],currentRound:0,runningAssistantCount:0,lastTrackedAssistantMessage:void 0},c=l.getMessages();for(let S of c)S.role==="assistant"&&(g.runningAssistantCount++,g.lastTrackedAssistantMessage=S);let p=10,v={toolExecutionService:this.toolExecutionService,plugins:this.plugins,logger:this.logger,eventEmitter:this.eventEmitter,cacheService:this.cacheService};for(;g.currentRound<p&&(g.currentRound++,!await Mt(g,p,l,a,s,d,r,u,v)););g.currentRound>=p&&this.logger.warn("Maximum execution rounds reached",{maxRounds:p,conversationId:a});let f=this.buildFinalResult(l,s,n,g.toolsExecuted);return await k(this.plugins,"afterRun",{input:e,response:f.response,metadata:o?.metadata},this.logger),this.logger.debug("Execution pipeline completed successfully",{executionId:s,conversationId:a,duration:f.duration,tokensUsed:f.tokensUsed,toolsExecuted:f.toolsExecuted.length,rounds:g.currentRound}),this.eventEmitter.emitExecution(x.COMPLETE,{result:{success:!0,data:f.response.substring(0,100)+"..."},metadata:{method:"execute",success:!0,duration:f.duration,tokensUsed:f.tokensUsed,toolsExecuted:f.toolsExecuted}},a,s),f}catch(l){throw await this.handleExecutionError(l,d,n,a,s),l}finally{this.eventEmitter.resetOwnerPathBases();}}async*executeStream(e,t,r,o){yield*xt(e,t,r,o,{aiProviders:this.aiProviders,tools:this.tools,conversationHistory:this.conversationHistory,toolExecutionService:this.toolExecutionService,plugins:this.plugins,logger:this.logger,eventEmitter:this.eventEmitter,generateExecutionId:()=>this.generateExecutionId()});}async getStats(){return {pluginCount:this.plugins.length,pluginNames:this.plugins.map(e=>e.name),historyStats:this.conversationHistory.getStats()}}clearPlugins(){this.plugins=[],this.logger.debug("All plugins cleared");}resolveProviderAndTools(e){let t=this.aiProviders.getCurrentProvider(),r=t?this.aiProviders.getProvider(t.provider):null;if(!t||!t.provider||!r)throw new Error("[EXECUTION] Provider is required");let o=this.tools.getTools(),s={providerName:t.provider,model:e.defaultModel.model,temperature:e.defaultModel.temperature,maxTokens:e.defaultModel.maxTokens},n=o.map(a=>{let u=a.parameters?.properties;if(!a.description||a.description.length===0)throw new Error(`[EXECUTION] Tool "${a.name}" is missing description`);return {name:a.name,description:a.description,parameters:u&&typeof u=="object"?Object.keys(u):[]}});return {provider:r,currentInfo:t,aiProviderInfo:s,toolsInfo:n,availableTools:o}}validateProvider(e){if(!e.currentInfo)throw new Error("No AI provider configured");if(!e.provider)throw new Error(`AI provider '${e.currentInfo.provider}' not found`);if(typeof e.provider.chat!="function")throw new Error("Provider must have chat method to support execution")}initializeConversationSession(e,t,r,o){let s=this.conversationHistory.getConversationSession(e);if(s.getMessageCount()===0&&t.length>0){for(let n of t)if(n.role==="user")s.addUserMessage(n.content,n.metadata,n.parts);else if(n.role==="assistant")s.addAssistantMessage(n.content,n.toolCalls,n.metadata,n.parts);else if(n.role==="system")s.addSystemMessage(n.content,n.metadata,n.parts);else if(n.role==="tool"){let a=n.metadata?.toolName;if(typeof a!="string"||a.length===0)throw new Error("[EXECUTION] Tool message missing toolName metadata");s.addToolMessageWithId(n.content,n.toolCallId,a,n.metadata,n.parts);}}return r.systemMessage&&s.addSystemMessage(r.systemMessage,{executionId:o}),s}buildFinalResult(e,t,r,o){let s=e.getMessages(),n=s.filter(l=>l.role==="assistant").pop(),a=!!n&&typeof n.content=="string"&&n.content.length>0,d=a?n.content:"(execution interrupted: no final assistant response \u2014 possible context overflow or max turn limit)",u=Date.now()-r.getTime();return {response:d,messages:s.map(l=>{if(typeof l.content!="string")throw new Error("[EXECUTION] Message content is required");return {role:l.role,content:l.content,timestamp:l.timestamp,metadata:l.metadata,...l.role==="assistant"&&"toolCalls"in l?{toolCalls:l.toolCalls}:{},...l.role==="tool"&&"toolCallId"in l?{toolCallId:l.toolCallId}:{}}}),executionId:t,duration:u,tokensUsed:s.filter(l=>l.metadata?.usage).reduce((l,g)=>{let c=g.metadata?.usage;if(c&&typeof c=="object"&&"totalTokens"in c){let p=Number(c.totalTokens);if(Number.isNaN(p))throw new Error("[EXECUTION] totalTokens must be a number");return l+p}return l},0),toolsExecuted:o,success:a}}async handleExecutionError(e,t,r,o,s){let n=Date.now()-r.getTime(),a=e instanceof Error?e:new Error(String(e));await k(this.plugins,"onError",{error:a,executionContext:this.convertExecutionContextToPluginFormat(t)},this.logger),this.logger.error("Execution pipeline failed",{executionId:s,conversationId:o,duration:n,error:e instanceof Error?e.message:String(e)}),this.eventEmitter.emitExecution(x.ERROR,{error:e instanceof Error?e.message:String(e),metadata:{method:"execute",success:false,duration:n}},o,s);}generateExecutionId(){return `exec_${Date.now()}_${Math.random().toString(36).substr(2,9)}`}requireConversationId(e,t){if(!e?.conversationId||e.conversationId.length===0)throw new Error(`[EXECUTION] conversationId is required for ${t}`);return e.conversationId}convertExecutionContextToPluginFormat(e){let r={conversationId:this.requireConversationId(e,"plugin-context"),executionId:e.executionId,startTime:e.startTime.toISOString(),messageCount:e.messages.length};return e.sessionId&&(r.sessionId=e.sessionId),e.userId&&(r.userId=e.userId),r}};var z=(i,e)=>`${i}.${e}`,Je={START:z(U,x.START),COMPLETE:z(U,x.COMPLETE),ERROR:z(U,x.ERROR)},hr={CALL_START:z(X,O.CALL_START),CALL_COMPLETE:z(X,O.CALL_COMPLETE),CALL_ERROR:z(X,O.CALL_ERROR)},we={EXECUTION_START:z(B,b.EXECUTION_START),EXECUTION_COMPLETE:z(B,b.EXECUTION_COMPLETE),EXECUTION_ERROR:z(B,b.EXECUTION_ERROR),CREATED:z(B,b.CREATED)},E={EXECUTION_START:Je.START,EXECUTION_COMPLETE:Je.COMPLETE,EXECUTION_ERROR:Je.ERROR,TOOL_BEFORE_EXECUTE:"tool.beforeExecute",TOOL_AFTER_EXECUTE:"tool.afterExecute",TOOL_SUCCESS:"tool.success",TOOL_ERROR:hr.CALL_ERROR,CONVERSATION_START:"conversation.start",CONVERSATION_COMPLETE:"conversation.complete",CONVERSATION_ERROR:"conversation.error",AGENT_EXECUTION_START:we.EXECUTION_START,AGENT_EXECUTION_COMPLETE:we.EXECUTION_COMPLETE,AGENT_EXECUTION_ERROR:we.EXECUTION_ERROR,AGENT_CREATED:we.CREATED,AGENT_DESTROYED:"agent.destroyed",PLUGIN_LOADED:"plugin.loaded",PLUGIN_UNLOADED:"plugin.unloaded",PLUGIN_ERROR:"plugin.error",ERROR_OCCURRED:"error.occurred",WARNING_OCCURRED:"warning.occurred",MODULE_INITIALIZE_START:"module.initialize.start",MODULE_INITIALIZE_COMPLETE:"module.initialize.complete",MODULE_INITIALIZE_ERROR:"module.initialize.error",MODULE_EXECUTION_START:"module.execution.start",MODULE_EXECUTION_COMPLETE:"module.execution.complete",MODULE_EXECUTION_ERROR:"module.execution.error",MODULE_DISPOSE_START:"module.dispose.start",MODULE_DISPOSE_COMPLETE:"module.dispose.complete",MODULE_DISPOSE_ERROR:"module.dispose.error",MODULE_REGISTERED:"module.registered",MODULE_UNREGISTERED:"module.unregistered",EXECUTION_HIERARCHY:"execution.hierarchy",EXECUTION_REALTIME:"execution.realtime",TOOL_REALTIME:"tool.realtime",CUSTOM:"custom"};var Ke=(l=>(l.MONITORING="monitoring",l.LOGGING="logging",l.STORAGE="storage",l.NOTIFICATION="notification",l.SECURITY="security",l.PERFORMANCE="performance",l.ERROR_HANDLING="error_handling",l.LIMITS="limits",l.EVENT_PROCESSING="event_processing",l.CUSTOM="custom",l))(Ke||{}),Ir=1e3,Tr=800,yr=500,xr=200,Mr=100,ie=(s=>(s[s.CRITICAL=Ir]="CRITICAL",s[s.HIGH=Tr]="HIGH",s[s.NORMAL=yr]="NORMAL",s[s.LOW=xr]="LOW",s[s.MINIMAL=Mr]="MINIMAL",s))(ie||{});var Ae=class{enabled=true;category="custom";priority=ie.NORMAL;options;eventEmitter;subscribedEvents=[];eventHandlers=new Map;pluginLogger=C("AbstractPlugin");stats={calls:0,errors:0,moduleEventsReceived:0,lastActivity:void 0};async initialize(e){this.options=e,e&&"enabled"in e&&typeof e.enabled=="boolean"?this.enabled=e.enabled:this.enabled=true,e?.category&&(this.category=e.category),e?.priority!==void 0&&(this.priority=(typeof e.priority=="number",e.priority));}async subscribeToModuleEvents(e){if(this.eventEmitter=e,!this.options)return;let t=[];this.options.subscribeToAllModuleEvents&&t.push(E.MODULE_INITIALIZE_START,E.MODULE_INITIALIZE_COMPLETE,E.MODULE_INITIALIZE_ERROR,E.MODULE_EXECUTION_START,E.MODULE_EXECUTION_COMPLETE,E.MODULE_EXECUTION_ERROR,E.MODULE_DISPOSE_START,E.MODULE_DISPOSE_COMPLETE,E.MODULE_DISPOSE_ERROR),this.options.moduleEvents&&t.push(...this.options.moduleEvents);for(let r of t){let o=this.eventEmitter.on(r,async n=>{try{this.stats.moduleEventsReceived++,this.stats.lastActivity=new Date,await this.onModuleEvent?.(r,n);}catch(a){this.stats.errors++;let d=a instanceof Error?a:new Error(String(a));this.pluginLogger.error(`Plugin "${this.name}" failed to handle module event "${String(r)}"`,{plugin:this.name,eventType:String(r),error:d.message});}}),s=this.eventHandlers.get(r);s?s.push(o):this.eventHandlers.set(r,[o]),this.subscribedEvents.push(r);}}async unsubscribeFromModuleEvents(e){for(let[t,r]of this.eventHandlers.entries())for(let o of r)e.off(t,o);this.eventHandlers.clear(),this.subscribedEvents=[],this.eventEmitter=void 0;}async dispose(){this.eventEmitter&&await this.unsubscribeFromModuleEvents(this.eventEmitter);}enable(){this.enabled=true;}disable(){this.enabled=false;}isEnabled(){return this.enabled}getConfig(){return {}}updateConfig(e){}getData(){return {name:this.name,version:this.version,enabled:this.enabled,category:this.category,priority:this.priority,subscribedEvents:[...this.subscribedEvents],metadata:{moduleEventsReceived:this.stats.moduleEventsReceived,totalCalls:this.stats.calls,totalErrors:this.stats.errors}}}getStatus(){return {name:this.name,version:this.version,enabled:this.enabled,initialized:true,category:this.category,priority:this.priority,subscribedEventsCount:this.subscribedEvents.length,hasEventEmitter:!!this.eventEmitter}}getStats(){return {enabled:this.enabled,calls:this.stats.calls,errors:this.stats.errors,moduleEventsReceived:this.stats.moduleEventsReceived,...this.stats.lastActivity&&{lastActivity:this.stats.lastActivity}}}updateCallStats(){this.stats.calls++,this.stats.lastActivity=new Date;}updateErrorStats(){this.stats.errors++,this.stats.lastActivity=new Date;}};var se=class{logger;constructor(e=_){this.logger=e;}supportsTools(){return false}validateConfig(){return true}async dispose(){}async withRetry(e,t=3,r=1e3){let o;for(let s=0;s<=t;s++)try{return await e()}catch(n){o=n instanceof Error?n:new Error(String(n)),s<t&&(this.logger.warn?.(`[${this.name}] Attempt ${s+1} failed, retrying in ${r}ms`,{error:o.message,attempt:s+1,maxRetries:t}),await this.delay(r));}throw o}withTimeout(e,t){let r;return Promise.race([e.then(o=>(clearTimeout(r),o)),new Promise((o,s)=>{r=setTimeout(()=>s(new Error(`Operation timed out after ${t}ms`)),t);})])}delay(e){return new Promise(t=>setTimeout(t,e))}logDebug(e,t){this.logger.debug?.(`[${this.name}] ${e}`,t);}logError(e,t,r){this.logger.error?.(`[${this.name}] ${e}`,{error:t.message,stack:t.stack,...r});}validateRequest(e){if(!e.messages||e.messages.length===0)throw new Error("Request must include at least one message");if(!e.provider)throw new Error("Request must specify a provider");if(!e.model)throw new Error("Request must specify a model")}validateResponse(e){if(!e.role)throw new Error("Response must have a role");let t=e.role==="assistant"&&"toolCalls"in e&&Array.isArray(e.toolCalls)&&e.toolCalls.length>0;if(!e.content&&!t)throw new Error("Response must have content or tool calls")}};var Oe=class{logger;eventService;constructor(e={}){this.eventService=e.eventService,this.logger=e.logger??_;}setEventService(e){this.eventService=e;}getEventService(){return this.eventService}emitEvent(e,t){this.eventService&&this.eventService.emit(e,t);}async execute(e,t){return await this.executeImpl(e,t)}validate(e){return (this.schema.parameters.required||[]).every(r=>r in e)}validateParameters(e){let t=this.schema.parameters.required||[],r=[],o=e;for(let s of t)s in o||r.push(`Missing required parameter: ${s}`);return {isValid:r.length===0,errors:r}}getDescription(){return this.schema.description}getName(){return this.schema.name}};var bt=class{static toProviderFormat(e,t){switch(t.toLowerCase()){case "openai":return this.toOpenAIFormat(e);case "anthropic":return this.toAnthropicFormat(e);case "google":return this.toGoogleFormat(e);default:return this.toUniversalFormat(e)}}static toOpenAIFormat(e){return e.map(t=>{let r={role:t.role,content:t.content};return t.role==="assistant"&&"toolCalls"in t&&t.toolCalls&&(r.tool_calls=t.toolCalls.map(o=>({id:o.id,type:o.type,function:o.function}))),t.role==="tool"&&"toolCallId"in t&&(r.tool_call_id=t.toolCallId,r.name=t.name),r})}static toAnthropicFormat(e){return e.filter(t=>t.role!=="system").map(t=>({role:t.role==="assistant"?"assistant":"user",content:t.content||""}))}static toGoogleFormat(e){return e.map(t=>({role:t.role==="assistant"?"model":"user",parts:[{text:t.content||""}]}))}static toUniversalFormat(e){return e}static extractSystemMessage(e){return e.find(r=>r.role==="system")?.content}static filterNonSystemMessages(e){return e.filter(t=>t.role!=="system")}};var G=class{static validateAgentConfig(e){let t=[],r=[];return e.name||t.push("name is required"),(!e.aiProviders||e.aiProviders.length===0)&&t.push("aiProviders array is required and must have at least one provider"),e.defaultModel?(e.defaultModel.provider||t.push("defaultModel.provider is required"),e.defaultModel.model||t.push("defaultModel.model is required")):t.push("defaultModel is required"),e.aiProviders&&e.defaultModel?.provider&&(e.aiProviders.map(s=>s.name).includes(e.defaultModel.provider)||t.push(`defaultModel.provider "${e.defaultModel.provider}" is not found in aiProviders list`)),e.defaultModel?.temperature!==void 0&&(typeof e.defaultModel.temperature!="number"||e.defaultModel.temperature<0||e.defaultModel.temperature>2)&&t.push("defaultModel.temperature must be a number between 0 and 2"),e.defaultModel?.maxTokens!==void 0&&(typeof e.defaultModel.maxTokens!="number"||e.defaultModel.maxTokens<=0)&&t.push("defaultModel.maxTokens must be a positive number"),e.systemMessage&&e.systemMessage.length>1e3&&r.push("systemMessage is quite long, consider keeping it concise for better performance"),e.tools&&e.tools.length>20&&r.push("Large number of tools may impact performance, consider grouping related tools"),{isValid:t.length===0,errors:t,warnings:r}}static validateUserInput(e){let t=[],r=[];return !e||typeof e!="string"?t.push("Input must be a non-empty string"):(e.trim().length===0&&t.push("Input cannot be only whitespace"),e.length>1e4&&r.push("Very long input may be truncated by AI providers")),{isValid:t.length===0,errors:t,warnings:r}}static validateProviderName(e){let t=[];return !e||typeof e!="string"?t.push("Provider name must be a non-empty string"):/^[a-zA-Z][a-zA-Z0-9_-]*$/.test(e)||t.push("Provider name must start with a letter and contain only letters, numbers, underscores, and hyphens"),{isValid:t.length===0,errors:t}}static validateModelName(e){let t=[];return !e||typeof e!="string"?t.push("Model name must be a non-empty string"):e.trim().length===0&&t.push("Model name cannot be only whitespace"),{isValid:t.length===0,errors:t}}static validateApiKey(e,t){let r=[],o=[];if(!e||typeof e!="string")return r.push("API key must be a non-empty string"),{isValid:false,errors:r};switch(t?.toLowerCase()){case "openai":e.startsWith("sk-")||o.push('OpenAI API keys typically start with "sk-"');break;case "anthropic":e.startsWith("sk-ant-")||o.push('Anthropic API keys typically start with "sk-ant-"');break}return e.length<10&&r.push("API key appears to be too short"),/\s/.test(e)&&r.push("API key should not contain whitespace"),{isValid:r.length===0,errors:r,warnings:o}}},Ze=G.validateAgentConfig,Ti=G.validateUserInput,yi=G.validateProviderName,xi=G.validateModelName,Mi=G.validateApiKey;function Pi(i,e,t){return setInterval(()=>{(async()=>{try{await t();}catch(o){i.error("Periodic task failed",{task:e.name,error:o instanceof Error?o.message:String(o)});}})();},e.intervalMs)}function Ci(i){i&&clearInterval(i);}var Qe=class extends se{name="local";version="1.0.0";providers=new Map;config;constructor(e={}){super(),this.config={timeout:3e4,maxRetries:3,retryDelay:1e3,enableLogging:false,...e};}registerProvider(e,t){this.providers.set(e,t);}unregisterProvider(e){this.providers.delete(e);}getProvider(e){return this.providers.get(e)}async executeChat(e){this.validateRequest(e);let t=this.providers.get(e.provider);if(!t)throw new Error(`Provider "${e.provider}" not registered with LocalExecutor`);if(!t.chat)throw new Error(`Provider "${e.provider}" does not implement chat method`);this.config.enableLogging&&this.logDebug(`Executing chat with provider: ${e.provider}, model: ${e.model}`);try{let r=await this.withRetry(async()=>await this.withTimeout(t.chat(e.messages,{...e.options,model:e.model,tools:e.tools}),this.config.timeout),this.config.maxRetries,this.config.retryDelay);if(r.role!=="assistant")throw new Error(`Expected assistant message, got ${r.role}`);return this.validateResponse(r),r}catch(r){let o=r instanceof Error?r:new Error(String(r));throw this.logError("Chat execution failed",o,{provider:e.provider,model:e.model}),o}}async*executeChatStream(e){this.validateRequest(e);let t=this.providers.get(e.provider);if(!t)throw new Error(`Provider "${e.provider}" not registered with LocalExecutor`);if(!t.chatStream)throw new Error(`Provider "${e.provider}" does not implement chatStream method`);this.config.enableLogging&&this.logDebug(`Executing streaming chat with provider: ${e.provider}, model: ${e.model}`);try{let r=t.chatStream(e.messages,{...e.options,model:e.model,tools:e.tools});for await(let o of r)this.validateResponse(o),yield o;}catch(r){let o=r instanceof Error?r:new Error(String(r));throw this.logError("Streaming chat execution failed",o,{provider:e.provider,model:e.model}),o}}supportsTools(){for(let e of this.providers.values())if(e.supportsTools&&e.supportsTools())return true;return false}validateConfig(){try{if(this.config.timeout<=0||this.config.maxRetries<0||this.config.retryDelay<0)return !1;for(let e of this.providers.values())if(e.validateConfig&&!e.validateConfig())return !1;return !0}catch{return false}}async dispose(){this.config.enableLogging&&this.logDebug(`Disposing ${this.providers.size} providers`);let e=[];for(let t of this.providers.values())t.dispose&&e.push(t.dispose());await Promise.all(e),this.providers.clear();}};var ne=class{totalEmitted=0;totalErrors=0;incrementEmitted(){this.totalEmitted+=1;}incrementErrors(){this.totalErrors+=1;}getSnapshot(){return {totalEmitted:this.totalEmitted,totalErrors:this.totalErrors}}};var br=100,ae=class extends Ae{name="EventEmitterPlugin";version="1.0.0";pluginOptions;logger;handlers=new Map;eventBuffer=[];nextHandlerId=1;bufferTimer;metrics;constructor(e={}){super(),this.logger=C("EventEmitterPlugin"),this.metrics=e.metrics??new ne,this.validateOptions(e),this.pluginOptions={enabled:e.enabled??true,events:e.events??[E.AGENT_EXECUTION_START,E.AGENT_EXECUTION_COMPLETE,E.AGENT_EXECUTION_ERROR,E.TOOL_BEFORE_EXECUTE,E.TOOL_AFTER_EXECUTE,E.TOOL_SUCCESS,E.TOOL_ERROR],maxListeners:e.maxListeners??br,async:e.async??true,catchErrors:e.catchErrors??true,filters:e.filters??{},buffer:e.buffer??{enabled:false,maxSize:1e3,flushInterval:5e3},category:e.category??"event_processing",priority:e.priority??ie.HIGH,moduleEvents:e.moduleEvents??[],subscribeToAllModuleEvents:e.subscribeToAllModuleEvents??false},this.pluginOptions.buffer.enabled&&(this.bufferTimer=setInterval(()=>{this.flushBuffer();},this.pluginOptions.buffer.flushInterval));}async beforeExecution(e){await this.emit(E.AGENT_EXECUTION_START,{executionId:e.executionId,sessionId:e.sessionId,userId:e.userId,data:{messageCount:e.messages?.length||0,...e.config&&{config:e.config}}});}async afterExecution(e,t){await this.emit(E.AGENT_EXECUTION_COMPLETE,{executionId:e.executionId,sessionId:e.sessionId,userId:e.userId,data:{duration:t?.duration,tokensUsed:t?.tokensUsed,toolsExecuted:t?.toolsExecuted}});}async beforeConversation(e){await this.emit(E.CONVERSATION_START,{executionId:e.executionId,sessionId:e.sessionId,userId:e.userId,data:{messages:e.messages?.map(t=>({role:t.role,content:t.content||"",timestamp:t.timestamp?t.timestamp.toISOString():new Date().toISOString()})),config:e.config}});}async afterConversation(e,t){await this.emit(E.CONVERSATION_COMPLETE,{executionId:e.executionId,sessionId:e.sessionId,userId:e.userId,data:{response:t.content||t.response,tokensUsed:t.usage?.totalTokens||t.tokensUsed,toolCalls:t.toolCalls?.map(r=>({id:r.id||"",name:r.name||"",arguments:JSON.stringify(r.arguments||{}),result:String(r.result||"")}))}});}async beforeToolExecution(e,t){t&&await this.emit(E.TOOL_BEFORE_EXECUTE,{executionId:e.executionId,sessionId:e.sessionId,userId:e.userId,data:{toolName:t.toolName,toolId:t.executionId,arguments:JSON.stringify(t.parameters??{})}});}async afterToolExecution(e,t){if(!(!t.toolCalls||t.toolCalls.length===0))for(let r of t.toolCalls){let o=r.result===null?E.TOOL_ERROR:E.TOOL_SUCCESS,s={executionId:e.executionId,sessionId:e.sessionId,userId:e.userId,data:{toolName:r.name||"",toolId:r.id||"",toolResult:r.result!==null?String(r.result):void 0,duration:t.duration,success:r.result!==null}};await this.emit(o,s),await this.emit(E.TOOL_AFTER_EXECUTE,{...s,data:{...s.data,toolResult:String(r.result||"")}});}}async onError(e,t){await this.emit(E.AGENT_EXECUTION_ERROR,{executionId:t?.executionId,sessionId:t?.sessionId,userId:t?.userId,error:e instanceof Error?e:new Error(String(e)),data:{action:t?.action,tool:t?.tool,attempt:t?.attempt}});}on(e,t,r){let o=`handler_${this.nextHandlerId++}`;this.handlers.has(e)||this.handlers.set(e,[]);let s=this.handlers.get(e);if(s.length>=this.pluginOptions.maxListeners)throw new j(`Maximum listeners (${this.pluginOptions.maxListeners}) exceeded for event type: ${e}`,this.name,{eventType:e,currentListeners:s.length});return s.push({id:o,listener:t,once:r?.once??false,...r?.filter&&{filter:r.filter}}),o}once(e,t,r){return this.on(e,t,{once:true,...r&&{filter:r}})}off(e,t){let r=this.handlers.get(e);if(!r)return false;let o=typeof t=="string"?r.findIndex(s=>s.id===t):r.findIndex(s=>s.listener===t);return o!==-1?(r.splice(o,1),true):false}async emit(e,t={}){if(!this.pluginOptions.events.includes(e))return;let r={type:e,timestamp:new Date,...t},o=this.pluginOptions.filters[e];if(!(o&&!o(r))){if(this.metrics.incrementEmitted(),this.pluginOptions.buffer.enabled){this.eventBuffer.push(r),this.eventBuffer.length>=this.pluginOptions.buffer.maxSize&&this.flushBuffer();return}await this.processEvent(r);}}async processEvent(e){let t=this.handlers.get(e.type);if(!t||t.length===0)return;let r=t.filter(o=>!o.filter||o.filter(e));if(r.length!==0){for(let o of r.filter(s=>s.once))this.off(e.type,o.id);if(this.pluginOptions.async){await Promise.all(r.map(o=>this.executeHandler(o,e)));return}for(let o of r)await this.executeHandler(o,e);}}async executeHandler(e,t){try{await e.listener(t);}catch(r){throw this.metrics.incrementErrors(),this.pluginOptions.catchErrors&&this.logger.error("Event handler error",{eventType:t.type,handlerId:e.id,error:r instanceof Error?r.message:String(r)}),r instanceof Error?r:new Error(String(r))}}async flushBuffer(){if(this.eventBuffer.length===0)return;let e=[...this.eventBuffer];this.eventBuffer=[];for(let t of e)await this.processEvent(t);}getStats(){let e=super.getStats(),t=this.metrics.getSnapshot(),r={},o=0;for(let[s,n]of this.handlers)r[s]=n.length,o+=n.length;return {...e,eventTypes:Array.from(this.handlers.keys()),listenerCounts:r,totalListeners:o,bufferedEvents:this.eventBuffer.length,totalEmitted:t.totalEmitted,totalErrors:t.totalErrors}}clearAllListeners(){this.handlers.clear();}async destroy(){this.bufferTimer&&clearInterval(this.bufferTimer),await this.flushBuffer(),this.clearAllListeners();}validateOptions(e){if(e.maxListeners!==void 0&&e.maxListeners<0)throw new j(`Invalid maxListeners option: ${e.maxListeners}. Must be a non-negative number.`,this.name,{maxListeners:e.maxListeners});if(e.buffer!==void 0&&e.buffer.maxSize!==void 0&&e.buffer.maxSize<0)throw new j(`Invalid buffer.maxSize option: ${e.buffer.maxSize}. Must be a non-negative number.`,this.name,{bufferMaxSize:e.buffer.maxSize});if(e.buffer!==void 0&&e.buffer.flushInterval!==void 0&&e.buffer.flushInterval<0)throw new j(`Invalid buffer.flushInterval option: ${e.buffer.flushInterval}. Must be a non-negative number.`,this.name,{bufferFlushInterval:e.buffer.flushInterval})}};function Pt(){return [{type:"storage",category:"storage",layer:"infrastructure",capabilities:["data-persistence","data-retrieval"]},{type:"memory-storage",category:"storage",layer:"infrastructure",dependencies:["storage"],capabilities:["in-memory-storage","fast-access"]},{type:"file-storage",category:"storage",layer:"infrastructure",dependencies:["storage"],capabilities:["persistent-storage","file-system-access"]},{type:"text-processing",category:"processing",layer:"application",capabilities:["text-analysis","content-transformation"]},{type:"file-processing",category:"processing",layer:"application",dependencies:["storage"],capabilities:["file-parsing","content-extraction"]},{type:"api-integration",category:"integration",layer:"application",capabilities:["external-api-access","data-synchronization"]},{type:"database-integration",category:"integration",layer:"infrastructure",dependencies:["storage"],capabilities:["database-access","query-execution"]},{type:"rag",category:"capability",layer:"domain",dependencies:["storage","text-processing"],capabilities:["document-search","context-retrieval","semantic-search"]},{type:"speech-processing",category:"capability",layer:"domain",capabilities:["speech-to-text","text-to-speech","audio-processing"]},{type:"image-analysis",category:"capability",layer:"domain",capabilities:["image-recognition","visual-analysis","content-extraction"]}]}function Ct(i,e){let t=[],r=[];if((!i.type||i.type.trim()==="")&&t.push("Module type is required and cannot be empty"),i.category||t.push("Module category is required"),i.layer||t.push("Module layer is required"),i.type&&!/^[a-zA-Z][a-zA-Z0-9-_]*$/.test(i.type)&&t.push("Module type must start with a letter and contain only letters, numbers, hyphens, and underscores"),i.dependencies){for(let o of i.dependencies)(!o||o.trim()==="")&&t.push("Dependencies cannot be empty");i.dependencies.includes(i.type)&&t.push("Module cannot depend on itself");}if(i.capabilities)for(let o of i.capabilities)(!o||o.trim()==="")&&t.push("Capabilities cannot be empty");if(i.dependencies){let o=["infrastructure","core","application","domain","presentation"],s=o.indexOf(i.layer);for(let n of i.dependencies){let a=e(n);a&&o.indexOf(a.layer)>s&&r.push(`Module '${i.type}' (${i.layer}) depends on '${n}' (${a.layer}) which is in a higher layer`);}}return {valid:t.length===0,errors:t,warnings:r}}function Rt(i,e,t){let r=new Set,o=new Set,s=[],n=[],a=[];for(let u of i){let l=e(u);if(!l){a.push(u);continue}if(l.dependencies)for(let g of l.dependencies)!t(g)&&!a.includes(g)&&a.push(g);}let d=(u,l=[])=>{if(o.has(u)){let p=l.indexOf(u);n.push(l.slice(p).concat([u]));return}if(r.has(u))return;let g=e(u);if(!g)return;o.add(u);let c=[...l,u];if(g.dependencies)for(let p of g.dependencies)(i.includes(p)||t(p))&&d(p,c);o.delete(u),r.add(u),s.push(u);};for(let u of i)r.has(u)||d(u);return {resolved:a.length===0&&n.length===0,order:s,circularDependencies:n,missingDependencies:a}}function St(i,e){let t=[],r=[],o=new Map;for(let n of i){let a=e(n);a&&(o.has(a.layer)||o.set(a.layer,[]),o.get(a.layer).push(n));}let s=new Map;for(let n of i){let a=e(n);if(a?.capabilities)for(let d of a.capabilities)s.has(d)||s.set(d,[]),s.get(d).push(n);}for(let[n,a]of Array.from(s.entries()))if(a.length>1)for(let d=0;d<a.length;d++)for(let u=d+1;u<a.length;u++){let l=a[d],g=a[u];l&&g&&t.push({module1:l,module2:g,reason:`Both modules provide capability '${n}'`});}return t.length>0&&(r.push("Consider using only one module per capability"),r.push("Check if modules can be configured to avoid conflicts")),!o.has("infrastructure")&&i.length>1&&r.push("Consider adding infrastructure modules for better foundation"),{compatible:t.length===0,conflicts:t,suggestions:r}}function wt(i){let e={core:0,storage:0,processing:0,integration:0,interface:0,capability:0},t={infrastructure:0,core:0,application:0,domain:0,presentation:0},r=0,o=0;for(let s of i.values())e[s.category]++,t[s.layer]++,s.dependencies&&s.dependencies.length>0&&r++,s.capabilities&&s.capabilities.length>0&&o++;return {totalTypes:i.size,typesByCategory:e,typesByLayer:t,typesWithDependencies:r,typesWithCapabilities:o}}var Ne=class{registeredTypes=new Map;logger;constructor(){this.logger=C("ModuleDescriptorRegistry"),this.registerBuiltinTypes();}registerType(e){let t=this.validateTypeDescriptor(e);if(!t.valid)throw new m(`Invalid module type descriptor: ${t.errors.join(", ")}`,{type:e.type,errors:t.errors});if(this.registeredTypes.has(e.type)){let r=this.registeredTypes.get(e.type);this.logger.warn("Overriding existing module type",{type:e.type,previousCategory:r?.category||"unknown",newCategory:e.category});}this.registeredTypes.set(e.type,e),this.logger.info("Module type registered",{type:e.type,category:e.category,layer:e.layer,dependencies:e.dependencies?.length||0,capabilities:e.capabilities?.length||0});}unregisterType(e){if(!this.registeredTypes.has(e))return false;let t=this.findDependentTypes(e);if(t.length>0)throw new m(`Cannot unregister module type '${e}' - it is required by: ${t.join(", ")}`,{type:e,dependentTypes:t});return this.registeredTypes.delete(e),this.logger.info("Module type unregistered",{type:e}),true}getType(e){return this.registeredTypes.get(e)}getAllTypes(){return Array.from(this.registeredTypes.values())}getTypesByCategory(e){return Array.from(this.registeredTypes.values()).filter(t=>t.category===e)}getTypesByLayer(e){return Array.from(this.registeredTypes.values()).filter(t=>t.layer===e)}hasType(e){return this.registeredTypes.has(e)}validateTypeDescriptor(e){return Ct(e,t=>this.getType(t))}resolveDependencies(e){return Rt(e,t=>this.getType(t),t=>this.hasType(t))}checkCompatibility(e){return St(e,t=>this.getType(t))}findDependentTypes(e){let t=[];for(let[r,o]of this.registeredTypes)o.dependencies?.includes(e)&&t.push(r);return t}registerBuiltinTypes(){for(let e of Pt())this.registerType(e);this.logger.info("Built-in module types registered",{totalTypes:this.registeredTypes.size});}clearAllTypes(){this.registeredTypes.clear(),this.logger.info("All module types cleared");}getStats(){return wt(this.registeredTypes)}};function At(i,e,t){if(!i.name||i.name.trim()==="")throw new m("Module name is required");if(!i.version||i.version.trim()==="")throw new m("Module version is required");let r=i.getModuleType(),o=e.validateTypeDescriptor(r);if(!o.valid)throw new m(`Invalid module type: ${o.errors.join(", ")}`,{moduleName:i.name,errors:o.errors});o.warnings.length>0&&t.warn("Module type validation warnings",{moduleName:i.name,warnings:o.warnings});}async function Ot(i,e,t,r){let o=i.getModuleType();if(!o.dependencies||o.dependencies.length===0)return;for(let a of o.dependencies)if(!e.hasType(a))throw new m(`Module '${i.name}' depends on unregistered type '${a}'`,{moduleName:i.name,dependencyType:a});let s=new Set;for(let a of t.values())s.add(a.getModuleType().type);let n=[];for(let a of o.dependencies)s.has(a)||n.push(a);n.length>0&&r.warn("Module has unmet dependencies",{moduleName:i.name,missingDependencies:n});}function Nt(i,e){let t=e.get(i);if(!t)return [];let r=t.getModuleType().type,o=[];for(let[s,n]of e.entries())s!==i&&n.getModuleType().dependencies?.includes(r)&&o.push(s);return o}function Dt(i,e){let t={},r=0,o=0,s=0,n=0,a=0,d=0;for(let u of i.values()){let l=u.getModuleType().type;t[l]=(t[l]||0)+1,u.isInitialized()&&r++,u.isEnabled()&&o++;}for(let u of e.values())s+=u.totalExecutions,n+=u.successfulExecutions,a+=u.failedExecutions,d+=u.totalExecutionTime;return {totalModules:i.size,initializedModules:r,enabledModules:o,modulesByType:t,totalExecutions:s,totalSuccessfulExecutions:n,totalFailedExecutions:a,averageExecutionTime:s>0?d/s:0}}var Ut={REGISTERED:"module.registered",UNREGISTERED:"module.unregistered"},De=class{modules=new Map;moduleOptions=new Map;moduleStatuses=new Map;moduleStats=new Map;registrationOrder=[];initializationOrder=[];typeRegistry;eventEmitter;logger;isDisposing=false;constructor(e,t){this.eventEmitter=e,this.typeRegistry=t??new Ne,this.logger=C("ModuleRegistry");}async registerModule(e,t={}){if(this.isDisposing)throw new m("Cannot register modules during disposal");if(At(e,this.typeRegistry,this.logger),this.modules.has(e.name))throw new m(`Module with name '${e.name}' is already registered`,{moduleName:e.name});t.validateDependencies!==false&&await Ot(e,this.typeRegistry,this.modules,this.logger),this.modules.set(e.name,e),this.moduleOptions.set(e.name,t.initOptions||{}),this.registrationOrder.push(e.name);let r=e.getModuleType();this.moduleStatuses.set(e.name,{name:e.name,type:r.type,enabled:e.isEnabled(),initialized:false,hasEventEmitter:!!this.eventEmitter,registrationTime:new Date,dependencies:r.dependencies||[],dependents:[]}),this.moduleStats.set(e.name,{totalExecutions:0,successfulExecutions:0,failedExecutions:0,averageExecutionTime:0,totalExecutionTime:0}),t.autoInitialize&&await this.initializeModule(e.name,t.initTimeout),this.eventEmitter&&await this.eventEmitter.emit(Ut.REGISTERED,{data:{moduleName:e.name,moduleType:r.type},timestamp:new Date});}async unregisterModule(e){let t=this.modules.get(e);if(!t)return false;let r=Nt(e,this.modules);if(r.length>0)throw new m(`Cannot unregister module '${e}' - it is required by: ${r.join(", ")}`,{moduleName:e,dependents:r});t.isInitialized()&&t.dispose&&await t.dispose(),this.modules.delete(e),this.moduleOptions.delete(e),this.moduleStatuses.delete(e),this.moduleStats.delete(e);let o=this.registrationOrder.indexOf(e);o!==-1&&this.registrationOrder.splice(o,1);let s=this.initializationOrder.indexOf(e);return s!==-1&&this.initializationOrder.splice(s,1),this.eventEmitter&&await this.eventEmitter.emit(Ut.UNREGISTERED,{data:{moduleName:e},timestamp:new Date}),true}async initializeModule(e,t){let r=this.modules.get(e);if(!r)throw new m(`Module '${e}' not found`);if(r.isInitialized())return;let o=this.moduleOptions.get(e),s=r.initialize(o,this.eventEmitter);if(t&&t>0){let a,d=new Promise((u,l)=>{a=setTimeout(()=>{l(new Error(`Module '${e}' initialization timed out after ${t}ms`));},t);});await Promise.race([s.then(u=>(clearTimeout(a),u)),d]);}else await s;let n=this.moduleStatuses.get(e);n&&(n.initialized=true,n.initializationTime=new Date),this.initializationOrder.includes(e)||this.initializationOrder.push(e);}async initializeAllModules(e){let t=Array.from(this.modules.keys());if(t.length===0)return;let r=t.map(s=>this.modules.get(s).getModuleType().type),o=this.typeRegistry.resolveDependencies(r);if(!o.resolved){let s=[];throw o.missingDependencies.length>0&&s.push(`Missing dependencies: ${o.missingDependencies.join(", ")}`),o.circularDependencies.length>0&&s.push(`Circular dependencies: ${o.circularDependencies.map(n=>n.join(" -> ")).join("; ")}`),new m(`Cannot initialize modules: ${s.join("; ")}`,{missingDependencies:o.missingDependencies,circularDependencies:o.circularDependencies.map(n=>n.join(" -> "))})}for(let s of o.order){let n=t.find(a=>this.modules.get(a).getModuleType().type===s);n&&await this.initializeModule(n,e);}}async executeModule(e,t){let r=this.modules.get(e);if(!r)throw new m(`Module '${e}' not found`);if(!r.isInitialized())throw new m(`Module '${e}' is not initialized`);if(!r.isEnabled())throw new m(`Module '${e}' is disabled`);let o=this.moduleStats.get(e),s=Date.now();try{if(!r.execute)throw new m(`Module '${e}' does not support execute()`);let n=await r.execute(t),a=Date.now()-s;o.totalExecutions++,o.successfulExecutions++,o.totalExecutionTime+=a,o.averageExecutionTime=o.totalExecutionTime/o.totalExecutions,o.lastExecutionTime=new Date;let d=this.moduleStatuses.get(e);return d&&(d.lastActivity=new Date),n}catch(n){let a=Date.now()-s;throw o.totalExecutions++,o.failedExecutions++,o.totalExecutionTime+=a,o.averageExecutionTime=o.totalExecutionTime/o.totalExecutions,o.lastExecutionTime=new Date,n}}getModule(e){return this.modules.get(e)}getModulesByType(e){return Array.from(this.modules.values()).filter(t=>t.getModuleType().type===e)}getAllModules(){return Array.from(this.modules.values())}getModuleNames(){return Array.from(this.modules.keys())}hasModule(e){return this.modules.has(e)}getModuleStatus(e){return this.moduleStatuses.get(e)}getAllModuleStatuses(){return Array.from(this.moduleStatuses.values())}getModuleStats(e){return this.moduleStats.get(e)}getAllModuleStats(){let e={};for(let[t,r]of this.moduleStats.entries())e[t]={...r};return e}async disposeAllModules(){this.isDisposing=true;let e=[...this.initializationOrder].reverse();for(let t of e){let r=this.modules.get(t);if(r&&r.isInitialized())try{r.dispose&&await r.dispose();let o=this.moduleStatuses.get(t);o&&(o.initialized=!1);}catch(o){this.logger.error("Failed to dispose module",{name:t,error:o instanceof Error?o.message:String(o)});}}this.initializationOrder=[],this.isDisposing=false;}clearAllModules(){this.modules.clear(),this.moduleOptions.clear(),this.moduleStatuses.clear(),this.moduleStats.clear(),this.registrationOrder=[],this.initializationOrder=[],this.isDisposing=false;}getRegistryStats(){return Dt(this.modules,this.moduleStats)}};var Ue=class extends Y{providers=new Map;currentProvider;currentModel;constructor(){super();}async doInitialize(){y.debug("AIProviders initialized");}async doDispose(){for(let[e,t]of this.providers)try{t.close&&await t.close(),y.debug(`Closed AI provider: ${e}`);}catch(r){y.warn(`Failed to close AI provider ${e}`,{error:r instanceof Error?r.message:String(r)});}this.providers.clear(),this.currentProvider=void 0,this.currentModel=void 0,y.debug("AIProviders disposed");}addProvider(e,t){this.ensureInitialized();let r=G.validateProviderName(e);if(!r.isValid)throw new I(`Invalid provider name: ${r.errors.join(", ")}`);if(!t||typeof t!="object"||t===null||Array.isArray(t))throw new I("Provider must be a valid object instance");if(!t.name||typeof t.name!="string")throw new I("Provider must have a valid name");if(typeof t.chat!="function")throw new I("Provider must have a chat method");this.providers.has(e)&&y.warn(`Provider "${e}" is already registered, overriding`,{providerName:e,existingProvider:this.providers.get(e)?.name}),this.providers.set(e,t),y.debug(`AI provider "${e}" registered successfully`,{providerName:e,version:t.version,supportsStreaming:typeof t.chatStream=="function"});}removeProvider(e){if(this.ensureInitialized(),!this.providers.has(e)){y.warn(`Attempted to remove non-existent provider "${e}"`);return}let t=this.providers.get(e);t?.close&&t.close().catch(r=>{y.warn(`Failed to close provider ${e}`,{error:r.message});}),this.providers.delete(e),this.currentProvider===e&&(this.currentProvider=void 0,this.currentModel=void 0,y.debug(`Cleared current provider selection after removing "${e}"`)),y.debug(`AI provider "${e}" removed successfully`);}getProvider(e){return this.ensureInitialized(),this.providers.get(e)}getProviders(){return this.ensureInitialized(),Object.fromEntries(this.providers)}setCurrentProvider(e,t){if(this.ensureInitialized(),!this.providers.get(e))throw new m(`Provider "${e}" is not registered`);this.currentProvider=e,this.currentModel=t,y.debug(`Current AI provider set to "${e}" with model "${t}"`);}getCurrentProvider(){if(this.ensureInitialized(),!(!this.currentProvider||!this.currentModel))return {provider:this.currentProvider,model:this.currentModel}}isConfigured(){return this.ensureInitialized(),!!(this.currentProvider&&this.currentModel&&this.providers.has(this.currentProvider))}getAvailableModels(e){if(this.ensureInitialized(),!this.providers.get(e))throw new m(`Provider "${e}" is not registered`);return y.warn("getAvailableModels() is deprecated. Models are now handled by providers internally."),[]}getCurrentProviderInstance(){if(!(!this.isConfigured()||!this.currentProvider))return this.providers.get(this.currentProvider)}getProviderNames(){return this.ensureInitialized(),Array.from(this.providers.keys())}getProvidersByPattern(e){this.ensureInitialized();let t=typeof e=="string"?new RegExp(e):e,r={};for(let[o,s]of this.providers)t.test(o)&&(r[o]=s);return r}supportsStreaming(e){this.ensureInitialized();let t=e||this.currentProvider;if(!t)return false;let r=this.providers.get(t);return !!(r&&typeof r.chatStream=="function")}getProviderCount(){return this.ensureInitialized(),this.providers.size}};var le=class{tools=new Map;register(e){if(!e.schema?.name)throw new I("Tool must have a valid schema with name");let t=e.schema.name;this.validateToolSchema(e.schema),this.tools.has(t)&&y.warn(`Tool "${t}" is already registered, overriding`,{toolName:t,existingTool:this.tools.get(t)?.constructor.name}),this.tools.set(t,e),y.debug(`Tool "${t}" registered successfully`,{toolName:t,toolType:e.constructor.name,parameters:Object.keys(e.schema.parameters?.properties||{})});}unregister(e){if(!this.tools.has(e)){y.warn(`Attempted to unregister non-existent tool "${e}"`);return}this.tools.delete(e),y.debug(`Tool "${e}" unregistered successfully`);}get(e){return this.tools.get(e)}getAll(){return Array.from(this.tools.values())}getSchemas(){let e=this.getAll();return y.debug("[TOOL-FLOW] ToolRegistry.getSchemas() - Tools before schema extraction",{count:e.length,tools:e.map(t=>({name:t.schema?.name??"unnamed",hasSchema:!!t.schema,schemaType:typeof t.schema,toolType:t.constructor?.name||"unknown"}))}),this.getAll().map(t=>t.schema)}has(e){return this.tools.has(e)}clear(){let e=this.tools.size;this.tools.clear(),y.debug(`Cleared ${e} tools from registry`);}getToolNames(){return Array.from(this.tools.keys())}getToolsByPattern(e){let t=typeof e=="string"?new RegExp(e):e;return this.getAll().filter(r=>t.test(r.schema.name))}size(){return this.tools.size}validateToolSchema(e){if(!e.name||typeof e.name!="string")throw new I("Tool schema must have a valid name");if(!e.description||typeof e.description!="string")throw new I("Tool schema must have a description");if(!e.parameters||typeof e.parameters!="object"||e.parameters===null||Array.isArray(e.parameters))throw new I("Tool schema must have parameters object");if(e.parameters.type!=="object")throw new I('Tool parameters type must be "object"');if(e.parameters.properties)for(let t of Object.keys(e.parameters.properties)){let r=e.parameters.properties[t];if(!r?.type)throw new I(`Parameter "${t}" must have a type`);if(!["string","number","boolean","array","object"].includes(r.type))throw new I(`Parameter "${t}" has invalid type "${r.type}"`)}if(e.parameters.required){let t=e.parameters.properties||{};for(let r of e.parameters.required)if(!t[r])throw new I(`Required parameter "${r}" is not defined in properties`)}}};var ue=class{schema;fn;eventService;constructor(e,t){this.schema=e,this.fn=t,this.validateConstructorInputs();}getName(){return this.schema.name}setEventService(e){this.eventService=e;}async execute(e,t){let r=this.schema.name;if(!this.validate(e)){let a=this.getValidationErrors(e);throw new I(`Invalid parameters for tool "${r}": ${a.join(", ")}`)}let o=Date.now(),s;try{s=await this.fn(e,t);}catch(a){throw a instanceof D||a instanceof I?a:new D(`Function tool execution failed: ${a instanceof Error?a.message:String(a)}`,r,a instanceof Error?a:new Error(String(a)),{parameterCount:Object.keys(e||{}).length,hasContext:!!t})}let n=Date.now()-o;return {success:true,data:s,metadata:{executionTime:n,toolName:r,parameters:e}}}validate(e){return this.getValidationErrors(e).length===0}validateParameters(e){let t=this.getValidationErrors(e);return {isValid:t.length===0,errors:t}}getDescription(){return this.schema.description}getValidationErrors(e){let t=[],r=this.schema.parameters.required||[],o=this.schema.parameters.properties||{};for(let s of r)s in e||t.push(`Missing required parameter: ${s}`);for(let[s,n]of Object.entries(e)){let a=o[s];if(!a){t.push(`Unknown parameter: ${s}`);continue}let d=this.validateParameterType(s,n,a);d&&t.push(d);}return t}validateParameterType(e,t,r){switch(r.type){case "string":if(typeof t!="string")return `Parameter "${e}" must be a string, got ${typeof t}`;break;case "number":if(typeof t!="number"||isNaN(t))return `Parameter "${e}" must be a number, got ${typeof t}`;break;case "boolean":if(typeof t!="boolean")return `Parameter "${e}" must be a boolean, got ${typeof t}`;break;case "array":if(!Array.isArray(t))return `Parameter "${e}" must be an array, got ${typeof t}`;if(r.items)for(let s=0;s<t.length;s++){let n=this.validateParameterType(`${e}[${s}]`,t[s],r.items);if(n)return n}break;case "object":if(typeof t!="object"||t===null||Array.isArray(t))return `Parameter "${e}" must be an object, got ${typeof t}`;break}if(r.enum&&r.enum.length>0){let s=r.enum,n=false;for(let a of s)if(t===a){n=true;break}if(!n)return `Parameter "${e}" must be one of: ${s.join(", ")}, got ${t}`}}validateConstructorInputs(){if(!this.schema)throw new I("Tool schema is required");if(!this.fn||typeof this.fn!="function")throw new I("Tool function is required and must be a function");if(!this.schema.name)throw new I("Tool schema must have a name")}};var Le=class extends Y{registry;allowedTools;constructor(){super(),this.registry=new le;}async doInitialize(){y.debug("Tools initialized");}async doDispose(){this.registry.clear(),delete this.allowedTools,y.debug("Tools disposed");}addTool(e,t){this.ensureInitialized();let r=new ue(e,t);this.registry.register(r),y.debug(`Tool "${e.name}" registered successfully`);}removeTool(e){this.ensureInitialized(),this.registry.unregister(e);}getTool(e){return this.ensureInitialized(),this.registry.get(e)}getToolSchema(e){return this.ensureInitialized(),this.registry.get(e)?.schema}getTools(){this.ensureInitialized();let e=this.registry.getSchemas();return this.allowedTools?e.filter(t=>this.allowedTools.includes(t.name)):e}async executeTool(e,t,r){if(this.ensureInitialized(),this.allowedTools&&!this.allowedTools.includes(e))throw new D(`Tool "${e}" is not in the allowed tools list`,e);let o=this.registry.get(e);if(!o)throw new D(`Tool "${e}" is not registered`,e);let s;try{s=await o.execute(t,r);}catch(n){throw n instanceof Error?new D(n.message,e,n):new D(String(n),e)}if(!s.success)throw new D(s.error||"Tool execution failed",e,void 0,{parameters:JSON.stringify(t),result:JSON.stringify(s)});if(typeof s.data>"u")throw new D("Tool execution succeeded but returned no data",e);return s.data}hasTool(e){return this.ensureInitialized(),this.registry.has(e)}setAllowedTools(e){this.ensureInitialized(),this.allowedTools=[...e],y.debug(`Set allowed tools: ${e.join(", ")}`);}getAllowedTools(){return this.ensureInitialized(),this.allowedTools?[...this.allowedTools]:void 0}getRegistry(){return this.ensureInitialized(),this.registry}getToolCount(){return this.ensureInitialized(),this.registry.size()}};var de=class{templates=new Map;logger;constructor(){this.logger=C("AgentTemplates"),this.logger.info("AgentTemplates initialized");}registerTemplate(e){if(!e.id)throw new Error("Template must have an ID");this.templates.has(e.id)&&this.logger.warn(`Template "${e.id}" is already registered, overriding`),this.templates.set(e.id,e),this.logger.info(`Template "${e.id}" registered successfully`,{templateId:e.id,category:e.category,tags:e.tags});}unregisterTemplate(e){let t=this.templates.delete(e);return t?this.logger.info(`Template "${e}" unregistered`):this.logger.warn(`Attempted to unregister non-existent template "${e}"`),t}getTemplates(){return Array.from(this.templates.values())}getTemplate(e){return this.templates.get(e)}findTemplates(e){return this.getTemplates().filter(t=>!(e.category&&t.category!==e.category||e.tags&&e.tags.length>0&&!e.tags.some(o=>t.tags?.includes(o))||e.provider&&t.config.defaultModel?.provider!==e.provider||e.model&&t.config.defaultModel?.model!==e.model))}applyTemplate(e,t={}){let r=[],o=false,s={...e.config},n={...s,...t},a=u=>{u in t&&s[u]!==t[u]&&(o=true,s[u]!==void 0&&r.push(`Override: ${u} changed from "${String(s[u])}" to "${String(t[u])}"`));};t.name!==void 0&&a("name"),t.systemMessage!==void 0&&a("systemMessage");let d=n;return this.logger.debug("Template applied",{templateId:e.id,overridesCount:Object.keys(t).length,warningsCount:r.length,modified:o}),{config:d,template:e,warnings:r,modified:o}}hasTemplate(e){return this.templates.has(e)}getTemplateCount(){return this.templates.size}clearAll(){this.templates.clear(),this.logger.info("All templates cleared");}getStats(){let e=this.getTemplates(),t=[...new Set(e.map(n=>n.category).filter(n=>typeof n=="string"&&n.length>0))],r=[...new Set(e.flatMap(n=>n.tags||[]))],o=[...new Set(e.map(n=>n.config.defaultModel?.provider).filter(n=>typeof n=="string"&&n.length>0))],s=[...new Set(e.map(n=>n.config.defaultModel?.model).filter(n=>typeof n=="string"&&n.length>0))];return {totalTemplates:e.length,categories:t,tags:r,providers:o,models:s}}};var Rr=100,Sr=.7,wr=36,Ar=8,ce=class{agentTemplates;initialized=false;logger;options;activeAgents;creationStats;lifecycleEvents;constructor(e={},t={}){this.agentTemplates=new de,this.logger=C("AgentFactory"),this.options={defaultModel:e.defaultModel||"gpt-4",defaultProvider:e.defaultProvider||"openai",maxConcurrentAgents:e.maxConcurrentAgents||Rr,defaultSystemMessage:e.defaultSystemMessage||"You are a helpful AI assistant.",strictValidation:e.strictValidation??true},this.activeAgents=new Map,this.creationStats={totalCreated:0,activeCount:0,fromTemplates:0,customConfigured:0,templateUsageRatio:0},this.lifecycleEvents=t,this.logger.debug("AgentFactory initialized",{maxConcurrentAgents:this.options.maxConcurrentAgents,strictValidation:this.options.strictValidation,hasDefaultModel:!!this.options.defaultModel,hasDefaultProvider:!!this.options.defaultProvider,hasLifecycleEvents:this.lifecycleEvents!==null});}async initialize(){this.initialized||(this.logger.debug("Initializing AgentFactory"),this.initialized=true,this.logger.debug("AgentFactory initialization completed"));}async createAgent(e,t,r=false){let o;try{if(this.activeAgents.size>=this.options.maxConcurrentAgents)throw new m(`Maximum concurrent agents limit reached: ${this.options.maxConcurrentAgents}`);if(o=this.applyDefaults(t),this.options.strictValidation){let d=Ze(o);if(!d.isValid)throw new I(`Invalid agent configuration: ${d.errors.join(", ")}`)}this.lifecycleEvents.beforeCreate&&await this.lifecycleEvents.beforeCreate(o);let s=new e(o),n=s;typeof n.initialize=="function"&&await n.initialize();let a=this.generateAgentId();return this.activeAgents.set(a,s),this.updateCreationStats(r),this.lifecycleEvents.afterCreate&&await this.lifecycleEvents.afterCreate(s,o),this.logger.info("Agent created successfully",{agentId:a,model:o.defaultModel.model,provider:o.defaultModel.provider}),s}catch(s){let n=s instanceof Error?s:new Error(String(s));throw this.lifecycleEvents.onCreateError&&o&&await this.lifecycleEvents.onCreateError(n,o),this.logger.error("Failed to create agent",{error:n.message,model:t.defaultModel?.model,provider:t.defaultModel?.provider,hasTools:!!t.tools?.length}),n}}async createFromTemplate(e,t,r={}){let o=this.agentTemplates.getTemplate(t);if(!o)throw new m(`Template not found: ${t}`);let s=this.applyTemplate(o,r);s.warnings.length>0&&this.logger.warn("Template application warnings",{templateId:t,warnings:s.warnings});let n=await this.createAgent(e,s.config,true);return this.logger.info("Agent created from template",{templateId:t,modified:s.modified,warnings:s.warnings.length}),n}registerTemplate(e){this.agentTemplates.registerTemplate(e);}unregisterTemplate(e){return this.agentTemplates.unregisterTemplate(e)}getTemplates(){return this.agentTemplates.getTemplates()}getTemplate(e){return this.agentTemplates.getTemplate(e)}findTemplates(e){return this.agentTemplates.findTemplates(e)}applyTemplate(e,t={}){return this.agentTemplates.applyTemplate(e,t)}async destroyAgent(e){let t=this.activeAgents.get(e);if(!t)return false;try{let r=t;return typeof r.cleanup=="function"&&await r.cleanup(),this.activeAgents.delete(e),this.creationStats.activeCount--,this.lifecycleEvents.onDestroy&&await this.lifecycleEvents.onDestroy(e),this.logger.info("Agent destroyed",{agentId:e}),!0}catch(r){throw this.logger.error("Error destroying agent",{agentId:e,error:r instanceof Error?r.message:String(r)}),r}}getCreationStats(){return {...this.creationStats}}getActiveAgents(){return new Map(this.activeAgents)}validateConfiguration(e){return Ze(e)}applyDefaults(e){if(!e.aiProviders||e.aiProviders.length===0)throw new m("At least one AI provider must be specified in aiProviders array");let t=e.defaultModel||{provider:e.aiProviders[0]?.name||this.options.defaultProvider,model:this.options.defaultModel,temperature:.7,systemMessage:this.options.defaultSystemMessage};return {id:e.id||this.generateAgentId(),name:e.name||"Unnamed Agent",aiProviders:e.aiProviders,defaultModel:{provider:t.provider,model:t.model,temperature:t.temperature??Sr,...t.maxTokens!==void 0&&{maxTokens:t.maxTokens},...t.topP!==void 0&&{topP:t.topP},systemMessage:t.systemMessage||this.options.defaultSystemMessage},tools:e.tools||[],plugins:e.plugins||[],metadata:e.metadata||{},...e.logging&&{logging:e.logging},...e.conversationId&&{conversationId:e.conversationId},...e}}generateAgentId(){let e=Date.now(),t=Math.random().toString(wr).substring(2,Ar);return `agent_${e}_${t}`}updateCreationStats(e){this.creationStats.totalCreated++,this.creationStats.activeCount++,e?this.creationStats.fromTemplates++:this.creationStats.customConfigured++,this.creationStats.templateUsageRatio=this.creationStats.totalCreated>0?this.creationStats.fromTemplates/this.creationStats.totalCreated:0;}};function et(i){return i.role==="assistant"}function _e(i){return i.role==="system"}function tt(i){return i.role==="tool"}function rt(i,e){let t={role:"user",content:i,timestamp:new Date};return e?.name&&(t.name=e.name),e?.metadata&&(t.metadata=e.metadata),e?.parts&&(t.parts=e.parts),t}function ot(i,e){let t={role:"assistant",content:i,timestamp:new Date};return e?.toolCalls&&(t.toolCalls=e.toolCalls),e?.metadata&&(t.metadata=e.metadata),e?.parts&&(t.parts=e.parts),t}function it(i,e){let t={role:"system",content:i,timestamp:new Date};return e?.name&&(t.name=e.name),e?.metadata&&(t.metadata=e.metadata),e?.parts&&(t.parts=e.parts),t}function st(i,e){let t={role:"tool",content:i,toolCallId:e.toolCallId,timestamp:new Date};return e.name&&(t.name=e.name),e.metadata&&(t.metadata=e.metadata),e.parts&&(t.parts=e.parts),t}var ke=class{maxMessages;messages=[];constructor(e){this.maxMessages=e?.maxMessages||0;}addMessage(e){this.messages.push(e),this.messages=this.applyMessageLimit(this.messages);}addUserMessage(e,t,r){this.addMessage(rt(e,{...t&&{metadata:t},...r&&{parts:r}}));}addAssistantMessage(e,t,r,o){this.addMessage(ot(e,{...t&&{toolCalls:t},...r&&{metadata:r},...o&&{parts:o}}));}addSystemMessage(e,t,r){this.addMessage(it(e,{...t&&{metadata:t},...r&&{parts:r}}));}addToolMessageWithId(e,t,r,o,s){this.addMessage(st(e,{toolCallId:t,name:r,...o&&{metadata:o},...s&&{parts:s}}));}getMessages(){return [...this.messages]}getMessagesByRole(e){return this.messages.filter(t=>t.role===e)}getRecentMessages(e){return this.messages.slice(-e)}getMessageCount(){return this.messages.length}clear(){this.messages=[];}applyMessageLimit(e){if(this.maxMessages>0&&e.length>this.maxMessages){let t=e.filter(_e),r=e.filter(s=>!_e(s)),o=Math.max(0,this.maxMessages-t.length);return [...t,...r.slice(-o)]}return e}};var Z=class{history;toolCallIds=new Set;constructor(e=100){this.history=new ke({maxMessages:e});}addMessage(e){this.history.addMessage(e);}addUserMessage(e,t,r){this.history.addUserMessage(e,t,r);}addAssistantMessage(e,t,r,o){this.history.addAssistantMessage(e,t,r,o);}addSystemMessage(e,t,r){this.history.addSystemMessage(e,t,r);}addToolMessage(e,t,r,o,s){this.history.addToolMessageWithId(e,t,r||"unknown",o,s);}addToolMessageWithId(e,t,r,o,s){if(this.toolCallIds.has(t))throw new Error(`Duplicate tool message detected for toolCallId: ${t}. Tool messages must have unique toolCallIds.`);this.toolCallIds.add(t),this.history.addToolMessageWithId(e,t,r,o,s);}getMessages(){return this.history.getMessages()}getMessagesByRole(e){return this.history.getMessagesByRole(e)}getRecentMessages(e){return this.history.getRecentMessages(e)}getMessageCount(){return this.history.getMessageCount()}getMessagesForAPI(){return this.history.getMessages().map(e=>{let t={role:e.role,content:e.content};return e.role==="assistant"&&et(e)&&e.toolCalls&&(t.tool_calls=e.toolCalls),e.role==="tool"&&tt(e)&&(t.tool_call_id=e.toolCallId),t})}clear(){this.history.clear(),this.toolCallIds.clear();}};var Or=100,Nr=50,ge=class{conversations=new Map;logger;maxMessagesPerConversation;maxConversations;constructor(e={}){this.maxMessagesPerConversation=e.maxMessagesPerConversation||Or,this.maxConversations=e.maxConversations||Nr,this.logger=C("ConversationHistory");}getConversationSession(e){return this.conversations.has(e)||(this.conversations.size>=this.maxConversations&&this.cleanupOldConversations(),this.conversations.set(e,new Z(this.maxMessagesPerConversation))),this.conversations.get(e)}hasConversation(e){return this.conversations.has(e)}removeConversation(e){let t=this.conversations.delete(e);return t&&this.logger.debug("Removed conversation",{conversationId:e}),t}clearAll(){let e=this.conversations.size;this.conversations.clear(),this.logger.debug("Cleared all conversations",{removedCount:e});}getStats(){let e=Array.from(this.conversations.keys()),t=Array.from(this.conversations.values()).reduce((r,o)=>r+o.getMessageCount(),0);return {totalConversations:this.conversations.size,conversationIds:e,totalMessages:t}}cleanupOldConversations(){if(this.conversations.size===0)return;let e=this.conversations.keys().next().value;e&&this.conversations.delete(e);}};var Ve=class{constructor(e,t,r,o,s){this.agentName=e;this.moduleRegistry=t;this.logger=r;this.isReady=o;this.ensureReady=s;}async registerModule(e,t){await this.ensureReady(),await this.moduleRegistry.registerModule(e,{autoInitialize:t?.autoInitialize??true,validateDependencies:t?.validateDependencies??true}),this.logger.info("Module registered",{moduleName:e.name,moduleType:e.getModuleType().type});}async unregisterModule(e){if(!this.isReady())return false;let t=await this.moduleRegistry.unregisterModule(e);return t&&this.logger.info("Module unregistered",{moduleName:e}),t}getModule(e){if(this.isReady())return this.moduleRegistry.getModule(e)}getModulesByType(e){return this.isReady()?this.moduleRegistry.getModulesByType(e):[]}getModules(){return this.isReady()?this.moduleRegistry.getAllModules():[]}getModuleNames(){return this.isReady()?this.moduleRegistry.getModuleNames():[]}hasModule(e){return this.isReady()?this.moduleRegistry.hasModule(e):false}async executeModule(e,t){await this.ensureReady();let r={agentName:this.agentName,...t.executionId&&{executionId:t.executionId},...t.sessionId&&{sessionId:t.sessionId},...t.userId&&{userId:t.userId},...t.metadata&&{metadata:t.metadata}};return await this.moduleRegistry.executeModule(e,r)}getModuleStats(e){if(this.isReady())return this.moduleRegistry.getModuleStats(e)}};var He=class{constructor(e,t,r){this.logger=e;this.isReady=t;this.getExecutionService=r;}addPlugin(e){let t=this.getExecutionService();if(!this.isReady()||!t)throw new m("Cannot add plugin before agent is fully initialized. Await an operation like run() first, or pass plugins via the constructor config.",{pluginName:e.name});t.registerPlugin(e),this.logger.debug("Plugin added",{pluginName:e.name});}removePlugin(e){let t=this.getExecutionService();if(!t)return false;let r=t.removePlugin(e);return r&&this.logger.debug("Plugin removed",{pluginName:e}),r}getPlugin(e){let t=this.getExecutionService();if(t)return t.getPlugin(e)}getPlugins(){let e=this.getExecutionService();return e?e.getPlugins():[]}getPluginNames(){let e=this.getExecutionService();return !this.isReady()||!e?[]:e.getPlugins().map(t=>t.name)}};function Lt(i){if(!i.name)throw new m("Agent name is required",{component:"Robota"});if(!i.aiProviders||i.aiProviders.length===0)throw new m("At least one AI provider is required",{component:"Robota"});if(!i.defaultModel)throw new m("Default model configuration is required",{component:"Robota"});if(!i.defaultModel.provider||!i.defaultModel.model)throw new m("Default model must specify both provider and model",{component:"Robota"});let e=i.aiProviders.map(r=>r.name),t=e.filter((r,o)=>e.indexOf(r)!==o);if(t.length>0)throw new m(`Duplicate AI provider names: ${t.join(", ")}`,{component:"Robota",duplicates:t});if(!e.includes(i.defaultModel.provider))throw new m(`Default provider '${i.defaultModel.provider}' not found in AI providers list. Available: ${e.join(", ")}`,{component:"Robota",defaultProvider:i.defaultModel.provider,availableProviders:e})}var $e=class{constructor(e,t,r,o,s,n,a,d,u,l,g,c,p){this.logger=e;this.getAIProviders=t;this.getTools=r;this.getEventService=o;this.isReady=s;this.ensureReady=n;this.getConfig=a;this.setConfig=d;this.getConfigVersion=u;this.bumpConfigVersion=l;this.getConfigUpdatedAt=g;this.setConfigUpdatedAt=c;this.emitAgentEvent=p;}async updateTools(e){if(await this.ensureReady(),!Array.isArray(e))throw new m("updateTools: next must be an array of tools");this.getTools().getRegistry().clear();let r=[],o=this.getEventService();for(let a of e){o&&a.setEventService(o);let d=async(l,g)=>{if(!g)throw new Error("[ROBOTA] Missing ToolExecutionContext for tool execution");return (await a.execute(l,g)).data};this.getTools().addTool(a.schema,d);let u=a.schema.name;typeof u=="string"&&u.length>0&&r.push(u);}let s=this.getConfig();s.tools=e,this.setConfig(s);let n=this.bumpConfigVersion();return this.setConfigUpdatedAt(Date.now()),this.emitAgentEvent(b.CONFIG_UPDATED,{parameters:{tools:r,systemMessage:s.defaultModel.systemMessage,provider:s.defaultModel.provider,model:s.defaultModel.model,temperature:s.defaultModel.temperature,maxTokens:s.defaultModel.maxTokens},metadata:{version:n}}),{version:n}}async updateConfiguration(e){if(e.tools)return this.updateTools(e.tools);throw new m("updateConfiguration: only tools patch is supported at this time")}async getConfiguration(){await this.ensureReady();let t=this.getTools().getTools().map(r=>({name:r.name,parameters:(()=>{let s=r.parameters?.properties;return s&&typeof s=="object"?Object.keys(s):void 0})()}));return {version:this.getConfigVersion(),tools:t,updatedAt:this.getConfigUpdatedAt(),metadata:void 0}}setModel(e){if(!e.provider||!e.model)throw new m("Both provider and model are required",{component:"Robota"});if(!this.isReady())throw new m("Agent must be fully initialized before changing model configuration",{component:"Robota"});let t=this.getAIProviders(),r=t.getProviderNames();if(!r.includes(e.provider))throw new m(`AI Provider '${e.provider}' not found. Available: ${r.join(", ")}`,{component:"Robota",provider:e.provider,availableProviders:r});t.setCurrentProvider(e.provider,e.model);let o=this.getConfig();this.setConfig({...o,defaultModel:{...o.defaultModel,provider:e.provider,model:e.model,...e.temperature!==void 0&&{temperature:e.temperature},...e.maxTokens!==void 0&&{maxTokens:e.maxTokens},...e.topP!==void 0&&{topP:e.topP},...e.systemMessage!==void 0&&{systemMessage:e.systemMessage}}}),this.logger.debug("Model configuration updated",e);}getModel(){if(!this.isReady())throw new m("Agent must be fully initialized before getting model configuration",{component:"Robota"});let e=this.getAIProviders().getCurrentProvider();if(!e)throw new m("No provider is currently set",{component:"Robota"});let t=this.getConfig();return {provider:e.provider,model:e.model,...t.defaultModel.temperature!==void 0&&{temperature:t.defaultModel.temperature},...t.defaultModel.maxTokens!==void 0&&{maxTokens:t.defaultModel.maxTokens},...t.defaultModel.topP!==void 0&&{topP:t.defaultModel.topP},...t.defaultModel.systemMessage!==void 0&&{systemMessage:t.defaultModel.systemMessage}}}registerTool(e,t){if(t.hasTool(e.schema.name))throw new Error(`[STRICT-POLICY][EMITTER-CONTRACT] Duplicate tool registration attempted: ${e.schema.name}. Tool registration flow must provide a single authoritative registration path.`);let r=async(o,s)=>{if(!s)throw new Error("[ROBOTA] Missing ToolExecutionContext for tool execution");return (await e.execute(o,s)).data};t.addTool(e.schema,r),this.logger.debug("Tool registered",{toolName:e.schema.name});}};var W=class{build(e,t,r,o){let s=e.map(a=>({role:a.role,content:a.content})),n=JSON.stringify({messages:s,model:t,provider:r,temperature:o?.temperature,maxTokens:o?.maxTokens});return {hash:this.sha256(n),model:t,provider:r}}computeIntegrityHash(e){return this.sha256(e)}sha256(e){let t=new Dr("SHA-256","TEXT");return t.update(e),t.getHash("HEX")}};var me=class{cache=new Map;accessOrder=[];maxEntries;ttlMs;keyBuilder=new W;hits=0;misses=0;constructor(e){this.maxEntries=e.maxEntries,this.ttlMs=e.ttlMs;}get(e){let t=this.cache.get(e);if(!t){this.misses++;return}if(Date.now()-t.timestamp>this.ttlMs){this.cache.delete(e),this.removeFromAccessOrder(e),this.misses++;return}let r=this.keyBuilder.computeIntegrityHash(t.response);if(t.integrityHash!==r)throw this.cache.delete(e),this.removeFromAccessOrder(e),new Te(`Integrity check failed for cache entry ${e}`,{hash:e,expected:r,actual:t.integrityHash});return this.touchAccessOrder(e),this.hits++,t}set(e){let t=e.key.hash;!this.cache.has(t)&&this.cache.size>=this.maxEntries&&this.evictLRU(),this.cache.set(t,e),this.touchAccessOrder(t);}delete(e){return this.cache.has(e)?(this.cache.delete(e),this.removeFromAccessOrder(e),true):false}clear(){this.cache.clear(),this.accessOrder.length=0,this.hits=0,this.misses=0;}getStats(){let e=this.hits+this.misses;return {hits:this.hits,misses:this.misses,entries:this.cache.size,hitRate:e===0?0:this.hits/e}}touchAccessOrder(e){this.removeFromAccessOrder(e),this.accessOrder.push(e);}removeFromAccessOrder(e){let t=this.accessOrder.indexOf(e);t!==-1&&this.accessOrder.splice(t,1);}evictLRU(){let e=this.accessOrder.shift();e&&this.cache.delete(e);}};var pe=class{constructor(e,t){this.storage=e;this.keyBuilder=t;}lookup(e,t,r,o){let s=this.keyBuilder.build(e,t,r,o),n=this.storage.get(s.hash);return n?n.response:void 0}store(e,t,r,o,s){let n=this.keyBuilder.build(e,t,r,s);this.storage.set({key:n,response:o,timestamp:Date.now(),integrityHash:this.keyBuilder.computeIntegrityHash(o)});}getStats(){return this.storage.getStats()}};async function _t(i){let{config:e,aiProviders:t,tools:r,agentFactory:o,conversationHistory:s,moduleRegistry:n,eventEmitter:a,eventService:d,logger:u}=i;if(u.debug("Starting Robota initialization with independent managers"),await Promise.all([t.initialize(),r.initialize(),o.initialize()]),e.aiProviders)for(let c of e.aiProviders)t.addProvider(c.name,c);if(e.defaultModel&&t.setCurrentProvider(e.defaultModel.provider,e.defaultModel.model),e.modules){for(let c of e.modules)await n.registerModule(c,{autoInitialize:true,validateDependencies:true});u.debug("Modules registered and initialized",{moduleCount:e.modules.length,moduleNames:e.modules.map(c=>c.name)});}if(e.tools)for(let c of e.tools){c instanceof Oe&&d&&c.setEventService(d);let p=async(v,f)=>{if(!f)throw new Error("[ROBOTA] Missing ToolExecutionContext for tool execution");return (await c.execute(v,f)).data};r.addTool(c.schema,p),u.debug("Tool registered during initialization",{toolName:c.schema.name});}let l;if(e.cache?.enabled){let c=new me({maxEntries:e.cache.maxEntries,ttlMs:e.cache.ttlMs});l=new pe(c,new W);}let g=new Se(t,r,s,d,e.executionContext,l);if(e.plugins)for(let c of e.plugins)g.registerPlugin(c),c.subscribeToModuleEvents&&(await c.subscribeToModuleEvents(a),u.debug("Plugin subscribed to module events",{pluginName:c.name}));return u.debug("Robota initialization completed successfully with independent managers"),g}async function kt(i,e,t={}){try{i.emitAgentEvent(b.EXECUTION_START,{}),i.logger.debug("Starting Robota execution",{inputLength:e.length,conversationId:i.conversationId,sessionId:t.sessionId||"none",userId:t.userId||"none",hasMetadata:!!t.metadata});let r=i.getHistory(),o={...i.config},s=await i.getExecutionService().execute(e,r,o,{conversationId:i.conversationId,...t.sessionId&&{sessionId:t.sessionId},...t.userId&&{userId:t.userId},...t.metadata&&{metadata:t.metadata}});if(i.logger.debug("Robota execution completed",{success:s.success,duration:s.duration,tokensUsed:s.tokensUsed,toolsExecuted:s.toolsExecuted}),!s.success&&s.error)throw s.error;return i.emitAgentEvent(b.EXECUTION_COMPLETE,{}),s.response}catch(r){throw i.logger.error("Robota execution failed",{error:r instanceof Error?r.message:String(r),conversationId:i.conversationId}),i.emitAgentEvent(b.EXECUTION_ERROR,{error:r instanceof Error?r.message:String(r)}),r}}async function*Vt(i,e,t={}){try{i.emitAgentEvent(b.EXECUTION_START,{}),i.logger.debug("Starting Robota streaming execution",{inputLength:e.length,conversationId:i.conversationId,sessionId:t.sessionId||"none",userId:t.userId||"none",hasMetadata:!!t.metadata});let r=i.getHistory(),o={...i.config},s=i.getExecutionService().executeStream(e,r,o,{conversationId:i.conversationId,...t.sessionId&&{sessionId:t.sessionId},...t.userId&&{userId:t.userId},...t.metadata&&{metadata:t.metadata}});for await(let n of s)yield n.chunk;}catch(r){throw i.logger.error("Robota streaming execution failed",{error:r instanceof Error?r.message:String(r),conversationId:i.conversationId}),i.emitAgentEvent(b.EXECUTION_ERROR,{error:r instanceof Error?r.message:String(r)}),r}finally{i.emitAgentEvent(b.EXECUTION_COMPLETE,{});}}function Ht(i){let e=i.isFullyInitialized?i.aiProviders.getProviderNames():[],t=i.isFullyInitialized?i.aiProviders.getCurrentProvider():null,r=t?t.provider:null,o=i.isFullyInitialized?i.tools.getTools().map(l=>l.name):[],s=i.getPluginNames(),n=i.getModuleNames(),a=i.getHistory(),d=Date.now()-i.startTime,u={user:0,assistant:0,system:0,tool:0};for(let l of a)l.role in u&&u[l.role]++;return {name:i.name,version:i.version,conversationId:i.conversationId,providers:e,currentProvider:r,tools:o,plugins:s,modules:n,historyLength:a.length,historyStats:{userMessages:u.user,assistantMessages:u.assistant,systemMessages:u.system,toolMessages:u.tool},uptime:d}}async function $t(i){i.logger.debug("Destroying Robota instance",{name:i.name});try{if(i.isFullyInitialized&&i.moduleRegistry&&(await i.moduleRegistry.disposeAllModules(),i.logger.debug("All modules disposed")),i.executionService){let e=i.executionService.getPlugins();for(let t of e)t.unsubscribeFromModuleEvents&&i.eventEmitter&&await t.unsubscribeFromModuleEvents(i.eventEmitter);i.logger.debug("ExecutionService plugins cleaned up");}i.moduleRegistry&&(i.moduleRegistry.clearAllModules(),i.logger.debug("ModuleRegistry cleared")),i.eventEmitter&&(await i.eventEmitter.destroy(),i.logger.debug("EventEmitter disposed")),i.resetState(),i.logger.info("Robota instance destroyed successfully",{name:i.name});}catch(e){throw i.logger.error("Error during Robota destruction",{error:e instanceof Error?e.message:String(e)}),e}}var Ur=36,Lr=9,nt=class extends Ee{name;version="1.0.0";aiProviders;tools;agentFactory;conversationHistory;moduleRegistry;eventEmitter;executionService;eventService;agentEventService;config;conversationId;logger;initializationPromise;isFullyInitialized=false;startTime;configVersion=1;configUpdatedAt=Date.now();moduleManager;pluginManager;configManager;constructor(e){super(),this.name=e.name,this.config=e,this.conversationId=e.conversationId||`conv_${Date.now()}_${Math.random().toString(Ur).substr(2,Lr)}`,this.logger=C("Robota"),this.startTime=Date.now(),e.logging&&(e.logging.level&&je(e.logging.level),e.logging.enabled===false&&je("silent")),Lt(e),this.aiProviders=new Ue,this.tools=new Le,this.agentFactory=new ce,this.conversationHistory=new ge,this.eventEmitter=new ae({enabled:true,events:[E.MODULE_INITIALIZE_START,E.MODULE_INITIALIZE_COMPLETE,E.MODULE_INITIALIZE_ERROR,E.MODULE_EXECUTION_START,E.MODULE_EXECUTION_COMPLETE,E.MODULE_EXECUTION_ERROR,E.MODULE_DISPOSE_START,E.MODULE_DISPOSE_COMPLETE,E.MODULE_DISPOSE_ERROR]}),this.moduleRegistry=new De(this.eventEmitter),this.eventService=e.eventService||Pe,this.agentEventService=$(this.eventService,{ownerType:"agent",ownerId:this.conversationId,ownerPath:this.buildOwnerPath(this.config.executionContext)}),this.initDelegates(),this.emitCreatedEvent();}initDelegates(){this.moduleManager=new Ve(this.name,this.moduleRegistry,this.logger,()=>this.isFullyInitialized,()=>this.ensureFullyInitialized()),this.pluginManager=new He(this.logger,()=>this.isFullyInitialized,()=>this.executionService),this.configManager=new $e(this.logger,()=>this.aiProviders,()=>this.tools,()=>this.eventService,()=>this.isFullyInitialized,()=>this.ensureFullyInitialized(),()=>this.config,e=>{this.config=e;},()=>this.configVersion,()=>++this.configVersion,()=>this.configUpdatedAt,e=>{this.configUpdatedAt=e;},(e,t)=>{this.emitAgentEvent(e,t);});}emitCreatedEvent(){let e=Array.isArray(this.config.tools)?this.config.tools.map(t=>{let r=t?.schema?.name;if(typeof r=="string"&&r.length>0)return r;let o=t?.name;return typeof o=="string"&&o.length>0?o:""}).filter(t=>typeof t=="string"&&t.length>0):[];this.emitAgentEvent(b.CREATED,{parameters:{tools:e,systemMessage:this.config.defaultModel.systemMessage,provider:this.config.defaultModel.provider,model:this.config.defaultModel.model,temperature:this.config.defaultModel.temperature,maxTokens:this.config.defaultModel.maxTokens}});}async run(e,t={}){return await this.ensureFullyInitialized(),kt(this.executionDeps(),e,t)}async*runStream(e,t={}){await this.ensureFullyInitialized(),yield*Vt(this.executionDeps(),e,t);}executionDeps(){return {conversationId:this.conversationId,config:this.config,logger:this.logger,getHistory:()=>this.getHistory(),getExecutionService:()=>this.executionService,emitAgentEvent:(e,t)=>this.emitAgentEvent(e,t)}}getHistory(){return this.conversationHistory.getConversationSession(this.conversationId).getMessages().map(t=>({role:t.role,content:t.content,timestamp:t.timestamp,metadata:t.metadata,...t.role==="assistant"&&"toolCalls"in t?{toolCalls:t.toolCalls}:{},...t.role==="tool"&&"toolCallId"in t?{toolCallId:t.toolCallId}:{}}))}clearHistory(){this.conversationHistory.getConversationSession(this.conversationId).clear();}async updateTools(e){return this.configManager.updateTools(e)}async updateConfiguration(e){return this.configManager.updateConfiguration(e)}async getConfiguration(){return this.configManager.getConfiguration()}setModel(e){this.configManager.setModel(e);}getModel(){return this.configManager.getModel()}registerTool(e){this.configManager.registerTool(e,this.tools);}unregisterTool(e){this.tools.removeTool(e);}getConfig(){return {...this.config}}addPlugin(e){this.pluginManager.addPlugin(e);}removePlugin(e){return this.pluginManager.removePlugin(e)}getPlugin(e){return this.pluginManager.getPlugin(e)}getPlugins(){return this.pluginManager.getPlugins()}getPluginNames(){return this.pluginManager.getPluginNames()}async registerModule(e,t){return this.moduleManager.registerModule(e,t)}async unregisterModule(e){return this.moduleManager.unregisterModule(e)}getModule(e){return this.moduleManager.getModule(e)}getModulesByType(e){return this.moduleManager.getModulesByType(e)}getModules(){return this.moduleManager.getModules()}getModuleNames(){return this.moduleManager.getModuleNames()}hasModule(e){return this.moduleManager.hasModule(e)}async executeModule(e,t){return this.moduleManager.executeModule(e,t)}getModuleStats(e){return this.moduleManager.getModuleStats(e)}getStats(){return Ht({name:this.name,version:this.version,conversationId:this.conversationId,startTime:this.startTime,isFullyInitialized:this.isFullyInitialized,aiProviders:this.aiProviders,tools:this.tools,getPluginNames:()=>this.getPluginNames(),getModuleNames:()=>this.getModuleNames(),getHistory:()=>this.getHistory()})}async destroy(){await $t({name:this.name,isFullyInitialized:this.isFullyInitialized,moduleRegistry:this.moduleRegistry,eventEmitter:this.eventEmitter,executionService:this.executionService,logger:this.logger,resetState:()=>{this.isFullyInitialized=false,this.initializationPromise=void 0;}});}async initialize(){await this.ensureFullyInitialized();}async ensureFullyInitialized(){this.isFullyInitialized||(this.initializationPromise||(this.initializationPromise=this.doAsyncInit()),await this.initializationPromise);}async doAsyncInit(){try{this.executionService=await _t({config:this.config,aiProviders:this.aiProviders,tools:this.tools,agentFactory:this.agentFactory,conversationHistory:this.conversationHistory,moduleRegistry:this.moduleRegistry,eventEmitter:this.eventEmitter,eventService:this.eventService,logger:this.logger}),this.isFullyInitialized=!0;}catch(e){throw this.logger.error("Robota initialization failed",{error:e instanceof Error?e.message:String(e)}),e}}emitAgentEvent(e,t){J(this.agentEventService)||this.agentEventService.emit(e,{timestamp:new Date,...t},{ownerType:B,ownerId:this.conversationId,ownerPath:this.buildOwnerPath(this.config.executionContext)});}buildOwnerPath(e){return [...e?.ownerPath?.length?e.ownerPath.map(r=>({...r})):[],{type:"agent",id:this.conversationId}]}};var at=class{store;listener;sequenceId=0;constructor(e,t){this.store=e,this.listener=(r,o,s)=>{if(!s?.ownerPath?.length)throw new Error(`[HISTORY-MODULE] Missing ownerPath for ${r}`);let n={eventName:r,sequenceId:this.nextSequenceId(),timestamp:o.timestamp,eventData:o,context:s};this.store.append(n);},t.subscribe(this.listener);}append(e){this.store.append(e);}read(e,t){return this.store.read(e,t)}readStream(e,t){return this.store.readStream(e,t)}getSnapshot(){return this.store.getSnapshot?.()}detach(e){e.unsubscribe(this.listener);}nextSequenceId(){return this.sequenceId+=1,this.sequenceId}};var _r=36,kr=9;function N(i){if(!(!i||typeof i!="object"||Array.isArray(i)||i instanceof Date))return i}function zt(i){return typeof i=="string"?i.length:0}var ze=class{config;methodConfigs=new Map;constructor(e){this.config=e;}configureMethod(e,t){return this.methodConfigs.set(e,t),this}configureStandardMethods(){return this.config.sourceType==="agent"&&(this.configureMethod("run",{startEvent:b.EXECUTION_START,completeEvent:b.EXECUTION_COMPLETE,errorEvent:b.EXECUTION_ERROR,extractMetadata:(e,t,r)=>({inputLength:zt(r[0]),conversationId:e.conversationId,options:N(r[1])||{}}),extractResult:e=>({response:e})}),this.configureMethod("runStream",{startEvent:b.EXECUTION_START,completeEvent:b.EXECUTION_COMPLETE,errorEvent:b.EXECUTION_ERROR,extractMetadata:(e,t,r)=>({inputLength:zt(r[0]),conversationId:e.conversationId,streaming:true,options:N(r[1])||{}})})),this.config.sourceType==="team"&&(this.configureMethod("assignTask",{startEvent:Ce.ASSIGNED,completeEvent:Ce.COMPLETED,errorEvent:x.ERROR,extractMetadata:(e,t,r)=>{let o=N(r[0]);return {taskDescription:o?.jobDescription,agentTemplate:o?.agentTemplate,priority:o?.priority,allowFurtherDelegation:o?.allowFurtherDelegation}},extractResult:e=>({result:N(e)?.result,agentId:N(e)?.agentId,metadata:N(e)?.metadata})}),this.configureMethod("execute",{startEvent:x.START,completeEvent:x.COMPLETE,errorEvent:x.ERROR,extractMetadata:(e,t,r)=>({taskDescription:r[0],teamMode:true}),extractResult:e=>({response:e})})),this.config.sourceType==="tool"&&this.configureMethod("execute",{startEvent:O.CALL_START,completeEvent:O.CALL_COMPLETE,errorEvent:O.CALL_ERROR,extractMetadata:(e,t,r)=>({toolName:N(e.schema)?.name||e.constructor.name,parameters:r[0],parametersCount:N(r[0])?Object.keys(N(r[0])||{}).length:0,context:r[1]}),extractResult:e=>({result:typeof N(e)?.data=="string"?N(e)?.data||"":JSON.stringify(N(e)?.data),success:N(e)?.success})}),this}wrap(e){return new Proxy(e,{get:(t,r,o)=>{let s=Reflect.get(t,r,o);if(typeof r!="string")return s;let n=r;if(typeof s=="function"&&this.methodConfigs.has(n)){let a=this.methodConfigs.get(n);return async(...d)=>{let u=Date.now(),l=this.generateExecutionId(),g=t;try{if(a.startEvent){let v=a.extractMetadata?.(g,n,d)||{};this.emitEvent(a.startEvent,{timestamp:new Date,metadata:{...v,executionId:l,methodName:n,phase:"start"}});}let c=await s.apply(t,d),p=Date.now()-u;if(a.completeEvent){let v=a.extractResult?.(c)||{},f=a.extractMetadata?.(g,n,d)||{};this.emitEvent(a.completeEvent,{timestamp:new Date,...v,metadata:{...f,executionId:l,methodName:n,duration:p,phase:"complete",success:!0}});}return c}catch(c){let p=Date.now()-u;if(a.errorEvent){let v=a.extractMetadata?.(g,n,d)||{};this.emitEvent(a.errorEvent,{timestamp:new Date,error:c instanceof Error?c.message:String(c),metadata:{...v,executionId:l,methodName:n,duration:p,phase:"error",errorName:c instanceof Error?c.name:"UnknownError",success:false}});}throw c}}}return s}})}emitEvent(e,t){let r={emitterSourceType:this.config.sourceType,emitterSourceId:this.config.sourceId},o={timestamp:new Date,...t.metadata?{metadata:{...r,...t.metadata}}:{metadata:r},...t};this.config.eventService.emit(e,o);}generateExecutionId(){return `${this.config.sourceType}-${this.config.sourceId}-${Date.now()}-${Math.random().toString(_r).substr(2,kr)}`}};function Gt(i,e){let t=new ze(e);return t.configureStandardMethods(),t.wrap(i)}function Vr(i,e,t){return function(r){return Gt(r,{eventService:i,sourceType:e,sourceId:t})}}var Bt={safe:"plan",moderate:"default",full:"acceptEdits"};var Ge={plan:{Bash:"deny",Read:"auto",Write:"deny",Edit:"deny",Glob:"auto",Grep:"auto"},default:{Bash:"approve",Read:"auto",Write:"approve",Edit:"approve",Glob:"auto",Grep:"auto"},acceptEdits:{Bash:"approve",Read:"auto",Write:"auto",Edit:"auto",Glob:"auto",Grep:"auto"},bypassPermissions:{Bash:"auto",Read:"auto",Write:"auto",Edit:"auto",Glob:"auto",Grep:"auto"}},Be={plan:"deny",default:"approve",acceptEdits:"approve",bypassPermissions:"auto"};function Hr(i){let e=i.replace(/[.+^${}()|[\]\\]/g,"\\$&").replace(/\*\*/g,".+").replace(/\*/g,".*");return new RegExp(`^${e}$`)}function $r(i){let e=i.indexOf("(");if(e===-1)return {toolName:i.trim(),argPattern:void 0};let t=i.slice(0,e).trim(),r=i.slice(e+1,i.lastIndexOf(")")).trim();return {toolName:t,argPattern:r}}function zr(i,e){switch(i){case "Bash":return typeof e.command=="string"?e.command:void 0;case "Read":case "Write":case "Edit":return typeof e.filePath=="string"?e.filePath:void 0;case "Glob":case "Grep":return typeof e.pattern=="string"?e.pattern:void 0;default:return}}function Xt(i,e,t){let r=$r(t);if(r.toolName!==i)return false;if(r.argPattern===void 0)return true;let o=zr(i,e);return o===void 0?false:Hr(r.argPattern).test(o)}function Ft(i,e,t,r={}){let{allow:o=[],deny:s=[]}=r;for(let d of s)if(Xt(i,e,d))return "deny";for(let d of o)if(Xt(i,e,d))return "auto";let a=Ge[t][i];return a!==void 0?a:Be[t]}var Br=1e4;function Xr(i,e){return new Promise(t=>{let r=[],o=[],s=false,n=spawn("sh",["-c",i],{cwd:process.cwd(),env:{...process.env}});n.stdout.on("data",d=>r.push(d)),n.stderr.on("data",d=>o.push(d)),n.stdin.write(e),n.stdin.end();let a=setTimeout(()=>{s||(s=true,n.kill("SIGTERM"),t({exitCode:1,stdout:"",stderr:"Hook timed out"}));},Br);n.on("close",d=>{s||(s=true,clearTimeout(a),t({exitCode:d??1,stdout:Buffer.concat(r).toString("utf8"),stderr:Buffer.concat(o).toString("utf8")}));}),n.on("error",d=>{s||(s=true,clearTimeout(a),t({exitCode:1,stdout:"",stderr:d.message}));});})}function Fr(i,e){if(!i.matcher)return true;if(!e)return false;try{return new RegExp(i.matcher).test(e)}catch{return i.matcher===e}}async function qt(i,e,t){if(!i)return {blocked:false};let r=i[e];if(!r||r.length===0)return {blocked:false};let o=JSON.stringify(t);for(let s of r)if(Fr(s,t.tool_name))for(let n of s.hooks){if(n.type!=="command")continue;let a=await Xr(n.command,o);if(a.exitCode===2)return {blocked:true,reason:a.stderr||"Blocked by hook"}}return {blocked:false}}export{b as AGENT_EVENTS,B as AGENT_EVENT_PREFIX,We as AbstractAIProvider,Ee as AbstractAgent,se as AbstractExecutor,Y as AbstractManager,Ae as AbstractPlugin,Oe as AbstractTool,ce as AgentFactory,de as AgentTemplates,gt as AuthenticationError,Te as CacheIntegrityError,vt as CircuitBreakerOpenError,m as ConfigurationError,qe as ConsoleLogger,ge as ConversationHistory,Z as ConversationSession,E as EVENT_EMITTER_EVENTS,x as EXECUTION_EVENTS,U as EXECUTION_EVENT_PREFIX,ht as ErrorUtils,ae as EventEmitterPlugin,at as EventHistoryModule,ze as ExecutionProxy,ne as InMemoryEventEmitterMetrics,Qe as LocalExecutor,Ge as MODE_POLICY,bt as MessageConverter,ft as ModelNotAvailableError,pt as NetworkError,Ke as PluginCategory,j as PluginError,ie as PluginPriority,Ye as ProviderError,mt as RateLimitError,nt as Robota,R as RobotaError,_ as SilentLogger,Et as StorageError,O as TOOL_EVENTS,X as TOOL_EVENT_PREFIX,Bt as TRUST_TO_MODE,D as ToolExecutionError,ee as TypeUtils,Be as UNKNOWN_TOOL_FALLBACK,I as ValidationError,G as Validator,Gt as createExecutionProxy,C as createLogger,Ft as evaluatePermission,ro as getGlobalLogLevel,Wt as getToolEstimatedDuration,Yt as getToolExecutionSteps,he as isAssistantMessage,dt as isImageGenerationProvider,ve as isProgressReportingTool,Zt as isSystemMessage,Qt as isToolMessage,Kt as isUserMessage,ct as isVideoGenerationProvider,y as logger,qt as runHooks,je as setGlobalLogLevel,Jt as setToolProgressCallback,Pi as startPeriodicTask,Ci as stopPeriodicTask,Ze as validateAgentConfig,Mi as validateApiKey,xi as validateModelName,yi as validateProviderName,Ti as validateUserInput,Vr as withEventEmission};
4
+ `),n.beginAssistant();let{wrappedOnTextDelta:_,wrappedOnProviderNativeRawPayload:v}=Mt(a,n,i,p),y=await Nt(m,o,s,f,a,n,p,i,u,_,v);if(y===null)return!0;let{assistantResponse:b,assistantToolCalls:x}=jt(y,i,a.conversationId,p,u);await Y(l,`afterProviderCall`,{messages:m,responseMessage:y},u);let S=typeof b.content==`string`&&b.content.trim().length>0;if(x.length===0&&!S)return u.warn(`[ROUND] Provider returned empty assistant response without tool calls`,{executionId:i,conversationId:a.conversationId,round:p}),n.discardPending(),!0;let C=Rt(b),w=C?.inputTokens??0;w>0&&(e.cumulativeInputTokens=w),b.content&&!n.getPendingContent()&&n.appendStreaming(b.content);for(let e of x)n.appendToolCall(e);let T=a.signal?.aborted?`interrupted`:`complete`;n.commitAssistant(T,{round:p,...C??{}});let E=n.getMessages().at(-1);if(a.onExecutionEvent?.(`assistant_message_committed`,{executionId:i,conversationId:a.conversationId,round:p,message:b}),E&&a.onExecutionEvent?.(`history_mutation`,{executionId:i,conversationId:a.conversationId,round:p,mutation:`append_message`,index:n.getMessages().length-1,message:E}),e.runningAssistantCount++,e.lastTrackedAssistantMessage=b,x.length===0)return u.debug(`[AGENT-FLOW-CONTROL] Round ${p} completed - no tool calls, execution finished for agent ${a.conversationId}`),d.emitAssistantMessageComplete(b,i,p,r,h,g),!0;let D=await Lt(x,n,r,i,p,h,g,e,c,o,a.signal,a.onExecutionEvent,a.maxSameToolInputs??o.maxSameToolInputs);if(D.contextOverflowed&&u.warn(`[ROUND] Tool results partially skipped due to context overflow — continuing to let AI respond`,{added:D.addedCount,skipped:D.skippedCount,round:p}),D.unknownToolFailureCount>0?e.consecutiveUnknownToolFailureRounds+=1:e.consecutiveUnknownToolFailureRounds=0,e.consecutiveUnknownToolFailureRounds>=2){let t=[...new Set(D.unknownToolNames)].sort();return e.forcedSummaryInstruction=[`The model repeatedly requested unavailable tool(s): ${t.join(`, `)}.`,`Those tool calls were not executed because they are not registered tools.`,`Respond to the user now with that reason and use the available tool results already in the conversation history.`].join(` `),u.warn(`[ROUND] Stopping repeated unavailable tool-call loop`,{unavailableTools:t,consecutiveRounds:e.consecutiveUnknownToolFailureRounds,round:p}),!0}return u.debug(`Round ${p} completed - continuing to next round for agent ${a.conversationId}`),!1}function Vt(e,t,n){let r=e.getCurrentProvider(),i=r?e.getProvider(r.provider):null;if(!r||!r.provider||!i)throw Error(`[EXECUTION] Provider is required`);let a=t.getTools();return{provider:i,currentInfo:r,aiProviderInfo:{providerName:r.provider,model:n.defaultModel.model,temperature:n.defaultModel.temperature,maxTokens:n.defaultModel.maxTokens},toolsInfo:a.map(e=>{let t=e.parameters?.properties;if(!e.description||e.description.length===0)throw Error(`[EXECUTION] Tool "${e.name}" is missing description`);return{name:e.name,description:e.description,parameters:t&&typeof t==`object`?Object.keys(t):[]}}),availableTools:a}}function Ht(e){if(!e.currentInfo)throw Error(`No AI provider configured`);if(!e.provider)throw Error(`AI provider '${e.currentInfo.provider}' not found`);if(typeof e.provider.chat!=`function`)throw Error(`Provider must have chat method to support execution`)}function Ut(e,t,n,r,i){let a=e.getConversationStore(t);if(a.getMessageCount()===0&&n.length>0){for(let e of n)if(e.role===`user`)a.addUserMessage(e.content,e.metadata,e.parts);else if(e.role===`assistant`)a.addAssistantMessage(e.content,e.toolCalls,e.metadata,e.parts);else if(e.role===`system`)a.addSystemMessage(e.content,e.metadata,e.parts);else if(e.role===`tool`){let t=e.metadata?.toolName;if(typeof t!=`string`||t.length===0)throw Error(`[EXECUTION] Tool message missing toolName metadata`);a.addToolMessageWithId(e.content,e.toolCallId,t,e.metadata,e.parts)}}return r.systemMessage&&a.addSystemMessage(r.systemMessage,{executionId:i}),a}function Wt(e,t,n,r){let i=e.getMessages(),a=i.filter(e=>e.role===`assistant`&&typeof e.content==`string`&&e.content.length>0).pop(),o=a?a.content:`No response received. The context window may be full.`,s=Date.now()-n.getTime();return{response:o,messages:i.map(e=>{if(typeof e.content!=`string`)throw Error(`[EXECUTION] Message content is required`);return{role:e.role,content:e.content,timestamp:e.timestamp,metadata:e.metadata,...e.role===`assistant`&&`toolCalls`in e?{toolCalls:e.toolCalls}:{},...e.role===`tool`&&`toolCallId`in e?{toolCallId:e.toolCallId}:{}}}),executionId:t,duration:s,tokensUsed:i.filter(e=>e.metadata?.usage).reduce((e,t)=>{let n=t.metadata?.usage;if(n&&typeof n==`object`&&`totalTokens`in n){let t=Number(n.totalTokens);if(Number.isNaN(t))throw Error(`[EXECUTION] totalTokens must be a number`);return e+t}return e},0),toolsExecuted:r,success:!!a}}async function Gt(e,t,n,r,i,a,o,s){let c=Date.now()-n.getTime();await Y(a,`onError`,{error:e instanceof Error?e:Error(String(e)),executionContext:Yt(t)},o),o.error(`Execution pipeline failed`,{executionId:i,conversationId:r,duration:c,error:e instanceof Error?e.message:String(e)}),s.emitExecution(F.ERROR,{error:e instanceof Error?e.message:String(e),metadata:{method:`execute`,success:!1,duration:c}},r,i)}function Kt(){return`exec_${Date.now()}_${Math.random().toString(36).substr(2,9)}`}function qt(e,t){if(!e?.conversationId||e.conversationId.length===0)throw Error(`[EXECUTION] conversationId is required for ${t}`);return e.conversationId}function Jt(e,t,n,r,i,a){return{messages:e,config:t,startTime:n,executionId:r,conversationId:i,...a?.sessionId&&{sessionId:a.sessionId},...a?.userId&&{userId:a.userId},...a?.metadata&&{metadata:a.metadata},...a?.signal&&{signal:a.signal},...a?.onTextDelta&&{onTextDelta:a.onTextDelta},...a?.onExecutionEvent&&{onExecutionEvent:a.onExecutionEvent},...a?.maxExecutionRounds!==void 0&&{maxExecutionRounds:a.maxExecutionRounds},...a?.maxSameToolInputs!==void 0&&{maxSameToolInputs:a.maxSameToolInputs}}}function Yt(e){let t={conversationId:qt(e,`plugin-context`),executionId:e.executionId,startTime:e.startTime.toISOString(),messageCount:e.messages.length};return e.sessionId&&(t.sessionId=e.sessionId),e.userId&&(t.userId=e.userId),t}function Xt(e,t){let n=t.maxExecutionRounds??e.maxExecutionRounds;if(n===void 0)return 10;if(!Number.isInteger(n)||n<0)throw Error(`[EXECUTION] maxExecutionRounds must be a non-negative integer`);return n}function Zt(e,t){return t===0||e<t}async function Qt(e,t,n,r,i,a,o,s,c){let l=Xt(i,r);for(;Zt(o.currentRound,l)&&!(s?.aborted||(o.currentRound++,await Bt(o,l,e,t,n,r,i,a,c))||s?.aborted););let u=e.getMessages(),d=u.length>0?u[u.length-1]:void 0;d?.role===`assistant`&&typeof d.content==`string`&&d.content.length>0&&(!(`toolCalls`in d)||d.toolCalls.length===0)||await $t(e,a,i,n,o,t,r,c.logger,l)}async function $t(t,n,r,i,a,o,s,c,l=10){c.warn(`No final text response — forcing summary call`,{maxRounds:l===0?`unlimited`:l,currentRound:a.currentRound,conversationId:o});try{let i=a.forcedSummaryInstruction??`Tool round limit reached. Provide your response based on the information gathered so far. If results are incomplete, let the user know what was covered and what remains — the user can request additional analysis in a follow-up message.`;t.addUserMessage(i);let o=t.getMessages(),c=r.systemMessage??``,l=o.some(e=>e.role===`system`&&e.content===c),u=c&&!l?[{id:e(),role:`system`,content:c,state:`complete`,timestamp:new Date},...o]:o,d={model:n.aiProviderInfo.model};s.onTextDelta&&(d.onTextDelta=s.onTextDelta);let f=await n.provider.chat(u,d),p=t.getMessages();if(p.findIndex(e=>e.role===`user`&&e.content===i)!==-1){let e=p.filter(e=>!(e.role===`user`&&e.content===i));t.clear();for(let n of e)t.addMessage(n)}let m=typeof f.content==`string`?f.content:``;m?t.addAssistantMessage(m,[],f.metadata):t.addAssistantMessage(`Maximum rounds reached. Partial results available in conversation history.`)}catch(e){c.warn(`Forced summary call failed`,{error:e instanceof Error?e.message:String(e)})}}async function en(e,t,n,r,i,a,o,s,c,l,u){let d={...Wt(t,n,r,i.toolsExecuted),interrupted:o};return await Y(c,`afterRun`,{input:e,response:d.response,metadata:s?.metadata},l),l.debug(`Execution pipeline completed successfully`,{executionId:n,conversationId:a,duration:d.duration,tokensUsed:d.tokensUsed,toolsExecuted:d.toolsExecuted.length,rounds:i.currentRound}),u.emitExecution(F.COMPLETE,{result:{success:!0,data:d.response.substring(0,100)+`...`},metadata:{method:`execute`,success:!0,duration:d.duration,tokensUsed:d.tokensUsed,toolsExecuted:d.toolsExecuted}},a,n),d}async function*tn(e,t,n,r,i,a,o){o.debug(`[EXECUTION-SERVICE-STREAM] Executing tools:`,{tools:e.map(e=>e.function.name)});let s=n,c=`thinking_${s}_${Date.now()}_${r}`,l=[...a.buildExecutionOwnerContext(s,r).ownerPath,{type:`thinking`,id:c}],u={requests:i.createExecutionRequestsWithContext(e,{ownerPathBase:l}),mode:`parallel`,maxConcurrency:5,continueOnError:!0},d=await i.executeTools(u);for(let n of e){if(!n.id)throw Error(`[EXECUTION] Tool call missing id in streaming mode`);if(!n.function?.name||n.function.name.length===0)throw Error(`[EXECUTION] Tool call "${n.id}" missing function name in streaming mode`);let e=d.results.find(e=>e.executionId===n.id),i=d.errors.find(e=>fe(e)&&e.executionId===n.id),a,o={executionId:r};if(e&&e.success){if(e.result===void 0)throw Error(`[EXECUTION] Tool result missing result payload in streaming mode`);a=typeof e.result==`string`?e.result:JSON.stringify(e.result),o.success=!0,e.toolName&&(o.toolName=e.toolName),yield{chunk:`\n[Tool: ${n.function.name} executed successfully]`,isComplete:!1}}else if(i){let e=i,t=e.error?.message?e.error.message:e.message?e.message:``;if(!t||t.length===0)throw Error(`[EXECUTION] Tool execution error missing message in streaming mode`);a=`Error: ${t}`,o.success=!1,o.error=t,e.toolName&&(o.toolName=e.toolName),yield{chunk:`\n[Tool: ${n.function.name} failed: ${t}]`,isComplete:!1}}else throw Error(`[EXECUTION] Missing tool result for tool call "${n.id}" in streaming mode`);t.addToolMessageWithId(a,n.id,n.function.name,o)}let f=e.map(e=>{if(!e.id||e.id.length===0)throw Error(`[EXECUTION] Tool call missing id for streaming tool results ready payload`);return e.id});if(f.length===0)throw Error(`[EXECUTION] Tool results ready requires toolCallIds in streaming mode`);a.emitExecution(F.TOOL_RESULTS_READY,{parameters:{toolCallIds:f,round:1},metadata:{toolsExecuted:d.results.map(e=>{if(!e.toolName||e.toolName.length===0)throw Error(`[EXECUTION] Tool result missing toolName`);return e.toolName}),round:1}},n,r)}async function*nn(e,t,n,r,i){let{aiProviders:a,tools:o,conversationHistory:s,toolExecutionService:c,plugins:l,logger:u,eventEmitter:d}=i;u.debug(`ExecutionService.executeStream called`);let f=i.generateExecutionId(),p=Date.now();if(!r?.conversationId||r.conversationId.length===0)throw Error(`[EXECUTION] conversationId is required for streaming`);let m=r.conversationId;d.prepareOwnerPathBases(m);try{let t=s.getConversationStore(r.conversationId);e&&t.addUserMessage(e,{executionId:f}),await Y(l,`beforeRun`,{input:e,...r?.metadata?{metadata:r.metadata}:{}},u);let i=a.getCurrentProvider();if(!i)throw Error(`No AI provider configured`);let p=a.getProvider(i.provider);if(!p)throw Error(`AI provider '${i.provider}' not found`);if(typeof p.chatStream!=`function`)throw Error(`Provider must have chatStream method to support streaming execution`);u.debug(`ExecutionService calling provider.chatStream`);let h=t.getMessages(),g=Array.isArray(n.tools)?n.tools.length:void 0;u.debug(`[EXECUTION-SERVICE] config.tools:`,{length:g});let _=o.getTools(),v=Array.isArray(_)?_.length:void 0;u.debug(`[EXECUTION-SERVICE] this.tools.getTools():`,{length:v}),u.debug(`[EXECUTION-SERVICE] config.tools exists:`,{exists:!!n.tools}),u.debug(`[EXECUTION-SERVICE] config.tools.length > 0:`,{hasTools:n.tools&&n.tools.length>0});let y={model:n.defaultModel.model,...n.tools&&n.tools.length>0&&{tools:o.getTools()},...n.responseFormat?.type?{responseFormat:{type:n.responseFormat.type}}:{}};u.debug(`[EXECUTION-SERVICE] Final chatOptions has tools:`,{hasTools:!!y.tools});let b=Array.isArray(y.tools)?y.tools.length:void 0;u.debug(`[EXECUTION-SERVICE] Final chatOptions.tools length:`,{length:b});let x=p.chatStream;if(!x)throw Error(`Provider does not support streaming`);let S=x.call(p,h,y),C=``,w=[],T=-1;for await(let e of S)if(e.content&&(C+=e.content,yield{chunk:e.content,isComplete:!1}),e.role===`assistant`){let t=e;if(Array.isArray(t.toolCalls)&&t.toolCalls.length>0){for(let e of t.toolCalls)if(e.id&&e.id!==``){if(!e.type||e.type.length===0)throw Error(`[EXECUTION] Tool call "${e.id}" missing type in stream`);if(!e.function?.name||e.function.name.length===0)throw Error(`[EXECUTION] Tool call "${e.id}" missing function name in stream`);if(typeof e.function.arguments!=`string`)throw Error(`[EXECUTION] Tool call "${e.id}" missing arguments in stream`);T=w.length,w.push({id:e.id,type:e.type,function:{name:e.function.name,arguments:e.function.arguments}}),u.debug(`[TOOL-STREAM] New tool call started: ${e.id} (${e.function?.name})`)}else if(T>=0){let t=typeof e.function?.name==`string`&&e.function.name.length>0,n=typeof e.function?.arguments==`string`&&e.function.arguments.length>0;if(!t&&!n)throw Error(`[EXECUTION] Tool call fragment missing name/arguments for ${w[T].id}`);t&&(w[T].function.name+=e.function.name),n&&(w[T].function.arguments+=e.function.arguments);let r=n?e.function.arguments:e.function.name;u.debug(`[TOOL-STREAM] Adding fragment to tool ${w[T].id}: "${r}"`)}}}if(u.debug(`[EXECUTION-SERVICE-STREAM] Stream completed, toolCalls detected:`,{count:w.length}),typeof C!=`string`)throw Error(`[EXECUTION] Streaming response content is required`);t.addAssistantMessage(C,w,{executionId:f}),w.length>0&&(yield*tn(w,t,m,f,c,d,u)),await Y(l,`afterRun`,{input:e,response:C,...r?.metadata?{metadata:r.metadata}:{}},u),yield{chunk:``,isComplete:!0}}catch(t){throw u.error(`ExecutionService streaming execution failed`,{error:t instanceof Error?t.message:String(t),executionTime:Date.now()-p}),await Y(l,`onError`,{input:e,error:t instanceof Error?t:Error(String(t)),...r?.metadata?{metadata:r.metadata}:{}},u),t}finally{d.resetOwnerPathBases()}}var rn=class{toolExecutionService;aiProviders;tools;conversationHistory;plugins=[];logger;eventEmitter;cacheService;constructor(e,t,n,r,i,a){if(this.toolExecutionService=new Qe(t),this.aiProviders=e,this.tools=t,this.conversationHistory=n,this.plugins=[],this.logger=j(`ExecutionService`),!r)throw Error(`[EXECUTION] EventService is required`);this.eventEmitter=new at(r,this.logger,i),this.cacheService=a}registerPlugin(e){let t=e.priority??0,n=this.plugins.findIndex(e=>(e.priority??0)<t);n===-1?this.plugins.push(e):this.plugins.splice(n,0,e),this.logger.debug(`Plugin registered`,{pluginName:e.name,priority:t})}removePlugin(e){let t=this.plugins.findIndex(t=>t.name===e);return t===-1?!1:(this.plugins.splice(t,1),this.logger.debug(`Plugin removed`,{pluginName:e}),!0)}getPlugin(e){return this.plugins.find(t=>t.name===e)}getPlugins(){return[...this.plugins]}async execute(e,t,n,r){let i=Kt(),a=new Date,o=qt(r,`execute`),s=Jt(t,n,a,i,o,r);this.eventEmitter.prepareOwnerPathBases(o),this.logger.debug(`Starting execution pipeline`,{executionId:i,conversationId:o,messageCount:t.length,hasContext:!!r});let c=Vt(this.aiProviders,this.tools,n);this.eventEmitter.emitExecutionStartEvent(e,n,t,c,o,i);let l=Ut(this.conversationHistory,o,t,n,i);try{let t=l.getMessages().length;l.addUserMessage(e,{executionId:i});let u=l.getMessages()[t];u&&s.onExecutionEvent?.(`history_mutation`,{executionId:i,conversationId:o,mutation:`append_message`,index:t,message:u}),this.eventEmitter.emitUserMessageEvent(e,o,i),await Y(this.plugins,`beforeRun`,{input:e,...r?.metadata?{metadata:r.metadata}:{}},this.logger),Ht(c);let d={toolsExecuted:[],currentRound:0,runningAssistantCount:0,lastTrackedAssistantMessage:void 0,cumulativeInputTokens:0,consecutiveUnknownToolFailureRounds:0,sameToolInputCounts:new Map};for(let e of l.getMessages())e.role===`assistant`&&(d.runningAssistantCount++,d.lastTrackedAssistantMessage=e);return await Qt(l,o,i,s,n,c,d,r?.signal,{toolExecutionService:this.toolExecutionService,plugins:this.plugins,logger:this.logger,eventEmitter:this.eventEmitter,cacheService:this.cacheService}),en(e,l,i,a,d,o,r?.signal?.aborted??!1,r,this.plugins,this.logger,this.eventEmitter)}catch(e){return e instanceof Error&&(e.name===`AbortError`||e.message.includes(`aborted`)||e.message.includes(`abort`))?{response:``,messages:l.getMessages(),executionId:i,duration:Date.now()-a.getTime(),toolsExecuted:[],success:!0,interrupted:!0}:(await Gt(e,s,a,o,i,this.plugins,this.logger,this.eventEmitter),{response:`Error: ${e instanceof Error?e.message:String(e)}`,messages:[],tokensUsed:0,toolsExecuted:[],duration:Date.now()-a.getTime(),executionId:i,success:!1})}finally{this.eventEmitter.resetOwnerPathBases()}}async*executeStream(e,t,n,r){yield*nn(e,t,n,r,{aiProviders:this.aiProviders,tools:this.tools,conversationHistory:this.conversationHistory,toolExecutionService:this.toolExecutionService,plugins:this.plugins,logger:this.logger,eventEmitter:this.eventEmitter,generateExecutionId:()=>Kt()})}async getStats(){return{pluginCount:this.plugins.length,pluginNames:this.plugins.map(e=>e.name),historyStats:this.conversationHistory.getStats()}}clearPlugins(){this.plugins=[],this.logger.debug(`All plugins cleared`)}};const X=(e,t)=>`${e}.${t}`,an={START:X(I,F.START),COMPLETE:X(I,F.COMPLETE),ERROR:X(I,F.ERROR)},on={CALL_START:X(K,G.CALL_START),CALL_COMPLETE:X(K,G.CALL_COMPLETE),CALL_ERROR:X(K,G.CALL_ERROR)},sn={EXECUTION_START:X(P,N.EXECUTION_START),EXECUTION_COMPLETE:X(P,N.EXECUTION_COMPLETE),EXECUTION_ERROR:X(P,N.EXECUTION_ERROR),CREATED:X(P,N.CREATED)},Z={EXECUTION_START:an.START,EXECUTION_COMPLETE:an.COMPLETE,EXECUTION_ERROR:an.ERROR,TOOL_BEFORE_EXECUTE:`tool.beforeExecute`,TOOL_AFTER_EXECUTE:`tool.afterExecute`,TOOL_SUCCESS:`tool.success`,TOOL_ERROR:on.CALL_ERROR,CONVERSATION_START:`conversation.start`,CONVERSATION_COMPLETE:`conversation.complete`,CONVERSATION_ERROR:`conversation.error`,AGENT_EXECUTION_START:sn.EXECUTION_START,AGENT_EXECUTION_COMPLETE:sn.EXECUTION_COMPLETE,AGENT_EXECUTION_ERROR:sn.EXECUTION_ERROR,AGENT_CREATED:sn.CREATED,AGENT_DESTROYED:`agent.destroyed`,PLUGIN_LOADED:`plugin.loaded`,PLUGIN_UNLOADED:`plugin.unloaded`,PLUGIN_ERROR:`plugin.error`,ERROR_OCCURRED:`error.occurred`,WARNING_OCCURRED:`warning.occurred`,MODULE_INITIALIZE_START:`module.initialize.start`,MODULE_INITIALIZE_COMPLETE:`module.initialize.complete`,MODULE_INITIALIZE_ERROR:`module.initialize.error`,MODULE_EXECUTION_START:`module.execution.start`,MODULE_EXECUTION_COMPLETE:`module.execution.complete`,MODULE_EXECUTION_ERROR:`module.execution.error`,MODULE_DISPOSE_START:`module.dispose.start`,MODULE_DISPOSE_COMPLETE:`module.dispose.complete`,MODULE_DISPOSE_ERROR:`module.dispose.error`,MODULE_REGISTERED:`module.registered`,MODULE_UNREGISTERED:`module.unregistered`,EXECUTION_HIERARCHY:`execution.hierarchy`,EXECUTION_REALTIME:`execution.realtime`,TOOL_REALTIME:`tool.realtime`,CUSTOM:`custom`};var cn=class{enabled=!0;category=`custom`;priority=de.NORMAL;options;eventEmitter;subscribedEvents=[];eventHandlers=new Map;pluginLogger=j(`AbstractPlugin`);stats={calls:0,errors:0,moduleEventsReceived:0,lastActivity:void 0};async initialize(e){this.options=e,e&&`enabled`in e&&typeof e.enabled==`boolean`?this.enabled=e.enabled:this.enabled=!0,e?.category&&(this.category=e.category),e?.priority!==void 0&&(this.priority=(e.priority,e.priority))}async subscribeToModuleEvents(e){if(this.eventEmitter=e,!this.options)return;let t=[];this.options.subscribeToAllModuleEvents&&t.push(Z.MODULE_INITIALIZE_START,Z.MODULE_INITIALIZE_COMPLETE,Z.MODULE_INITIALIZE_ERROR,Z.MODULE_EXECUTION_START,Z.MODULE_EXECUTION_COMPLETE,Z.MODULE_EXECUTION_ERROR,Z.MODULE_DISPOSE_START,Z.MODULE_DISPOSE_COMPLETE,Z.MODULE_DISPOSE_ERROR),this.options.moduleEvents&&t.push(...this.options.moduleEvents);for(let e of t){let t=this.eventEmitter.on(e,async t=>{try{this.stats.moduleEventsReceived++,this.stats.lastActivity=new Date,await this.onModuleEvent?.(e,t)}catch(t){this.stats.errors++;let n=t instanceof Error?t:Error(String(t));this.pluginLogger.error(`Plugin "${this.name}" failed to handle module event "${String(e)}"`,{plugin:this.name,eventType:String(e),error:n.message})}}),n=this.eventHandlers.get(e);n?n.push(t):this.eventHandlers.set(e,[t]),this.subscribedEvents.push(e)}}async unsubscribeFromModuleEvents(e){for(let[t,n]of this.eventHandlers.entries())for(let r of n)e.off(t,r);this.eventHandlers.clear(),this.subscribedEvents=[],this.eventEmitter=void 0}async dispose(){this.eventEmitter&&await this.unsubscribeFromModuleEvents(this.eventEmitter)}enable(){this.enabled=!0}disable(){this.enabled=!1}isEnabled(){return this.enabled}getConfig(){return{}}updateConfig(e){}getData(){return{name:this.name,version:this.version,enabled:this.enabled,category:this.category,priority:this.priority,subscribedEvents:[...this.subscribedEvents],metadata:{moduleEventsReceived:this.stats.moduleEventsReceived,totalCalls:this.stats.calls,totalErrors:this.stats.errors}}}getStatus(){return{name:this.name,version:this.version,enabled:this.enabled,initialized:!0,category:this.category,priority:this.priority,subscribedEventsCount:this.subscribedEvents.length,hasEventEmitter:!!this.eventEmitter}}getStats(){return{enabled:this.enabled,calls:this.stats.calls,errors:this.stats.errors,moduleEventsReceived:this.stats.moduleEventsReceived,...this.stats.lastActivity&&{lastActivity:this.stats.lastActivity}}}updateCallStats(){this.stats.calls++,this.stats.lastActivity=new Date}updateErrorStats(){this.stats.errors++,this.stats.lastActivity=new Date}},ln=class{logger;constructor(e=k){this.logger=e}supportsTools(){return!1}validateConfig(){return!0}async dispose(){}async withRetry(e,t=3,n=1e3){let r;for(let i=0;i<=t;i++)try{return await e()}catch(e){r=e instanceof Error?e:Error(String(e)),i<t&&(this.logger.warn?.(`[${this.name}] Attempt ${i+1} failed, retrying in ${n}ms`,{error:r.message,attempt:i+1,maxRetries:t}),await this.delay(n))}throw r}withTimeout(e,t){let n;return Promise.race([e.then(e=>(clearTimeout(n),e)),new Promise((e,r)=>{n=setTimeout(()=>r(Error(`Operation timed out after ${t}ms`)),t)})])}delay(e){return new Promise(t=>setTimeout(t,e))}logDebug(e,t){this.logger.debug?.(`[${this.name}] ${e}`,t)}logError(e,t,n){this.logger.error?.(`[${this.name}] ${e}`,{error:t.message,stack:t.stack,...n})}validateRequest(e){if(!e.messages||e.messages.length===0)throw Error(`Request must include at least one message`);if(!e.provider)throw Error(`Request must specify a provider`);if(!e.model)throw Error(`Request must specify a model`)}validateResponse(e){if(!e.role)throw Error(`Response must have a role`);let t=e.role===`assistant`&&`toolCalls`in e&&Array.isArray(e.toolCalls)&&e.toolCalls.length>0;if(!e.content&&!t)throw Error(`Response must have content or tool calls`)}},un=class{logger;eventService;constructor(e={}){this.eventService=e.eventService,this.logger=e.logger??k}setEventService(e){this.eventService=e}getEventService(){return this.eventService}emitEvent(e,t){this.eventService&&this.eventService.emit(e,t)}async execute(e,t){return await this.executeImpl(e,t)}validate(e){return(this.schema.parameters.required||[]).every(t=>t in e)}validateParameters(e){let t=this.schema.parameters.required||[],n=[],r=e;for(let e of t)e in r||n.push(`Missing required parameter: ${e}`);return{isValid:n.length===0,errors:n}}getDescription(){return this.schema.description}getName(){return this.schema.name}},dn=class{static toProviderFormat(e,t,n={}){if(typeof t==`function`)return t(e);if(typeof t==`string`){let r=n[t];if(r!==void 0)return r(e)}return this.toUniversalFormat(e)}static toUniversalFormat(e){return e}static extractSystemMessage(e){return e.find(e=>e.role===`system`)?.content}static filterNonSystemMessages(e){return e.filter(e=>e.role!==`system`)}},Q=class{static validateAgentConfig(e){let t=[],n=[];return e.name||t.push(`name is required`),(!e.aiProviders||e.aiProviders.length===0)&&t.push(`aiProviders array is required and must have at least one provider`),e.defaultModel?(e.defaultModel.provider||t.push(`defaultModel.provider is required`),e.defaultModel.model||t.push(`defaultModel.model is required`)):t.push(`defaultModel is required`),e.aiProviders&&e.defaultModel?.provider&&(e.aiProviders.map(e=>e.name).includes(e.defaultModel.provider)||t.push(`defaultModel.provider "${e.defaultModel.provider}" is not found in aiProviders list`)),e.defaultModel?.temperature!==void 0&&(typeof e.defaultModel.temperature!=`number`||e.defaultModel.temperature<0||e.defaultModel.temperature>2)&&t.push(`defaultModel.temperature must be a number between 0 and 2`),e.defaultModel?.maxTokens!==void 0&&(typeof e.defaultModel.maxTokens!=`number`||e.defaultModel.maxTokens<=0)&&t.push(`defaultModel.maxTokens must be a positive number`),e.systemMessage&&e.systemMessage.length>1e3&&n.push(`systemMessage is quite long, consider keeping it concise for better performance`),e.tools&&e.tools.length>20&&n.push(`Large number of tools may impact performance, consider grouping related tools`),{isValid:t.length===0,errors:t,warnings:n}}static validateUserInput(e){let t=[],n=[];return!e||typeof e!=`string`?t.push(`Input must be a non-empty string`):(e.trim().length===0&&t.push(`Input cannot be only whitespace`),e.length>1e4&&n.push(`Very long input may be truncated by AI providers`)),{isValid:t.length===0,errors:t,warnings:n}}static validateProviderName(e){let t=[];return!e||typeof e!=`string`?t.push(`Provider name must be a non-empty string`):/^[a-zA-Z][a-zA-Z0-9_-]*$/.test(e)||t.push(`Provider name must start with a letter and contain only letters, numbers, underscores, and hyphens`),{isValid:t.length===0,errors:t}}static validateModelName(e){let t=[];return!e||typeof e!=`string`?t.push(`Model name must be a non-empty string`):e.trim().length===0&&t.push(`Model name cannot be only whitespace`),{isValid:t.length===0,errors:t}}static validateApiKey(e){let t=[];return!e||typeof e!=`string`?(t.push(`API key must be a non-empty string`),{isValid:!1,errors:t}):(e.length<10&&t.push(`API key appears to be too short`),/\s/.test(e)&&t.push(`API key should not contain whitespace`),{isValid:t.length===0,errors:t,warnings:[]})}};const fn=Q.validateAgentConfig,pn=Q.validateUserInput,mn=Q.validateProviderName,hn=Q.validateModelName,gn=Q.validateApiKey;function _n(e,t,n){return setInterval(()=>{(async()=>{try{await n()}catch(n){e.error(`Periodic task failed`,{task:t.name,error:n instanceof Error?n.message:String(n)})}})()},t.intervalMs)}function vn(e){e&&clearInterval(e)}function yn(t,n){let r={id:e(),role:`user`,content:t,state:`complete`,timestamp:new Date};return n?.name&&(r.name=n.name),n?.metadata&&(r.metadata=n.metadata),n?.parts&&(r.parts=n.parts),r}function bn(t,n){let r={id:e(),role:`assistant`,content:t,state:n?.state??`complete`,timestamp:new Date};return n?.toolCalls&&(r.toolCalls=n.toolCalls),n?.metadata&&(r.metadata=n.metadata),n?.parts&&(r.parts=n.parts),r}function xn(t,n){let r={id:e(),role:`system`,content:t,state:`complete`,timestamp:new Date};return n?.name&&(r.name=n.name),n?.metadata&&(r.metadata=n.metadata),n?.parts&&(r.parts=n.parts),r}function Sn(t,n){let r={id:e(),role:`tool`,content:t,toolCallId:n.toolCallId,state:`complete`,timestamp:new Date};return n.name&&(r.name=n.name),n.metadata&&(r.metadata=n.metadata),n.parts&&(r.parts=n.parts),r}var Cn=class{maxMessages;entries=[];constructor(e){this.maxMessages=e?.maxMessages||0}addMessage(e){this.entries.push(E(e)),this.applyMessageLimit()}addEntry(e){this.entries.push(e)}getHistory(){return[...this.entries]}addUserMessage(e,t,n){this.addMessage(yn(e,{...t&&{metadata:t},...n&&{parts:n}}))}addAssistantMessage(e,t,n,r){this.addMessage(bn(e,{...t&&{toolCalls:t},...n&&{metadata:n},...r&&{parts:r}}))}addSystemMessage(e,t,n){this.addMessage(xn(e,{...t&&{metadata:t},...n&&{parts:n}}))}addToolMessageWithId(e,t,n,r,i){this.addMessage(Sn(e,{toolCallId:t,name:n,...r&&{metadata:r},...i&&{parts:i}}))}getMessages(){return this.entries.filter(w).map(T)}getMessagesByRole(e){return this.getMessages().filter(t=>t.role===e)}getRecentMessages(e){return this.getMessages().slice(-e)}getMessageCount(){return this.entries.filter(w).length}clear(){this.entries=[]}applyMessageLimit(){if(this.maxMessages<=0)return;let e=this.entries.filter(w);if(e.length<=this.maxMessages)return;let t=e.map(T),n=t.filter(te),r=t.filter(e=>!te(e)),i=Math.max(0,this.maxMessages-n.length),a=[...n,...r.slice(-i)],o=new Set(a.map(e=>e.id));this.entries=this.entries.filter(e=>!w(e)||o.has(e.id))}},wn=class{history;pendingAssistant=null;constructor(e=100){this.history=new Cn({maxMessages:e})}addMessage(e){this.history.addMessage(e)}addUserMessage(e,t,n){this.history.addUserMessage(e,t,n)}addAssistantMessage(e,t,n,r){this.history.addAssistantMessage(e,t,n,r)}addSystemMessage(e,t,n){this.history.addSystemMessage(e,t,n)}addToolMessage(e,t,n,r,i){this.history.addToolMessageWithId(e,t,n||`unknown`,r,i)}addToolMessageWithId(e,t,n,r,i){this.history.addToolMessageWithId(e,t,n,r,i)}addEntry(e){this.history.addEntry(e)}getHistory(){return this.history.getHistory()}getMessages(){return this.history.getMessages()}getMessagesByRole(e){return this.history.getMessagesByRole(e)}getRecentMessages(e){return this.history.getRecentMessages(e)}getMessageCount(){return this.history.getMessageCount()}beginAssistant(){this.pendingAssistant||={id:e(),content:``,toolCalls:[]}}appendStreaming(t){this.pendingAssistant||={id:e(),content:``,toolCalls:[]},this.pendingAssistant.content+=t}appendToolCall(t){this.pendingAssistant||={id:e(),content:``,toolCalls:[]},this.pendingAssistant.toolCalls.some(e=>e.id===t.id)||this.pendingAssistant.toolCalls.push(t)}commitAssistant(e,t){if(!this.pendingAssistant)return;let n=this.pendingAssistant,r=n.toolCalls.length>0,i=n.content,a={id:n.id,role:`assistant`,content:i,state:e,timestamp:new Date,...r&&{toolCalls:n.toolCalls},...t&&{metadata:t}};this.history.addMessage(a),this.pendingAssistant=null}discardPending(){this.pendingAssistant=null}hasPendingAssistant(){return this.pendingAssistant!==null}getPendingContent(){return this.pendingAssistant?.content??``}getMessagesForAPI(){return this.history.getMessages().map(e=>{let t={role:e.role,content:e.content};return O(e)&&e.state===`interrupted`&&(t.content=(t.content||``)+`
5
+
6
+ [This response was interrupted by the user]`),O(e)&&e.toolCalls&&(t.tool_calls=e.toolCalls),ne(e)&&(t.tool_call_id=e.toolCallId),t})}clear(){this.history.clear()}},Tn=class{conversations=new Map;logger;maxMessagesPerConversation;maxConversations;constructor(e={}){this.maxMessagesPerConversation=e.maxMessagesPerConversation||100,this.maxConversations=e.maxConversations||50,this.logger=j(`ConversationHistory`)}getConversationStore(e){return this.conversations.has(e)||(this.conversations.size>=this.maxConversations&&this.cleanupOldConversations(),this.conversations.set(e,new wn(this.maxMessagesPerConversation))),this.conversations.get(e)}hasConversation(e){return this.conversations.has(e)}removeConversation(e){let t=this.conversations.delete(e);return t&&this.logger.debug(`Removed conversation`,{conversationId:e}),t}clearAll(){let e=this.conversations.size;this.conversations.clear(),this.logger.debug(`Cleared all conversations`,{removedCount:e})}getStats(){let e=Array.from(this.conversations.keys()),t=Array.from(this.conversations.values()).reduce((e,t)=>e+t.getMessageCount(),0);return{totalConversations:this.conversations.size,conversationIds:e,totalMessages:t}}cleanupOldConversations(){if(this.conversations.size===0)return;let e=this.conversations.keys().next().value;e&&this.conversations.delete(e)}},En=class extends ln{name=`local`;version=`1.0.0`;providers=new Map;config;constructor(e={}){super(),this.config={timeout:3e4,maxRetries:3,retryDelay:1e3,enableLogging:!1,...e}}registerProvider(e,t){this.providers.set(e,t)}unregisterProvider(e){this.providers.delete(e)}getProvider(e){return this.providers.get(e)}async executeChat(e){this.validateRequest(e);let t=this.providers.get(e.provider);if(!t)throw Error(`Provider "${e.provider}" not registered with LocalExecutor`);if(!t.chat)throw Error(`Provider "${e.provider}" does not implement chat method`);this.config.enableLogging&&this.logDebug(`Executing chat with provider: ${e.provider}, model: ${e.model}`);try{let n=await this.withRetry(async()=>await this.withTimeout(t.chat(e.messages,{...e.options,model:e.model,tools:e.tools}),this.config.timeout),this.config.maxRetries,this.config.retryDelay);if(n.role!==`assistant`)throw Error(`Expected assistant message, got ${n.role}`);return this.validateResponse(n),n}catch(t){let n=t instanceof Error?t:Error(String(t));throw this.logError(`Chat execution failed`,n,{provider:e.provider,model:e.model}),n}}async*executeChatStream(e){this.validateRequest(e);let t=this.providers.get(e.provider);if(!t)throw Error(`Provider "${e.provider}" not registered with LocalExecutor`);if(!t.chatStream)throw Error(`Provider "${e.provider}" does not implement chatStream method`);this.config.enableLogging&&this.logDebug(`Executing streaming chat with provider: ${e.provider}, model: ${e.model}`);try{let n=t.chatStream(e.messages,{...e.options,model:e.model,tools:e.tools});for await(let e of n)this.validateResponse(e),yield e}catch(t){let n=t instanceof Error?t:Error(String(t));throw this.logError(`Streaming chat execution failed`,n,{provider:e.provider,model:e.model}),n}}supportsTools(){for(let e of this.providers.values())if(e.supportsTools&&e.supportsTools())return!0;return!1}validateConfig(){try{if(this.config.timeout<=0||this.config.maxRetries<0||this.config.retryDelay<0)return!1;for(let e of this.providers.values())if(e.validateConfig&&!e.validateConfig())return!1;return!0}catch{return!1}}async dispose(){this.config.enableLogging&&this.logDebug(`Disposing ${this.providers.size} providers`);let e=[];for(let t of this.providers.values())t.dispose&&e.push(t.dispose());await Promise.all(e),this.providers.clear()}};const Dn=`$ENV:`;function On(e){return e.startsWith(Dn)}function kn(e){return`${Dn}${e}`}function An(e){if(!On(e))return e;let t=e.slice(5).trim();if(t.length!==0)return process.env[t]}function jn(e){return e===void 0||e.length===0?!1:An(e)!==void 0}var Mn=class{totalEmitted=0;totalErrors=0;incrementEmitted(){this.totalEmitted+=1}incrementErrors(){this.totalErrors+=1}getSnapshot(){return{totalEmitted:this.totalEmitted,totalErrors:this.totalErrors}}};function Nn(e,t){if(e.maxListeners!==void 0&&e.maxListeners<0)throw new W(`Invalid maxListeners option: ${e.maxListeners}. Must be a non-negative number.`,t,{maxListeners:e.maxListeners});if(e.buffer!==void 0&&e.buffer.maxSize!==void 0&&e.buffer.maxSize<0)throw new W(`Invalid buffer.maxSize option: ${e.buffer.maxSize}. Must be a non-negative number.`,t,{bufferMaxSize:e.buffer.maxSize});if(e.buffer!==void 0&&e.buffer.flushInterval!==void 0&&e.buffer.flushInterval<0)throw new W(`Invalid buffer.flushInterval option: ${e.buffer.flushInterval}. Must be a non-negative number.`,t,{bufferFlushInterval:e.buffer.flushInterval})}async function Pn(e,t,n,r,i){try{await e.listener(t)}catch(a){throw n.incrementErrors(),r&&i.error(`Event handler error`,{eventType:t.type,handlerId:e.id,error:a instanceof Error?a.message:String(a)}),a instanceof Error?a:Error(String(a))}}async function Fn(e,t,n,r,i){let a=t.get(e.type);if(!a||a.length===0)return;let o=a.filter(t=>!t.filter||t.filter(e));if(o.length!==0){for(let t of o.filter(e=>e.once))r(e.type,t.id);if(n){await Promise.all(o.map(t=>i(t,e)));return}for(let t of o)await i(t,e)}}function In(e){let t={},n=0;for(let[r,i]of e)t[r]=i.length,n+=i.length;return{listenerCounts:t,totalListeners:n}}function Ln(e,t,n,r){let{listenerCounts:i,totalListeners:a}=In(t),o=r.getSnapshot();return{enabled:e.enabled,calls:e.calls,errors:e.errors,eventTypes:Array.from(t.keys()),listenerCounts:i,totalListeners:a,bufferedEvents:n,totalEmitted:o.totalEmitted,totalErrors:o.totalErrors}}function Rn(e,t,n,r,i,a,o){e.has(t)||e.set(t,[]);let s=e.get(t);if(s.length>=a)throw new W(`Maximum listeners (${a}) exceeded for event type: ${t}`,o,{eventType:t,currentListeners:s.length});s.push({id:n,listener:r,once:i?.once??!1,...i?.filter&&{filter:i.filter}})}function zn(e,t,n){let r=e.get(t);if(!r)return!1;let i=typeof n==`string`?r.findIndex(e=>e.id===n):r.findIndex(e=>e.listener===n);return i===-1?!1:(r.splice(i,1),!0)}function Bn(e,t,n){let r=t.result!==null&&t.result!==void 0;return{executionId:e.executionId,sessionId:e.sessionId,userId:e.userId,data:{toolName:t.name||``,toolId:t.id||``,toolResult:r?String(t.result):void 0,duration:n,success:r}}}var Vn=class extends cn{name=`EventEmitterPlugin`;version=`1.0.0`;pluginOptions;logger;handlers=new Map;eventBuffer=[];nextHandlerId=1;bufferTimer;metrics;constructor(e={}){super(),this.logger=j(`EventEmitterPlugin`),this.metrics=e.metrics??new Mn,Nn(e,this.name),this.pluginOptions={enabled:e.enabled??!0,events:e.events??[Z.AGENT_EXECUTION_START,Z.AGENT_EXECUTION_COMPLETE,Z.AGENT_EXECUTION_ERROR,Z.TOOL_BEFORE_EXECUTE,Z.TOOL_AFTER_EXECUTE,Z.TOOL_SUCCESS,Z.TOOL_ERROR],maxListeners:e.maxListeners??100,async:e.async??!0,catchErrors:e.catchErrors??!0,filters:e.filters??{},buffer:e.buffer??{enabled:!1,maxSize:1e3,flushInterval:5e3},category:e.category??`event_processing`,priority:e.priority??de.HIGH,moduleEvents:e.moduleEvents??[],subscribeToAllModuleEvents:e.subscribeToAllModuleEvents??!1},this.pluginOptions.buffer.enabled&&(this.bufferTimer=setInterval(()=>{this.flushBuffer()},this.pluginOptions.buffer.flushInterval))}async beforeExecution(e){await this.emit(Z.AGENT_EXECUTION_START,{executionId:e.executionId,sessionId:e.sessionId,userId:e.userId,data:{messageCount:e.messages?.length||0,...e.config&&{config:e.config}}})}async afterExecution(e,t){await this.emit(Z.AGENT_EXECUTION_COMPLETE,{executionId:e.executionId,sessionId:e.sessionId,userId:e.userId,data:{duration:t?.duration,tokensUsed:t?.tokensUsed,toolsExecuted:t?.toolsExecuted}})}async beforeConversation(e){await this.emit(Z.CONVERSATION_START,{executionId:e.executionId,sessionId:e.sessionId,userId:e.userId,data:{messages:e.messages?.map(e=>({role:e.role,content:e.content||``,timestamp:e.timestamp?e.timestamp.toISOString():new Date().toISOString()})),config:e.config}})}async afterConversation(e,t){await this.emit(Z.CONVERSATION_COMPLETE,{executionId:e.executionId,sessionId:e.sessionId,userId:e.userId,data:{response:t.content||t.response,tokensUsed:t.usage?.totalTokens||t.tokensUsed,toolCalls:t.toolCalls?.map(e=>({id:e.id||``,name:e.name||``,arguments:JSON.stringify(e.arguments||{}),result:String(e.result||``)}))}})}async beforeToolExecution(e,t){t&&await this.emit(Z.TOOL_BEFORE_EXECUTE,{executionId:e.executionId,sessionId:e.sessionId,userId:e.userId,data:{toolName:t.toolName,toolId:t.executionId,arguments:JSON.stringify(t.parameters??{})}})}async afterToolExecution(e,t){if(!(!t.toolCalls||t.toolCalls.length===0))for(let n of t.toolCalls){let r=n.result===null?Z.TOOL_ERROR:Z.TOOL_SUCCESS,i=Bn(e,n,t.duration);await this.emit(r,i),await this.emit(Z.TOOL_AFTER_EXECUTE,{...i,data:{...i.data,toolResult:String(n.result||``)}})}}async onError(e,t){await this.emit(Z.AGENT_EXECUTION_ERROR,{executionId:t?.executionId,sessionId:t?.sessionId,userId:t?.userId,error:e instanceof Error?e:Error(String(e)),data:{action:t?.action,tool:t?.tool,attempt:t?.attempt}})}on(e,t,n){let r=`handler_${this.nextHandlerId++}`;return Rn(this.handlers,e,r,t,n,this.pluginOptions.maxListeners,this.name),r}once(e,t,n){return this.on(e,t,{once:!0,...n&&{filter:n}})}off(e,t){return zn(this.handlers,e,t)}async emit(e,t={}){if(!this.pluginOptions.events.includes(e))return;let n={type:e,timestamp:new Date,...t},r=this.pluginOptions.filters[e];if(!(r&&!r(n))){if(this.metrics.incrementEmitted(),this.pluginOptions.buffer.enabled){this.eventBuffer.push(n),this.eventBuffer.length>=this.pluginOptions.buffer.maxSize&&this.flushBuffer();return}await this.processEvent(n)}}async processEvent(e){await Fn(e,this.handlers,this.pluginOptions.async,(e,t)=>this.off(e,t),(e,t)=>Pn(e,t,this.metrics,this.pluginOptions.catchErrors,this.logger))}async flushBuffer(){if(this.eventBuffer.length===0)return;let e=[...this.eventBuffer];this.eventBuffer=[];for(let t of e)await this.processEvent(t)}getStats(){return Ln(super.getStats(),this.handlers,this.eventBuffer.length,this.metrics)}clearAllListeners(){this.handlers.clear()}async destroy(){this.bufferTimer&&clearInterval(this.bufferTimer),await this.flushBuffer(),this.clearAllListeners()}},Hn=class extends v{moduleManager;pluginManager;addPlugin(e){this.pluginManager.addPlugin(e)}removePlugin(e){return this.pluginManager.removePlugin(e)}getPlugin(e){return this.pluginManager.getPlugin(e)}getPlugins(){return this.pluginManager.getPlugins()}getPluginNames(){return this.pluginManager.getPluginNames()}async registerModule(e,t){return this.moduleManager.registerModule(e,t)}async unregisterModule(e){return this.moduleManager.unregisterModule(e)}getModule(e){return this.moduleManager.getModule(e)}getModulesByType(e){return this.moduleManager.getModulesByType(e)}getModules(){return this.moduleManager.getModules()}getModuleNames(){return this.moduleManager.getModuleNames()}hasModule(e){return this.moduleManager.hasModule(e)}async executeModule(e,t){return this.moduleManager.executeModule(e,t)}getModuleStats(e){return this.moduleManager.getModuleStats(e)}};function Un(e){if(!e.name)throw new V(`Agent name is required`,{component:`Robota`});if(!e.aiProviders||e.aiProviders.length===0)throw new V(`At least one AI provider is required`,{component:`Robota`});if(!e.defaultModel)throw new V(`Default model configuration is required`,{component:`Robota`});if(!e.defaultModel.provider||!e.defaultModel.model)throw new V(`Default model must specify both provider and model`,{component:`Robota`});let t=e.aiProviders.map(e=>e.name),n=t.filter((e,n)=>t.indexOf(e)!==n);if(n.length>0)throw new V(`Duplicate AI provider names: ${n.join(`, `)}`,{component:`Robota`,duplicates:n});if(!t.includes(e.defaultModel.provider))throw new V(`Default provider '${e.defaultModel.provider}' not found in AI providers list. Available: ${t.join(`, `)}`,{component:`Robota`,defaultProvider:e.defaultModel.provider,availableProviders:t})}var Wn=class{logger;getAIProviders;getTools;getEventService;isReady;ensureReady;getConfig;setConfig;getConfigVersion;bumpConfigVersion;getConfigUpdatedAt;setConfigUpdatedAt;emitAgentEvent;constructor(e,t,n,r,i,a,o,s,c,l,u,d,f){this.logger=e,this.getAIProviders=t,this.getTools=n,this.getEventService=r,this.isReady=i,this.ensureReady=a,this.getConfig=o,this.setConfig=s,this.getConfigVersion=c,this.bumpConfigVersion=l,this.getConfigUpdatedAt=u,this.setConfigUpdatedAt=d,this.emitAgentEvent=f}async updateTools(e){if(await this.ensureReady(),!Array.isArray(e))throw new V(`updateTools: next must be an array of tools`);this.getTools().getRegistry().clear();let t=[],n=this.getEventService();for(let r of e){n&&r.setEventService(n),this.getTools().addTool(r.schema,async(e,t)=>{if(!t)throw Error(`[ROBOTA] Missing ToolExecutionContext for tool execution`);return(await r.execute(e,t)).data});let e=r.schema.name;typeof e==`string`&&e.length>0&&t.push(e)}let r=this.getConfig();r.tools=e,this.setConfig(r);let i=this.bumpConfigVersion();return this.setConfigUpdatedAt(Date.now()),this.emitAgentEvent(N.CONFIG_UPDATED,{parameters:{tools:t,systemMessage:r.defaultModel.systemMessage,provider:r.defaultModel.provider,model:r.defaultModel.model,temperature:r.defaultModel.temperature,maxTokens:r.defaultModel.maxTokens},metadata:{version:i}}),{version:i}}async updateConfiguration(e){if(e.tools)return this.updateTools(e.tools);throw new V(`updateConfiguration: only tools patch is supported at this time`)}async getConfiguration(){await this.ensureReady();let e=this.getTools().getTools().map(e=>({name:e.name,parameters:(()=>{let t=e.parameters?.properties;return t&&typeof t==`object`?Object.keys(t):void 0})()}));return{version:this.getConfigVersion(),tools:e,updatedAt:this.getConfigUpdatedAt(),metadata:void 0}}setModel(e){if(!e.provider||!e.model)throw new V(`Both provider and model are required`,{component:`Robota`});if(!this.isReady())throw new V(`Agent must be fully initialized before changing model configuration`,{component:`Robota`});let t=this.getAIProviders(),n=t.getProviderNames();if(!n.includes(e.provider))throw new V(`AI Provider '${e.provider}' not found. Available: ${n.join(`, `)}`,{component:`Robota`,provider:e.provider,availableProviders:n});t.setCurrentProvider(e.provider,e.model);let r=this.getConfig();this.setConfig({...r,defaultModel:{...r.defaultModel,provider:e.provider,model:e.model,...e.temperature!==void 0&&{temperature:e.temperature},...e.maxTokens!==void 0&&{maxTokens:e.maxTokens},...e.topP!==void 0&&{topP:e.topP},...e.systemMessage!==void 0&&{systemMessage:e.systemMessage}}}),this.logger.debug(`Model configuration updated`,e)}getModel(){if(!this.isReady())throw new V(`Agent must be fully initialized before getting model configuration`,{component:`Robota`});let e=this.getAIProviders().getCurrentProvider();if(!e)throw new V(`No provider is currently set`,{component:`Robota`});let t=this.getConfig();return{provider:e.provider,model:e.model,...t.defaultModel.temperature!==void 0&&{temperature:t.defaultModel.temperature},...t.defaultModel.maxTokens!==void 0&&{maxTokens:t.defaultModel.maxTokens},...t.defaultModel.topP!==void 0&&{topP:t.defaultModel.topP},...t.defaultModel.systemMessage!==void 0&&{systemMessage:t.defaultModel.systemMessage}}}registerTool(e,t){if(t.hasTool(e.schema.name))throw Error(`[STRICT-POLICY][EMITTER-CONTRACT] Duplicate tool registration attempted: ${e.schema.name}. Tool registration flow must provide a single authoritative registration path.`);t.addTool(e.schema,async(t,n)=>{if(!n)throw Error(`[ROBOTA] Missing ToolExecutionContext for tool execution`);return(await e.execute(t,n)).data}),this.logger.debug(`Tool registered`,{toolName:e.schema.name})}},Gn=class{agentName;moduleRegistry;logger;isReady;ensureReady;constructor(e,t,n,r,i){this.agentName=e,this.moduleRegistry=t,this.logger=n,this.isReady=r,this.ensureReady=i}async registerModule(e,t){await this.ensureReady(),await this.moduleRegistry.registerModule(e,{autoInitialize:t?.autoInitialize??!0,validateDependencies:t?.validateDependencies??!0}),this.logger.info(`Module registered`,{moduleName:e.name,moduleType:e.getModuleType().type})}async unregisterModule(e){if(!this.isReady())return!1;let t=await this.moduleRegistry.unregisterModule(e);return t&&this.logger.info(`Module unregistered`,{moduleName:e}),t}getModule(e){if(this.isReady())return this.moduleRegistry.getModule(e)}getModulesByType(e){return this.isReady()?this.moduleRegistry.getModulesByType(e):[]}getModules(){return this.isReady()?this.moduleRegistry.getAllModules():[]}getModuleNames(){return this.isReady()?this.moduleRegistry.getModuleNames():[]}hasModule(e){return this.isReady()?this.moduleRegistry.hasModule(e):!1}async executeModule(e,t){await this.ensureReady();let n={agentName:this.agentName,...t.executionId&&{executionId:t.executionId},...t.sessionId&&{sessionId:t.sessionId},...t.userId&&{userId:t.userId},...t.metadata&&{metadata:t.metadata}};return await this.moduleRegistry.executeModule(e,n)}getModuleStats(e){if(this.isReady())return this.moduleRegistry.getModuleStats(e)}},Kn=class{logger;isReady;getExecutionService;constructor(e,t,n){this.logger=e,this.isReady=t,this.getExecutionService=n}addPlugin(e){let t=this.getExecutionService();if(!this.isReady()||!t)throw new V(`Cannot add plugin before agent is fully initialized. Await an operation like run() first, or pass plugins via the constructor config.`,{pluginName:e.name});t.registerPlugin(e),this.logger.debug(`Plugin added`,{pluginName:e.name})}removePlugin(e){let t=this.getExecutionService();if(!t)return!1;let n=t.removePlugin(e);return n&&this.logger.debug(`Plugin removed`,{pluginName:e}),n}getPlugin(e){let t=this.getExecutionService();if(t)return t.getPlugin(e)}getPlugins(){let e=this.getExecutionService();return e?e.getPlugins():[]}getPluginNames(){let e=this.getExecutionService();return!this.isReady()||!e?[]:e.getPlugins().map(e=>e.name)}};function qn(e){return{moduleManager:new Gn(e.getName(),e.getModuleRegistry(),e.getLogger(),e.getIsFullyInitialized,e.ensureFullyInitialized),pluginManager:new Kn(e.getLogger(),e.getIsFullyInitialized,e.getExecutionService),configManager:new Wn(e.getLogger(),e.getAiProviders,e.getTools,e.getEventService,e.getIsFullyInitialized,e.ensureFullyInitialized,e.getConfig,t=>e.setConfig(t),e.getConfigVersion,e.incrementConfigVersion,e.getConfigUpdatedAt,t=>e.setConfigUpdatedAt(t),(t,n)=>e.emitAgentEvent(t,n))}}function Jn(e,t){let n=Array.isArray(e.tools)?e.tools.map(e=>{let t=e?.schema?.name;if(typeof t==`string`&&t.length>0)return t;let n=e?.name;return typeof n==`string`&&n.length>0?n:``}).filter(e=>typeof e==`string`&&e.length>0):[];t(N.CREATED,{parameters:{tools:n,systemMessage:e.defaultModel.systemMessage,provider:e.defaultModel.provider,model:e.defaultModel.model,temperature:e.defaultModel.temperature,maxTokens:e.defaultModel.maxTokens}})}function Yn(e,t,n,r,i){R(e)||e.emit(r,{timestamp:new Date,...i},{ownerType:P,ownerId:t,ownerPath:Zn(t,n)})}function Xn(){return new Vn({enabled:!0,events:[Z.MODULE_INITIALIZE_START,Z.MODULE_INITIALIZE_COMPLETE,Z.MODULE_INITIALIZE_ERROR,Z.MODULE_EXECUTION_START,Z.MODULE_EXECUTION_COMPLETE,Z.MODULE_EXECUTION_ERROR,Z.MODULE_DISPOSE_START,Z.MODULE_DISPOSE_COMPLETE,Z.MODULE_DISPOSE_ERROR]})}function Zn(e,t){return[...t?.ownerPath?.length?t.ownerPath.map(e=>({...e})):[],{type:`agent`,id:e}]}function Qn(e,t){return{conversationId:e.conversationId,...t.sessionId&&{sessionId:t.sessionId},...t.userId&&{userId:t.userId},...t.metadata&&{metadata:t.metadata},...t.signal&&{signal:t.signal},...t.onTextDelta&&{onTextDelta:t.onTextDelta},...t.onExecutionEvent&&{onExecutionEvent:t.onExecutionEvent},...t.maxExecutionRounds!==void 0&&{maxExecutionRounds:t.maxExecutionRounds},...t.maxSameToolInputs!==void 0&&{maxSameToolInputs:t.maxSameToolInputs}}}async function $n(e,t,n={}){try{e.emitAgentEvent(N.EXECUTION_START,{}),e.logger.debug(`Starting Robota execution`,{inputLength:t.length,conversationId:e.conversationId,sessionId:n.sessionId||`none`,userId:n.userId||`none`,hasMetadata:!!n.metadata});let r=e.getHistory(),i={...e.config},a=await e.getExecutionService().execute(t,r,i,Qn(e,n));if(e.logger.debug(`Robota execution completed`,{success:a.success,duration:a.duration,tokensUsed:a.tokensUsed,toolsExecuted:a.toolsExecuted,interrupted:a.interrupted}),a.interrupted)return e.emitAgentEvent(N.EXECUTION_COMPLETE,{}),a.response;if(!a.success&&a.error)throw a.error;return e.emitAgentEvent(N.EXECUTION_COMPLETE,{}),a.response}catch(t){throw e.logger.error(`Robota execution failed`,{error:t instanceof Error?t.message:String(t),conversationId:e.conversationId}),e.emitAgentEvent(N.EXECUTION_ERROR,{error:t instanceof Error?t.message:String(t)}),t}}async function*er(e,t,n={}){try{e.emitAgentEvent(N.EXECUTION_START,{}),e.logger.debug(`Starting Robota streaming execution`,{inputLength:t.length,conversationId:e.conversationId,sessionId:n.sessionId||`none`,userId:n.userId||`none`,hasMetadata:!!n.metadata});let r=e.getHistory(),i={...e.config},a=e.getExecutionService().executeStream(t,r,i,{conversationId:e.conversationId,...n.sessionId&&{sessionId:n.sessionId},...n.userId&&{userId:n.userId},...n.metadata&&{metadata:n.metadata}});for await(let e of a)yield e.chunk}catch(t){throw e.logger.error(`Robota streaming execution failed`,{error:t instanceof Error?t.message:String(t),conversationId:e.conversationId}),e.emitAgentEvent(N.EXECUTION_ERROR,{error:t instanceof Error?t.message:String(t)}),t}finally{e.emitAgentEvent(N.EXECUTION_COMPLETE,{})}}function tr(e,t){return e.getConversationStore(t).getMessages().map(e=>({id:e.id,role:e.role,content:e.content,state:e.state,timestamp:e.timestamp,metadata:e.metadata,...e.role===`assistant`&&`toolCalls`in e?{toolCalls:e.toolCalls}:{},...e.role===`tool`&&`toolCallId`in e?{toolCallId:e.toolCallId}:{},...e.role===`tool`&&`name`in e?{name:e.name}:{}}))}function nr(e,t){return e.getConversationStore(t).getHistory()}function rr(e,t,n){e.getConversationStore(t).addEntry(n)}function ir(e,t){e.getConversationStore(t).clear()}function ar(e,t,n,r,i){let a=e.getConversationStore(t);n===`tool`&&i?.toolCallId?a.addToolMessageWithId(r,i.toolCallId,i.name??`unknown`):n===`assistant`?a.addAssistantMessage(r,[]):n===`system`?a.addSystemMessage(r):a.addUserMessage(r)}function or(e,t,n){e.getConversationStore(t).addMessage(n)}var sr=class{build(e,t,n,r){let i=e.map(e=>({role:e.role,content:e.content})),a=JSON.stringify({messages:i,model:t,provider:n,temperature:r?.temperature,maxTokens:r?.maxTokens});return{hash:this.sha256(a),model:t,provider:n}}computeIntegrityHash(e){return this.sha256(e)}sha256(e){let n=new t(`SHA-256`,`TEXT`);return n.update(e),n.getHash(`HEX`)}},cr=class{cache=new Map;accessOrder=[];maxEntries;ttlMs;keyBuilder=new sr;hits=0;misses=0;constructor(e){this.maxEntries=e.maxEntries,this.ttlMs=e.ttlMs}get(e){let t=this.cache.get(e);if(!t){this.misses++;return}if(Date.now()-t.timestamp>this.ttlMs){this.cache.delete(e),this.removeFromAccessOrder(e),this.misses++;return}let n=this.keyBuilder.computeIntegrityHash(t.response);if(t.integrityHash!==n)throw this.cache.delete(e),this.removeFromAccessOrder(e),new Ie(`Integrity check failed for cache entry ${e}`,{hash:e,expected:n,actual:t.integrityHash});return this.touchAccessOrder(e),this.hits++,t}set(e){let t=e.key.hash;!this.cache.has(t)&&this.cache.size>=this.maxEntries&&this.evictLRU(),this.cache.set(t,e),this.touchAccessOrder(t)}delete(e){return this.cache.has(e)?(this.cache.delete(e),this.removeFromAccessOrder(e),!0):!1}clear(){this.cache.clear(),this.accessOrder.length=0,this.hits=0,this.misses=0}getStats(){let e=this.hits+this.misses;return{hits:this.hits,misses:this.misses,entries:this.cache.size,hitRate:e===0?0:this.hits/e}}touchAccessOrder(e){this.removeFromAccessOrder(e),this.accessOrder.push(e)}removeFromAccessOrder(e){let t=this.accessOrder.indexOf(e);t!==-1&&this.accessOrder.splice(t,1)}evictLRU(){let e=this.accessOrder.shift();e&&this.cache.delete(e)}},lr=class{storage;keyBuilder;constructor(e,t){this.storage=e,this.keyBuilder=t}lookup(e,t,n,r){let i=this.keyBuilder.build(e,t,n,r),a=this.storage.get(i.hash);return a?a.response:void 0}store(e,t,n,r,i){let a=this.keyBuilder.build(e,t,n,i);this.storage.set({key:a,response:r,timestamp:Date.now(),integrityHash:this.keyBuilder.computeIntegrityHash(r)})}getStats(){return this.storage.getStats()}};async function ur(e){let{config:t,aiProviders:n,tools:r,agentFactory:i,conversationHistory:a,moduleRegistry:o,eventEmitter:s,eventService:c,logger:l}=e;if(l.debug(`Starting Robota initialization with independent managers`),await Promise.all([n.initialize(),r.initialize(),i.initialize()]),t.aiProviders)for(let e of t.aiProviders)n.addProvider(e.name,e);if(t.defaultModel&&n.setCurrentProvider(t.defaultModel.provider,t.defaultModel.model),t.modules){for(let e of t.modules)await o.registerModule(e,{autoInitialize:!0,validateDependencies:!0});l.debug(`Modules registered and initialized`,{moduleCount:t.modules.length,moduleNames:t.modules.map(e=>e.name)})}if(t.tools)for(let e of t.tools)e instanceof un&&c&&e.setEventService(c),r.addTool(e.schema,async(t,n)=>{if(!n)throw Error(`[ROBOTA] Missing ToolExecutionContext for tool execution`);return(await e.execute(t,n)).data}),l.debug(`Tool registered during initialization`,{toolName:e.schema.name});let u;t.cache?.enabled&&(u=new lr(new cr({maxEntries:t.cache.maxEntries,ttlMs:t.cache.ttlMs}),new sr));let d=new rn(n,r,a,c,t.executionContext,u);if(t.plugins)for(let e of t.plugins)d.registerPlugin(e),e.subscribeToModuleEvents&&(await e.subscribeToModuleEvents(s),l.debug(`Plugin subscribed to module events`,{pluginName:e.name}));return l.debug(`Robota initialization completed successfully with independent managers`),d}async function dr(e){try{let t=await ur(e.ctx);e.setExecutionService(t),e.setFullyInitialized(!0)}catch(t){throw e.ctx.logger.error(`Robota initialization failed`,{error:t instanceof Error?t.message:String(t)}),t}}function fr(e){let t=e.isFullyInitialized?e.aiProviders.getProviderNames():[],n=e.isFullyInitialized?e.aiProviders.getCurrentProvider():null,r=n?n.provider:null,i=e.isFullyInitialized?e.tools.getTools().map(e=>e.name):[],a=e.getPluginNames(),o=e.getModuleNames(),s=e.getHistory(),c=Date.now()-e.startTime,l={user:0,assistant:0,system:0,tool:0};for(let e of s)e.role in l&&l[e.role]++;return{name:e.name,version:e.version,conversationId:e.conversationId,providers:t,currentProvider:r,tools:i,plugins:a,modules:o,historyLength:s.length,historyStats:{userMessages:l.user,assistantMessages:l.assistant,systemMessages:l.system,toolMessages:l.tool},uptime:c}}async function pr(e){e.logger.debug(`Destroying Robota instance`,{name:e.name});try{if(e.isFullyInitialized&&e.moduleRegistry&&(await e.moduleRegistry.disposeAllModules(),e.logger.debug(`All modules disposed`)),e.executionService){let t=e.executionService.getPlugins();for(let n of t)n.unsubscribeFromModuleEvents&&e.eventEmitter&&await n.unsubscribeFromModuleEvents(e.eventEmitter);e.logger.debug(`ExecutionService plugins cleaned up`)}e.moduleRegistry&&(e.moduleRegistry.clearAllModules(),e.logger.debug(`ModuleRegistry cleared`)),e.eventEmitter&&(await e.eventEmitter.destroy(),e.logger.debug(`EventEmitter disposed`)),e.resetState(),e.logger.info(`Robota instance destroyed successfully`,{name:e.name})}catch(t){throw e.logger.error(`Error during Robota destruction`,{error:t instanceof Error?t.message:String(t)}),t}}function mr(e){return{defaultModel:e.defaultModel||`gpt-4`,defaultProvider:e.defaultProvider||`openai`,maxConcurrentAgents:e.maxConcurrentAgents||100,defaultSystemMessage:e.defaultSystemMessage||`You are a helpful AI assistant.`,strictValidation:e.strictValidation??!0}}function hr(e,t){if(!e.aiProviders||e.aiProviders.length===0)throw new V(`At least one AI provider must be specified in aiProviders array`);let n=e.defaultModel||{provider:e.aiProviders[0]?.name||t.defaultProvider,model:t.defaultModel,temperature:.7,systemMessage:t.defaultSystemMessage};return{id:e.id||gr(),name:e.name||`Unnamed Agent`,aiProviders:e.aiProviders,defaultModel:{provider:n.provider,model:n.model,temperature:n.temperature??.7,...n.maxTokens!==void 0&&{maxTokens:n.maxTokens},...n.topP!==void 0&&{topP:n.topP},systemMessage:n.systemMessage||t.defaultSystemMessage},tools:e.tools||[],plugins:e.plugins||[],metadata:e.metadata||{},...e.logging&&{logging:e.logging},...e.conversationId&&{conversationId:e.conversationId},...e}}function gr(){return`agent_${Date.now()}_${Math.random().toString(36).substring(2,8)}`}function _r(e,t){return e.totalCreated++,e.activeCount++,t?e.fromTemplates++:e.customConfigured++,e.templateUsageRatio=e.totalCreated>0?e.fromTemplates/e.totalCreated:0,e}var vr=class{templates=new Map;logger;constructor(){this.logger=j(`AgentTemplates`),this.logger.info(`AgentTemplates initialized`)}registerTemplate(e){if(!e.id)throw Error(`Template must have an ID`);this.templates.has(e.id)&&this.logger.warn(`Template "${e.id}" is already registered, overriding`),this.templates.set(e.id,e),this.logger.info(`Template "${e.id}" registered successfully`,{templateId:e.id,category:e.category,tags:e.tags})}unregisterTemplate(e){let t=this.templates.delete(e);return t?this.logger.info(`Template "${e}" unregistered`):this.logger.warn(`Attempted to unregister non-existent template "${e}"`),t}getTemplates(){return Array.from(this.templates.values())}getTemplate(e){return this.templates.get(e)}findTemplates(e){return this.getTemplates().filter(t=>!(e.category&&t.category!==e.category||e.tags&&e.tags.length>0&&!e.tags.some(e=>t.tags?.includes(e))||e.provider&&t.config.defaultModel?.provider!==e.provider||e.model&&t.config.defaultModel?.model!==e.model))}applyTemplate(e,t={}){let n=[],r=!1,i={...e.config},a={...i,...t},o=e=>{e in t&&i[e]!==t[e]&&(r=!0,i[e]!==void 0&&n.push(`Override: ${e} changed from "${String(i[e])}" to "${String(t[e])}"`))};t.name!==void 0&&o(`name`),t.systemMessage!==void 0&&o(`systemMessage`);let s=a;return this.logger.debug(`Template applied`,{templateId:e.id,overridesCount:Object.keys(t).length,warningsCount:n.length,modified:r}),{config:s,template:e,warnings:n,modified:r}}hasTemplate(e){return this.templates.has(e)}getTemplateCount(){return this.templates.size}clearAll(){this.templates.clear(),this.logger.info(`All templates cleared`)}getStats(){let e=this.getTemplates(),t=[...new Set(e.map(e=>e.category).filter(e=>typeof e==`string`&&e.length>0))],n=[...new Set(e.flatMap(e=>e.tags||[]))],r=[...new Set(e.map(e=>e.config.defaultModel?.provider).filter(e=>typeof e==`string`&&e.length>0))],i=[...new Set(e.map(e=>e.config.defaultModel?.model).filter(e=>typeof e==`string`&&e.length>0))];return{totalTemplates:e.length,categories:t,tags:n,providers:r,models:i}}},yr=class{agentTemplates;initialized=!1;logger;options;activeAgents;creationStats;lifecycleEvents;constructor(e={},t={}){this.agentTemplates=new vr,this.logger=j(`AgentFactory`),this.options=mr(e),this.activeAgents=new Map,this.creationStats={totalCreated:0,activeCount:0,fromTemplates:0,customConfigured:0,templateUsageRatio:0},this.lifecycleEvents=t,this.logger.debug(`AgentFactory initialized`,{maxConcurrentAgents:this.options.maxConcurrentAgents,strictValidation:this.options.strictValidation,hasDefaultModel:!!this.options.defaultModel,hasDefaultProvider:!!this.options.defaultProvider,hasLifecycleEvents:this.lifecycleEvents!==null})}async initialize(){this.initialized||(this.logger.debug(`Initializing AgentFactory`),this.initialized=!0,this.logger.debug(`AgentFactory initialization completed`))}async createAgent(e,t,n=!1){let r;try{if(this.activeAgents.size>=this.options.maxConcurrentAgents)throw new V(`Maximum concurrent agents limit reached: ${this.options.maxConcurrentAgents}`);if(r=hr(t,this.options),this.options.strictValidation){let e=fn(r);if(!e.isValid)throw new H(`Invalid agent configuration: ${e.errors.join(`, `)}`)}this.lifecycleEvents.beforeCreate&&await this.lifecycleEvents.beforeCreate(r);let i=new e(r),a=i;typeof a.initialize==`function`&&await a.initialize();let o=gr();return this.activeAgents.set(o,i),_r(this.creationStats,n),this.lifecycleEvents.afterCreate&&await this.lifecycleEvents.afterCreate(i,r),this.logger.info(`Agent created successfully`,{agentId:o,model:r.defaultModel.model,provider:r.defaultModel.provider}),i}catch(e){let n=e instanceof Error?e:Error(String(e));throw this.lifecycleEvents.onCreateError&&r&&await this.lifecycleEvents.onCreateError(n,r),this.logger.error(`Failed to create agent`,{error:n.message,model:t.defaultModel?.model,provider:t.defaultModel?.provider,hasTools:!!t.tools?.length}),n}}async createFromTemplate(e,t,n={}){let r=this.agentTemplates.getTemplate(t);if(!r)throw new V(`Template not found: ${t}`);let i=this.applyTemplate(r,n);i.warnings.length>0&&this.logger.warn(`Template application warnings`,{templateId:t,warnings:i.warnings});let a=await this.createAgent(e,i.config,!0);return this.logger.info(`Agent created from template`,{templateId:t,modified:i.modified,warnings:i.warnings.length}),a}registerTemplate(e){this.agentTemplates.registerTemplate(e)}unregisterTemplate(e){return this.agentTemplates.unregisterTemplate(e)}getTemplates(){return this.agentTemplates.getTemplates()}getTemplate(e){return this.agentTemplates.getTemplate(e)}findTemplates(e){return this.agentTemplates.findTemplates(e)}applyTemplate(e,t={}){return this.agentTemplates.applyTemplate(e,t)}async destroyAgent(e){let t=this.activeAgents.get(e);if(!t)return!1;try{let n=t;return typeof n.cleanup==`function`&&await n.cleanup(),this.activeAgents.delete(e),this.creationStats.activeCount--,this.lifecycleEvents.onDestroy&&await this.lifecycleEvents.onDestroy(e),this.logger.info(`Agent destroyed`,{agentId:e}),!0}catch(t){throw this.logger.error(`Error destroying agent`,{agentId:e,error:t instanceof Error?t.message:String(t)}),t}}getCreationStats(){return{...this.creationStats}}getActiveAgents(){return new Map(this.activeAgents)}validateConfiguration(e){return fn(e)}},br=class extends y{providers=new Map;currentProvider;currentModel;constructor(){super()}async doInitialize(){M.debug(`AIProviders initialized`)}async doDispose(){for(let[e,t]of this.providers)try{t.close&&await t.close(),M.debug(`Closed AI provider: ${e}`)}catch(t){M.warn(`Failed to close AI provider ${e}`,{error:t instanceof Error?t.message:String(t)})}this.providers.clear(),this.currentProvider=void 0,this.currentModel=void 0,M.debug(`AIProviders disposed`)}addProvider(e,t){this.ensureInitialized();let n=Q.validateProviderName(e);if(!n.isValid)throw new H(`Invalid provider name: ${n.errors.join(`, `)}`);if(!t||typeof t!=`object`||!t||Array.isArray(t))throw new H(`Provider must be a valid object instance`);if(!t.name||typeof t.name!=`string`)throw new H(`Provider must have a valid name`);if(typeof t.chat!=`function`)throw new H(`Provider must have a chat method`);this.providers.has(e)&&M.warn(`Provider "${e}" is already registered, overriding`,{providerName:e,existingProvider:this.providers.get(e)?.name}),this.providers.set(e,t),M.debug(`AI provider "${e}" registered successfully`,{providerName:e,version:t.version,supportsStreaming:typeof t.chatStream==`function`})}removeProvider(e){if(this.ensureInitialized(),!this.providers.has(e)){M.warn(`Attempted to remove non-existent provider "${e}"`);return}let t=this.providers.get(e);t?.close&&t.close().catch(t=>{M.warn(`Failed to close provider ${e}`,{error:t.message})}),this.providers.delete(e),this.currentProvider===e&&(this.currentProvider=void 0,this.currentModel=void 0,M.debug(`Cleared current provider selection after removing "${e}"`)),M.debug(`AI provider "${e}" removed successfully`)}getProvider(e){return this.ensureInitialized(),this.providers.get(e)}getProviders(){return this.ensureInitialized(),Object.fromEntries(this.providers)}setCurrentProvider(e,t){if(this.ensureInitialized(),!this.providers.get(e))throw new V(`Provider "${e}" is not registered`);this.currentProvider=e,this.currentModel=t,M.debug(`Current AI provider set to "${e}" with model "${t}"`)}getCurrentProvider(){if(this.ensureInitialized(),!(!this.currentProvider||!this.currentModel))return{provider:this.currentProvider,model:this.currentModel}}isConfigured(){return this.ensureInitialized(),!!(this.currentProvider&&this.currentModel&&this.providers.has(this.currentProvider))}getAvailableModels(e){if(this.ensureInitialized(),!this.providers.get(e))throw new V(`Provider "${e}" is not registered`);return M.warn(`getAvailableModels() is deprecated. Models are now handled by providers internally.`),[]}getCurrentProviderInstance(){if(!(!this.isConfigured()||!this.currentProvider))return this.providers.get(this.currentProvider)}getProviderNames(){return this.ensureInitialized(),Array.from(this.providers.keys())}getProvidersByPattern(e){this.ensureInitialized();let t=typeof e==`string`?new RegExp(e):e,n={};for(let[e,r]of this.providers)t.test(e)&&(n[e]=r);return n}supportsStreaming(e){this.ensureInitialized();let t=e||this.currentProvider;if(!t)return!1;let n=this.providers.get(t);return!!(n&&typeof n.chatStream==`function`)}getProviderCount(){return this.ensureInitialized(),this.providers.size}};function xr(e,t,n){if(!e.name||e.name.trim()===``)throw new V(`Module name is required`);if(!e.version||e.version.trim()===``)throw new V(`Module version is required`);let r=e.getModuleType(),i=t.validateTypeDescriptor(r);if(!i.valid)throw new V(`Invalid module type: ${i.errors.join(`, `)}`,{moduleName:e.name,errors:i.errors});i.warnings.length>0&&n.warn(`Module type validation warnings`,{moduleName:e.name,warnings:i.warnings})}async function Sr(e,t,n,r){let i=e.getModuleType();if(!i.dependencies||i.dependencies.length===0)return;for(let n of i.dependencies)if(!t.hasType(n))throw new V(`Module '${e.name}' depends on unregistered type '${n}'`,{moduleName:e.name,dependencyType:n});let a=new Set;for(let e of n.values())a.add(e.getModuleType().type);let o=[];for(let e of i.dependencies)a.has(e)||o.push(e);o.length>0&&r.warn(`Module has unmet dependencies`,{moduleName:e.name,missingDependencies:o})}function Cr(e,t){let n=t.get(e);if(!n)return[];let r=n.getModuleType().type,i=[];for(let[n,a]of t.entries())n!==e&&a.getModuleType().dependencies?.includes(r)&&i.push(n);return i}function wr(e,t){let n={},r=0,i=0,a=0,o=0,s=0,c=0;for(let t of e.values()){let e=t.getModuleType().type;n[e]=(n[e]||0)+1,t.isInitialized()&&r++,t.isEnabled()&&i++}for(let e of t.values())a+=e.totalExecutions,o+=e.successfulExecutions,s+=e.failedExecutions,c+=e.totalExecutionTime;return{totalModules:e.size,initializedModules:r,enabledModules:i,modulesByType:n,totalExecutions:a,totalSuccessfulExecutions:o,totalFailedExecutions:s,averageExecutionTime:a>0?c/a:0}}function Tr(){return[{type:`storage`,category:`storage`,layer:`infrastructure`,capabilities:[`data-persistence`,`data-retrieval`]},{type:`memory-storage`,category:`storage`,layer:`infrastructure`,dependencies:[`storage`],capabilities:[`in-memory-storage`,`fast-access`]},{type:`file-storage`,category:`storage`,layer:`infrastructure`,dependencies:[`storage`],capabilities:[`persistent-storage`,`file-system-access`]},{type:`text-processing`,category:`processing`,layer:`application`,capabilities:[`text-analysis`,`content-transformation`]},{type:`file-processing`,category:`processing`,layer:`application`,dependencies:[`storage`],capabilities:[`file-parsing`,`content-extraction`]},{type:`api-integration`,category:`integration`,layer:`application`,capabilities:[`external-api-access`,`data-synchronization`]},{type:`database-integration`,category:`integration`,layer:`infrastructure`,dependencies:[`storage`],capabilities:[`database-access`,`query-execution`]},{type:`rag`,category:`capability`,layer:`domain`,dependencies:[`storage`,`text-processing`],capabilities:[`document-search`,`context-retrieval`,`semantic-search`]},{type:`speech-processing`,category:`capability`,layer:`domain`,capabilities:[`speech-to-text`,`text-to-speech`,`audio-processing`]},{type:`image-analysis`,category:`capability`,layer:`domain`,capabilities:[`image-recognition`,`visual-analysis`,`content-extraction`]}]}function Er(e,t){let n=[],r=[];if((!e.type||e.type.trim()===``)&&n.push(`Module type is required and cannot be empty`),e.category||n.push(`Module category is required`),e.layer||n.push(`Module layer is required`),e.type&&!/^[a-zA-Z][a-zA-Z0-9-_]*$/.test(e.type)&&n.push(`Module type must start with a letter and contain only letters, numbers, hyphens, and underscores`),e.dependencies){for(let t of e.dependencies)(!t||t.trim()===``)&&n.push(`Dependencies cannot be empty`);e.dependencies.includes(e.type)&&n.push(`Module cannot depend on itself`)}if(e.capabilities)for(let t of e.capabilities)(!t||t.trim()===``)&&n.push(`Capabilities cannot be empty`);if(e.dependencies){let n=[`infrastructure`,`core`,`application`,`domain`,`presentation`],i=n.indexOf(e.layer);for(let a of e.dependencies){let o=t(a);o&&n.indexOf(o.layer)>i&&r.push(`Module '${e.type}' (${e.layer}) depends on '${a}' (${o.layer}) which is in a higher layer`)}}return{valid:n.length===0,errors:n,warnings:r}}function Dr(e,t,n){let r=new Set,i=new Set,a=[],o=[],s=[];for(let r of e){let e=t(r);if(!e){s.push(r);continue}if(e.dependencies)for(let t of e.dependencies)!n(t)&&!s.includes(t)&&s.push(t)}let c=(s,l=[])=>{if(i.has(s)){let e=l.indexOf(s);o.push(l.slice(e).concat([s]));return}if(r.has(s))return;let u=t(s);if(!u)return;i.add(s);let d=[...l,s];if(u.dependencies)for(let t of u.dependencies)(e.includes(t)||n(t))&&c(t,d);i.delete(s),r.add(s),a.push(s)};for(let t of e)r.has(t)||c(t);return{resolved:s.length===0&&o.length===0,order:a,circularDependencies:o,missingDependencies:s}}function Or(e,t){let n=[],r=[],i=new Map;for(let n of e){let e=t(n);e&&(i.has(e.layer)||i.set(e.layer,[]),i.get(e.layer).push(n))}let a=new Map;for(let n of e){let e=t(n);if(e?.capabilities)for(let t of e.capabilities)a.has(t)||a.set(t,[]),a.get(t).push(n)}for(let[e,t]of Array.from(a.entries()))if(t.length>1)for(let r=0;r<t.length;r++)for(let i=r+1;i<t.length;i++){let a=t[r],o=t[i];a&&o&&n.push({module1:a,module2:o,reason:`Both modules provide capability '${e}'`})}return n.length>0&&(r.push(`Consider using only one module per capability`),r.push(`Check if modules can be configured to avoid conflicts`)),!i.has(`infrastructure`)&&e.length>1&&r.push(`Consider adding infrastructure modules for better foundation`),{compatible:n.length===0,conflicts:n,suggestions:r}}function kr(e){let t={core:0,storage:0,processing:0,integration:0,interface:0,capability:0},n={infrastructure:0,core:0,application:0,domain:0,presentation:0},r=0,i=0;for(let a of e.values())t[a.category]++,n[a.layer]++,a.dependencies&&a.dependencies.length>0&&r++,a.capabilities&&a.capabilities.length>0&&i++;return{totalTypes:e.size,typesByCategory:t,typesByLayer:n,typesWithDependencies:r,typesWithCapabilities:i}}var Ar=class{registeredTypes=new Map;logger;constructor(){this.logger=j(`ModuleDescriptorRegistry`),this.registerBuiltinTypes()}registerType(e){let t=this.validateTypeDescriptor(e);if(!t.valid)throw new V(`Invalid module type descriptor: ${t.errors.join(`, `)}`,{type:e.type,errors:t.errors});if(this.registeredTypes.has(e.type)){let t=this.registeredTypes.get(e.type);this.logger.warn(`Overriding existing module type`,{type:e.type,previousCategory:t?.category||`unknown`,newCategory:e.category})}this.registeredTypes.set(e.type,e),this.logger.info(`Module type registered`,{type:e.type,category:e.category,layer:e.layer,dependencies:e.dependencies?.length||0,capabilities:e.capabilities?.length||0})}unregisterType(e){if(!this.registeredTypes.has(e))return!1;let t=this.findDependentTypes(e);if(t.length>0)throw new V(`Cannot unregister module type '${e}' - it is required by: ${t.join(`, `)}`,{type:e,dependentTypes:t});return this.registeredTypes.delete(e),this.logger.info(`Module type unregistered`,{type:e}),!0}getType(e){return this.registeredTypes.get(e)}getAllTypes(){return Array.from(this.registeredTypes.values())}getTypesByCategory(e){return Array.from(this.registeredTypes.values()).filter(t=>t.category===e)}getTypesByLayer(e){return Array.from(this.registeredTypes.values()).filter(t=>t.layer===e)}hasType(e){return this.registeredTypes.has(e)}validateTypeDescriptor(e){return Er(e,e=>this.getType(e))}resolveDependencies(e){return Dr(e,e=>this.getType(e),e=>this.hasType(e))}checkCompatibility(e){return Or(e,e=>this.getType(e))}findDependentTypes(e){let t=[];for(let[n,r]of this.registeredTypes)r.dependencies?.includes(e)&&t.push(n);return t}registerBuiltinTypes(){for(let e of Tr())this.registerType(e);this.logger.info(`Built-in module types registered`,{totalTypes:this.registeredTypes.size})}clearAllTypes(){this.registeredTypes.clear(),this.logger.info(`All module types cleared`)}getStats(){return kr(this.registeredTypes)}};const jr={REGISTERED:`module.registered`,UNREGISTERED:`module.unregistered`};var Mr=class{modules=new Map;moduleOptions=new Map;moduleStatuses=new Map;moduleStats=new Map;registrationOrder=[];initializationOrder=[];typeRegistry;eventEmitter;logger;isDisposing=!1;constructor(e,t){this.eventEmitter=e,this.typeRegistry=t??new Ar,this.logger=j(`ModuleRegistry`)}async registerModule(e,t={}){if(this.isDisposing)throw new V(`Cannot register modules during disposal`);if(xr(e,this.typeRegistry,this.logger),this.modules.has(e.name))throw new V(`Module with name '${e.name}' is already registered`,{moduleName:e.name});t.validateDependencies!==!1&&await Sr(e,this.typeRegistry,this.modules,this.logger),this.modules.set(e.name,e),this.moduleOptions.set(e.name,t.initOptions||{}),this.registrationOrder.push(e.name);let n=e.getModuleType();this.moduleStatuses.set(e.name,{name:e.name,type:n.type,enabled:e.isEnabled(),initialized:!1,hasEventEmitter:!!this.eventEmitter,registrationTime:new Date,dependencies:n.dependencies||[],dependents:[]}),this.moduleStats.set(e.name,{totalExecutions:0,successfulExecutions:0,failedExecutions:0,averageExecutionTime:0,totalExecutionTime:0}),t.autoInitialize&&await this.initializeModule(e.name,t.initTimeout),this.eventEmitter&&await this.eventEmitter.emit(jr.REGISTERED,{data:{moduleName:e.name,moduleType:n.type},timestamp:new Date})}async unregisterModule(e){let t=this.modules.get(e);if(!t)return!1;let n=Cr(e,this.modules);if(n.length>0)throw new V(`Cannot unregister module '${e}' - it is required by: ${n.join(`, `)}`,{moduleName:e,dependents:n});t.isInitialized()&&t.dispose&&await t.dispose(),this.modules.delete(e),this.moduleOptions.delete(e),this.moduleStatuses.delete(e),this.moduleStats.delete(e);let r=this.registrationOrder.indexOf(e);r!==-1&&this.registrationOrder.splice(r,1);let i=this.initializationOrder.indexOf(e);return i!==-1&&this.initializationOrder.splice(i,1),this.eventEmitter&&await this.eventEmitter.emit(jr.UNREGISTERED,{data:{moduleName:e},timestamp:new Date}),!0}async initializeModule(e,t){let n=this.modules.get(e);if(!n)throw new V(`Module '${e}' not found`);if(n.isInitialized())return;let r=this.moduleOptions.get(e),i=n.initialize(r,this.eventEmitter);if(t&&t>0){let n,r=new Promise((r,i)=>{n=setTimeout(()=>{i(Error(`Module '${e}' initialization timed out after ${t}ms`))},t)});await Promise.race([i.then(e=>(clearTimeout(n),e)),r])}else await i;let a=this.moduleStatuses.get(e);a&&(a.initialized=!0,a.initializationTime=new Date),this.initializationOrder.includes(e)||this.initializationOrder.push(e)}async initializeAllModules(e){let t=Array.from(this.modules.keys());if(t.length===0)return;let n=t.map(e=>this.modules.get(e).getModuleType().type),r=this.typeRegistry.resolveDependencies(n);if(!r.resolved){let e=[];throw r.missingDependencies.length>0&&e.push(`Missing dependencies: ${r.missingDependencies.join(`, `)}`),r.circularDependencies.length>0&&e.push(`Circular dependencies: ${r.circularDependencies.map(e=>e.join(` -> `)).join(`; `)}`),new V(`Cannot initialize modules: ${e.join(`; `)}`,{missingDependencies:r.missingDependencies,circularDependencies:r.circularDependencies.map(e=>e.join(` -> `))})}for(let n of r.order){let r=t.find(e=>this.modules.get(e).getModuleType().type===n);r&&await this.initializeModule(r,e)}}async executeModule(e,t){let n=this.modules.get(e);if(!n)throw new V(`Module '${e}' not found`);if(!n.isInitialized())throw new V(`Module '${e}' is not initialized`);if(!n.isEnabled())throw new V(`Module '${e}' is disabled`);let r=this.moduleStats.get(e),i=Date.now();try{if(!n.execute)throw new V(`Module '${e}' does not support execute()`);let a=await n.execute(t),o=Date.now()-i;r.totalExecutions++,r.successfulExecutions++,r.totalExecutionTime+=o,r.averageExecutionTime=r.totalExecutionTime/r.totalExecutions,r.lastExecutionTime=new Date;let s=this.moduleStatuses.get(e);return s&&(s.lastActivity=new Date),a}catch(e){let t=Date.now()-i;throw r.totalExecutions++,r.failedExecutions++,r.totalExecutionTime+=t,r.averageExecutionTime=r.totalExecutionTime/r.totalExecutions,r.lastExecutionTime=new Date,e}}getModule(e){return this.modules.get(e)}getModulesByType(e){return Array.from(this.modules.values()).filter(t=>t.getModuleType().type===e)}getAllModules(){return Array.from(this.modules.values())}getModuleNames(){return Array.from(this.modules.keys())}hasModule(e){return this.modules.has(e)}getModuleStatus(e){return this.moduleStatuses.get(e)}getAllModuleStatuses(){return Array.from(this.moduleStatuses.values())}getModuleStats(e){return this.moduleStats.get(e)}getAllModuleStats(){let e={};for(let[t,n]of this.moduleStats.entries())e[t]={...n};return e}async disposeAllModules(){this.isDisposing=!0;let e=[...this.initializationOrder].reverse();for(let t of e){let e=this.modules.get(t);if(e&&e.isInitialized())try{e.dispose&&await e.dispose();let n=this.moduleStatuses.get(t);n&&(n.initialized=!1)}catch(e){this.logger.error(`Failed to dispose module`,{name:t,error:e instanceof Error?e.message:String(e)})}}this.initializationOrder=[],this.isDisposing=!1}clearAllModules(){this.modules.clear(),this.moduleOptions.clear(),this.moduleStatuses.clear(),this.moduleStats.clear(),this.registrationOrder=[],this.initializationOrder=[],this.isDisposing=!1}getRegistryStats(){return wr(this.modules,this.moduleStats)}},Nr=class{tools=new Map;register(e){if(!e.schema?.name)throw new H(`Tool must have a valid schema with name`);let t=e.schema.name;this.validateToolSchema(e.schema),this.tools.has(t)&&M.warn(`Tool "${t}" is already registered, overriding`,{toolName:t,existingTool:this.tools.get(t)?.constructor.name}),this.tools.set(t,e),M.debug(`Tool "${t}" registered successfully`,{toolName:t,toolType:e.constructor.name,parameters:Object.keys(e.schema.parameters?.properties||{})})}unregister(e){if(!this.tools.has(e)){M.warn(`Attempted to unregister non-existent tool "${e}"`);return}this.tools.delete(e),M.debug(`Tool "${e}" unregistered successfully`)}get(e){return this.tools.get(e)}getAll(){return Array.from(this.tools.values())}getSchemas(){let e=this.getAll();return M.debug(`[TOOL-FLOW] ToolRegistry.getSchemas() - Tools before schema extraction`,{count:e.length,tools:e.map(e=>({name:e.schema?.name??`unnamed`,hasSchema:!!e.schema,schemaType:typeof e.schema,toolType:e.constructor?.name||`unknown`}))}),this.getAll().map(e=>e.schema)}has(e){return this.tools.has(e)}clear(){let e=this.tools.size;this.tools.clear(),M.debug(`Cleared ${e} tools from registry`)}getToolNames(){return Array.from(this.tools.keys())}getToolsByPattern(e){let t=typeof e==`string`?new RegExp(e):e;return this.getAll().filter(e=>t.test(e.schema.name))}size(){return this.tools.size}validateToolSchema(e){if(!e.name||typeof e.name!=`string`)throw new H(`Tool schema must have a valid name`);if(!e.description||typeof e.description!=`string`)throw new H(`Tool schema must have a description`);if(!e.parameters||typeof e.parameters!=`object`||e.parameters===null||Array.isArray(e.parameters))throw new H(`Tool schema must have parameters object`);if(e.parameters.type!==`object`)throw new H(`Tool parameters type must be "object"`);if(e.parameters.properties)for(let t of Object.keys(e.parameters.properties)){let n=e.parameters.properties[t];if(!n?.type)throw new H(`Parameter "${t}" must have a type`);if(![`string`,`number`,`boolean`,`array`,`object`].includes(n.type))throw new H(`Parameter "${t}" has invalid type "${n.type}"`)}if(e.parameters.required){let t=e.parameters.properties||{};for(let n of e.parameters.required)if(!t[n])throw new H(`Required parameter "${n}" is not defined in properties`)}}},Pr=class{schema;fn;eventService;constructor(e,t){this.schema=e,this.fn=t,this.validateConstructorInputs()}getName(){return this.schema.name}setEventService(e){this.eventService=e}async execute(e,t){let n=this.schema.name;if(!this.validate(e))throw new H(`Invalid parameters for tool "${n}": ${this.getValidationErrors(e).join(`, `)}`);let r=Date.now(),i;try{i=await this.fn(e,t)}catch(r){throw r instanceof U||r instanceof H?r:new U(`Function tool execution failed: ${r instanceof Error?r.message:String(r)}`,n,r instanceof Error?r:Error(String(r)),{parameterCount:Object.keys(e||{}).length,hasContext:!!t})}let a=Date.now()-r;return{success:!0,data:i,metadata:{executionTime:a,toolName:n,parameters:e}}}validate(e){return this.getValidationErrors(e).length===0}validateParameters(e){let t=this.getValidationErrors(e);return{isValid:t.length===0,errors:t}}getDescription(){return this.schema.description}getValidationErrors(e){let t=[],n=this.schema.parameters.required||[],r=this.schema.parameters.properties||{};for(let r of n)r in e||t.push(`Missing required parameter: ${r}`);for(let[n,i]of Object.entries(e)){let e=r[n];if(!e){t.push(`Unknown parameter: ${n}`);continue}let a=this.validateParameterType(n,i,e);a&&t.push(a)}return t}validateParameterType(e,t,n){switch(n.type){case`string`:if(typeof t!=`string`)return`Parameter "${e}" must be a string, got ${typeof t}`;break;case`number`:if(typeof t!=`number`||isNaN(t))return`Parameter "${e}" must be a number, got ${typeof t}`;break;case`boolean`:if(typeof t!=`boolean`)return`Parameter "${e}" must be a boolean, got ${typeof t}`;break;case`array`:if(!Array.isArray(t))return`Parameter "${e}" must be an array, got ${typeof t}`;if(n.items)for(let r=0;r<t.length;r++){let i=this.validateParameterType(`${e}[${r}]`,t[r],n.items);if(i)return i}break;case`object`:if(typeof t!=`object`||!t||Array.isArray(t))return`Parameter "${e}" must be an object, got ${typeof t}`;break}if(n.enum&&n.enum.length>0){let r=n.enum,i=!1;for(let e of r)if(t===e){i=!0;break}if(!i)return`Parameter "${e}" must be one of: ${r.join(`, `)}, got ${t}`}}validateConstructorInputs(){if(!this.schema)throw new H(`Tool schema is required`);if(!this.fn||typeof this.fn!=`function`)throw new H(`Tool function is required and must be a function`);if(!this.schema.name)throw new H(`Tool schema must have a name`)}},Fr=class extends y{registry;allowedTools;constructor(){super(),this.registry=new Nr}async doInitialize(){M.debug(`Tools initialized`)}async doDispose(){this.registry.clear(),delete this.allowedTools,M.debug(`Tools disposed`)}addTool(e,t){this.ensureInitialized();let n=new Pr(e,t);this.registry.register(n),M.debug(`Tool "${e.name}" registered successfully`)}removeTool(e){this.ensureInitialized(),this.registry.unregister(e)}getTool(e){return this.ensureInitialized(),this.registry.get(e)}getToolSchema(e){return this.ensureInitialized(),this.registry.get(e)?.schema}getTools(){this.ensureInitialized();let e=this.registry.getSchemas();return this.allowedTools?e.filter(e=>this.allowedTools.includes(e.name)):e}async executeTool(e,t,n){if(this.ensureInitialized(),this.allowedTools&&!this.allowedTools.includes(e))throw new U(`Tool "${e}" is not in the allowed tools list`,e);let r=this.registry.get(e);if(!r)throw new U(`Tool "${e}" is not registered`,e);let i;try{i=await r.execute(t,n)}catch(t){throw t instanceof Error?new U(t.message,e,t):new U(String(t),e)}if(!i.success)throw new U(i.error||`Tool execution failed`,e,void 0,{parameters:JSON.stringify(t),result:JSON.stringify(i)});if(i.data===void 0)throw new U(`Tool execution succeeded but returned no data`,e);return i.data}hasTool(e){return this.ensureInitialized(),this.registry.has(e)}setAllowedTools(e){this.ensureInitialized(),this.allowedTools=[...e],M.debug(`Set allowed tools: ${e.join(`, `)}`)}getAllowedTools(){return this.ensureInitialized(),this.allowedTools?[...this.allowedTools]:void 0}getRegistry(){return this.ensureInitialized(),this.registry}getToolCount(){return this.ensureInitialized(),this.registry.size()}},Ir=class extends Hn{name;version=`1.0.0`;aiProviders;tools;agentFactory;conversationHistory;moduleRegistry;eventEmitter;executionService;eventService;agentEventService;config;conversationId;logger;initializationPromise;isFullyInitialized=!1;startTime;configVersion=1;configUpdatedAt=Date.now();configManager;constructor(e){super(),this.name=e.name,this.config=e,this.conversationId=e.conversationId||`conv_${Date.now()}_${Math.random().toString(36).substr(2,9)}`,this.logger=j(`Robota`),this.startTime=Date.now(),e.logging&&(e.logging.level&&ae(e.logging.level),e.logging.enabled===!1&&ae(`silent`)),Un(e),this.aiProviders=new br,this.tools=new Fr,this.agentFactory=new yr,this.conversationHistory=new Tn,this.eventEmitter=Xn(),this.moduleRegistry=new Mr(this.eventEmitter),this.eventService=e.eventService||he,this.agentEventService=z(this.eventService,{ownerType:`agent`,ownerId:this.conversationId,ownerPath:Zn(this.conversationId,this.config.executionContext)});let t=qn({getName:()=>this.name,getModuleRegistry:()=>this.moduleRegistry,getLogger:()=>this.logger,getIsFullyInitialized:()=>this.isFullyInitialized,ensureFullyInitialized:()=>this.ensureFullyInitialized(),getExecutionService:()=>this.executionService,getAiProviders:()=>this.aiProviders,getTools:()=>this.tools,getEventService:()=>this.eventService,getConfig:()=>this.config,setConfig:e=>{this.config=e},getConfigVersion:()=>this.configVersion,incrementConfigVersion:()=>++this.configVersion,getConfigUpdatedAt:()=>this.configUpdatedAt,setConfigUpdatedAt:e=>{this.configUpdatedAt=e},emitAgentEvent:(e,t)=>this.emitAgentEvent(e,t)});this.moduleManager=t.moduleManager,this.pluginManager=t.pluginManager,this.configManager=t.configManager,Jn(this.config,(e,t)=>this.emitAgentEvent(e,t))}async run(e,t={}){return await this.ensureFullyInitialized(),$n(this.executionDeps(),e,t)}async*runStream(e,t={}){await this.ensureFullyInitialized(),yield*er(this.executionDeps(),e,t)}executionDeps(){return{conversationId:this.conversationId,config:this.config,logger:this.logger,getHistory:()=>this.getHistory(),getExecutionService:()=>this.executionService,emitAgentEvent:(e,t)=>this.emitAgentEvent(e,t)}}getHistory(){return tr(this.conversationHistory,this.conversationId)}getFullHistory(){return nr(this.conversationHistory,this.conversationId)}addHistoryEntry(e){rr(this.conversationHistory,this.conversationId,e)}clearHistory(){ir(this.conversationHistory,this.conversationId)}injectMessage(e,t,n){ar(this.conversationHistory,this.conversationId,e,t,n)}injectRawMessage(e){or(this.conversationHistory,this.conversationId,e)}async updateTools(e){return this.configManager.updateTools(e)}async updateConfiguration(e){return this.configManager.updateConfiguration(e)}async getConfiguration(){return this.configManager.getConfiguration()}setModel(e){this.configManager.setModel(e)}getModel(){return this.configManager.getModel()}registerTool(e){this.configManager.registerTool(e,this.tools)}unregisterTool(e){this.tools.removeTool(e)}getConfig(){return{...this.config}}swapDefaultProvider(e,t){this.aiProviders.addProvider(e.name,e),this.configManager.setModel({provider:e.name,model:t})}getStats(){return fr({name:this.name,version:this.version,conversationId:this.conversationId,startTime:this.startTime,isFullyInitialized:this.isFullyInitialized,aiProviders:this.aiProviders,tools:this.tools,getPluginNames:()=>this.getPluginNames(),getModuleNames:()=>this.getModuleNames(),getHistory:()=>this.getHistory()})}async destroy(){await pr({name:this.name,isFullyInitialized:this.isFullyInitialized,moduleRegistry:this.moduleRegistry,eventEmitter:this.eventEmitter,executionService:this.executionService,logger:this.logger,resetState:()=>{this.isFullyInitialized=!1,this.initializationPromise=void 0}})}async initialize(){await this.ensureFullyInitialized()}async ensureFullyInitialized(){this.isFullyInitialized||(this.initializationPromise||=this.doAsyncInit(),await this.initializationPromise)}doAsyncInit(){return dr({ctx:{config:this.config,aiProviders:this.aiProviders,tools:this.tools,agentFactory:this.agentFactory,conversationHistory:this.conversationHistory,moduleRegistry:this.moduleRegistry,eventEmitter:this.eventEmitter,eventService:this.eventService,logger:this.logger},setExecutionService:e=>{this.executionService=e},setFullyInitialized:e=>{this.isFullyInitialized=e}})}emitAgentEvent(e,t){Yn(this.agentEventService,this.conversationId,this.config.executionContext,e,t)}},Lr=class{store;listener;sequenceId=0;constructor(e,t){this.store=e,this.listener=(e,t,n)=>{if(!n?.ownerPath?.length)throw Error(`[HISTORY-MODULE] Missing ownerPath for ${e}`);let r={eventName:e,sequenceId:this.nextSequenceId(),timestamp:t.timestamp,eventData:t,context:n};this.store.append(r)},t.subscribe(this.listener)}append(e){this.store.append(e)}read(e,t){return this.store.read(e,t)}readStream(e,t){return this.store.readStream(e,t)}getSnapshot(){return this.store.getSnapshot?.()}detach(e){e.unsubscribe(this.listener)}nextSequenceId(){return this.sequenceId+=1,this.sequenceId}};function $(e){if(!(!e||typeof e!=`object`||Array.isArray(e)||e instanceof Date))return e}function Rr(e){return typeof e==`string`?e.length:0}var zr=class{config;methodConfigs=new Map;constructor(e){this.config=e}configureMethod(e,t){return this.methodConfigs.set(e,t),this}configureStandardMethods(){return this.config.sourceType===`agent`&&(this.configureMethod(`run`,{startEvent:N.EXECUTION_START,completeEvent:N.EXECUTION_COMPLETE,errorEvent:N.EXECUTION_ERROR,extractMetadata:(e,t,n)=>({inputLength:Rr(n[0]),conversationId:e.conversationId,options:$(n[1])||{}}),extractResult:e=>({response:e})}),this.configureMethod(`runStream`,{startEvent:N.EXECUTION_START,completeEvent:N.EXECUTION_COMPLETE,errorEvent:N.EXECUTION_ERROR,extractMetadata:(e,t,n)=>({inputLength:Rr(n[0]),conversationId:e.conversationId,streaming:!0,options:$(n[1])||{}})})),this.config.sourceType===`tool`&&this.configureMethod(`execute`,{startEvent:G.CALL_START,completeEvent:G.CALL_COMPLETE,errorEvent:G.CALL_ERROR,extractMetadata:(e,t,n)=>({toolName:$(e.schema)?.name||e.constructor.name,parameters:n[0],parametersCount:$(n[0])?Object.keys($(n[0])||{}).length:0,context:n[1]}),extractResult:e=>({result:typeof $(e)?.data==`string`?$(e)?.data||``:JSON.stringify($(e)?.data),success:$(e)?.success})}),this}wrap(e){return new Proxy(e,{get:(e,t,n)=>{let r=Reflect.get(e,t,n);if(typeof t!=`string`)return r;let i=t;if(typeof r==`function`&&this.methodConfigs.has(i)){let t=this.methodConfigs.get(i);return async(...n)=>{let a=Date.now(),o=this.generateExecutionId(),s=e;try{if(t.startEvent){let e=t.extractMetadata?.(s,i,n)||{};this.emitEvent(t.startEvent,{timestamp:new Date,metadata:{...e,executionId:o,methodName:i,phase:`start`}})}let c=await r.apply(e,n),l=Date.now()-a;if(t.completeEvent){let e=t.extractResult?.(c)||{},r=t.extractMetadata?.(s,i,n)||{};this.emitEvent(t.completeEvent,{timestamp:new Date,...e,metadata:{...r,executionId:o,methodName:i,duration:l,phase:`complete`,success:!0}})}return c}catch(e){let r=Date.now()-a;if(t.errorEvent){let a=t.extractMetadata?.(s,i,n)||{};this.emitEvent(t.errorEvent,{timestamp:new Date,error:e instanceof Error?e.message:String(e),metadata:{...a,executionId:o,methodName:i,duration:r,phase:`error`,errorName:e instanceof Error?e.name:`UnknownError`,success:!1}})}throw e}}}return r}})}emitEvent(e,t){let n={emitterSourceType:this.config.sourceType,emitterSourceId:this.config.sourceId},r={timestamp:new Date,...t.metadata?{metadata:{...n,...t.metadata}}:{metadata:n},...t};this.config.eventService.emit(e,r)}generateExecutionId(){return`${this.config.sourceType}-${this.config.sourceId}-${Date.now()}-${Math.random().toString(36).substr(2,9)}`}};function Br(e,t){let n=new zr(t);return n.configureStandardMethods(),n.wrap(e)}function Vr(e,t,n){return function(r){return Br(r,{eventService:e,sourceType:t,sourceId:n})}}const Hr={safe:`plan`,moderate:`default`,full:`acceptEdits`},Ur={plan:{Bash:`deny`,Read:`auto`,Write:`deny`,Edit:`deny`,Glob:`auto`,Grep:`auto`,WebFetch:`auto`,WebSearch:`auto`},default:{Bash:`approve`,Read:`auto`,Write:`approve`,Edit:`approve`,Glob:`auto`,Grep:`auto`,WebFetch:`auto`,WebSearch:`auto`},acceptEdits:{Bash:`approve`,Read:`auto`,Write:`auto`,Edit:`auto`,Glob:`auto`,Grep:`auto`,WebFetch:`auto`,WebSearch:`auto`},bypassPermissions:{Bash:`auto`,Read:`auto`,Write:`auto`,Edit:`auto`,Glob:`auto`,Grep:`auto`,WebFetch:`auto`,WebSearch:`auto`}},Wr={plan:`deny`,default:`approve`,acceptEdits:`approve`,bypassPermissions:`auto`};function Gr(e){let t=e.replace(/[.+^${}()|[\]\\]/g,`\\$&`).replace(/\*\*/g,`.+`).replace(/\*/g,`.*`);return RegExp(`^${t}$`)}function Kr(e){let t=e.indexOf(`(`);return t===-1?{toolName:e.trim(),argPattern:void 0}:{toolName:e.slice(0,t).trim(),argPattern:e.slice(t+1,e.lastIndexOf(`)`)).trim()}}function qr(e,t){switch(e){case`Bash`:return typeof t.command==`string`?t.command:void 0;case`Read`:case`Write`:case`Edit`:return typeof t.filePath==`string`?t.filePath:void 0;case`Glob`:case`Grep`:return typeof t.pattern==`string`?t.pattern:void 0;default:return}}function Jr(e,t,n){let r=Kr(n);if(r.toolName!==e)return!1;if(r.argPattern===void 0)return!0;let i=qr(e,t);return i===void 0?!1:Gr(r.argPattern).test(i)}function Yr(e,t,n,r={}){let{allow:i=[],deny:a=[]}=r;for(let n of a)if(Jr(e,t,n))return`deny`;for(let n of i)if(Jr(e,t,n))return`auto`;let o=Ur[n][e];return o===void 0?Wr[n]:o}var Xr=class{type=`command`;execute(e,t){let r=(e.timeout??600)*1e3,i=JSON.stringify(t);return new Promise(a=>{let o=[],s=[],c=!1,l=n(`sh`,[`-c`,e.command],{cwd:t.cwd,env:{...process.env,...t.env}});l.stdout.on(`data`,e=>o.push(e)),l.stderr.on(`data`,e=>s.push(e)),l.stdin.on(`error`,()=>{}),l.stdin.write(i),l.stdin.end();let u=setTimeout(()=>{c||(c=!0,l.kill(`SIGTERM`),a({exitCode:1,stdout:``,stderr:`Hook timed out`}))},r);l.on(`close`,e=>{c||(c=!0,clearTimeout(u),a({exitCode:e??1,stdout:Buffer.concat(o).toString(`utf8`),stderr:Buffer.concat(s).toString(`utf8`)}))}),l.on(`error`,e=>{c||(c=!0,clearTimeout(u),a({exitCode:1,stdout:``,stderr:e.message}))})})}};function Zr(e){return e.replace(/\$([A-Za-z_][A-Za-z0-9_]*)/g,(e,t)=>{let n=process.env[t];return n===void 0?e:n})}var Qr=class{type=`http`;async execute(e,t){let n=(e.timeout??10)*1e3,r={"Content-Type":`application/json`};if(e.headers)for(let[t,n]of Object.entries(e.headers))r[t]=Zr(n);try{let i=await fetch(e.url,{method:`POST`,headers:r,body:JSON.stringify(t),signal:AbortSignal.timeout(n)});if(!i.ok)return{exitCode:1,stdout:``,stderr:`HTTP ${i.status} ${i.statusText}`};let a=await i.json();return a.ok?{exitCode:0,stdout:JSON.stringify(a),stderr:``}:{exitCode:2,stdout:``,stderr:a.reason??`Blocked by HTTP hook`}}catch(e){return{exitCode:1,stdout:``,stderr:e instanceof Error?e.message:String(e)}}}};function $r(){return[new Xr,new Qr]}const ei={deny:3,defer:2,ask:1,allow:0};function ti(e){let t=e.trim();if(!t.startsWith(`{`))return null;try{return JSON.parse(t)}catch{return null}}function ni(e,t){if(!e.matcher)return!0;if(!t)return!1;try{return new RegExp(e.matcher).test(t)}catch{return e.matcher===t}}function ri(e){if(e.tool_name)return e.tool_name;if(e.hook_event_name===`SubagentStart`||e.hook_event_name===`SubagentStop`)return e.agent_type??e.agent_id;if(e.hook_event_name===`SessionEnd`)return e.reason}async function ii(e,t,n,r){if(!e)return{blocked:!1,stdout:``};let i=e[t];if(!i||i.length===0)return{blocked:!1,stdout:``};let a=r??$r(),o=new Map;for(let e of a)o.set(e.type,e);let s=[],c=ri(n),l=-1,u,d;for(let e of i){if(!ni(e,c))continue;let r=e.env?{...n,env:{...n.env,...e.env}}:n;for(let n of e.hooks){let e=o.get(n.type);if(!e)continue;let i=await e.execute(n,r);if(i.exitCode===2)return{blocked:!0,reason:i.stderr||`Blocked by hook`,stdout:s.join(`
7
+ `)};if(i.exitCode!==0)continue;let a=ti(i.stdout);if(a!==null){if(a.continue===!1)return{blocked:!0,reason:typeof a.stopReason==`string`?a.stopReason:`Blocked by hook (continue: false)`,stdout:s.join(`
8
+ `)};if(t===`UserPromptSubmit`&&a.decision===`block`){let e=a.hookSpecificOutput,t=typeof e==`object`&&e&&`additionalContext`in e?String(e.additionalContext):void 0;return{blocked:!0,reason:`Blocked by hook (decision: block)`,stdout:t?[...s,t].join(`
9
+ `):s.join(`
10
+ `)}}if(t===`UserPromptSubmit`){let e=a.hookSpecificOutput;if(typeof e==`object`&&e&&`additionalContext`in e){let t=String(e.additionalContext);t&&s.push(t)}}if(t===`PreToolUse`){let e=a.hookSpecificOutput;if(typeof e==`object`&&e){let t=e,n=t.permissionDecision;if(typeof n==`string`&&n in ei){let e=ei[n];if(e>l&&(l=e,u=n),n===`deny`)return{blocked:!0,reason:`Blocked by hook (permissionDecision: deny)`,stdout:s.join(`
11
+ `),permissionDecision:`deny`};e>=l&&t.updatedInput!==void 0&&(d=t.updatedInput)}}}typeof a.systemMessage==`string`&&a.systemMessage&&s.push(a.systemMessage)}else i.stdout.trim()&&s.push(i.stdout.trim())}}let f={blocked:!1,stdout:s.join(`
12
+ `)};return u!==void 0&&(f.permissionDecision=u),d!==void 0&&(f.updatedInput=d),f}export{N as AGENT_EVENTS,P as AGENT_EVENT_PREFIX,se as AbstractAIProvider,v as AbstractAgent,L as AbstractEventService,ln as AbstractExecutor,y as AbstractManager,cn as AbstractPlugin,un as AbstractTool,yr as AgentFactory,vr as AgentTemplates,Ae as AuthenticationError,gt as CLAUDE_MODELS,dt as CONTEXT_ESTIMATE_CHARS_PER_TOKEN,Ie as CacheIntegrityError,Pe as CircuitBreakerOpenError,V as ConfigurationError,ie as ConsoleLogger,Tn as ConversationHistory,wn as ConversationStore,he as DEFAULT_ABSTRACT_EVENT_SERVICE,_t as DEFAULT_CONTEXT_WINDOW,yt as DEFAULT_MAX_OUTPUT,me as DefaultEventService,Dn as ENV_REFERENCE_PREFIX,Z as EVENT_EMITTER_EVENTS,F as EXECUTION_EVENTS,I as EXECUTION_EVENT_PREFIX,Le as ErrorUtils,Vn as EventEmitterPlugin,Lr as EventHistoryModule,zr as ExecutionProxy,Mn as InMemoryEventEmitterMetrics,En as LocalExecutor,Ur as MODE_POLICY,dn as MessageConverter,Ne as ModelNotAvailableError,Me as NetworkError,be as ObservableEventService,ue as PluginCategory,W as PluginError,de as PluginPriority,ke as ProviderError,je as RateLimitError,Ir as Robota,B as RobotaError,k as SilentLogger,Fe as StorageError,ve as StructuredEventService,xe as TASK_EVENTS,Se as TASK_EVENT_PREFIX,G as TOOL_EVENTS,K as TOOL_EVENT_PREFIX,Hr as TRUST_TO_MODE,U as ToolExecutionError,r as TypeUtils,Wr as UNKNOWN_TOOL_FALLBACK,Ce as USER_EVENTS,we as USER_EVENT_PREFIX,H as ValidationError,Q as Validator,o as assertProviderNativeWebToolsAvailable,ye as bindEventServiceOwner,z as bindWithOwnerPath,T as chatEntryToMessage,Rt as collectAssistantUsageMetadata,ge as composeEventName,bn as createAssistantMessage,i as createDefaultProviderCapabilities,Br as createExecutionProxy,j as createLogger,xn as createSystemMessage,Sn as createToolMessage,yn as createUserMessage,pt as estimateContextTokensFromMessages,ft as estimateSerializedContextTokens,Yr as evaluatePermission,l as findProviderDefinition,kn as formatEnvReference,u as formatSupportedProviderTypes,St as formatTokenCount,oe as getGlobalLogLevel,D as getMessagesForAPI,vt as getModelContextWindow,bt as getModelMaxOutput,xt as getModelName,a as getProviderCapabilities,d as getProviderCredentialRequirement,h as getToolEstimatedDuration,g as getToolExecutionSteps,jn as hasUsableSecretReference,O as isAssistantMessage,w as isChatEntry,R as isDefaultEventService,On as isEnvReference,f as isImageGenerationProvider,m as isProgressReportingTool,te as isSystemMessage,ne as isToolMessage,ee as isUserMessage,p as isVideoGenerationProvider,M as logger,E as messageToHistoryEntry,ot as readTokenUsageFromMessage,st as readTokenUsageFromMetadata,An as resolveEnvReference,ii as runHooks,ae as setGlobalLogLevel,_ as setToolProgressCallback,_n as startPeriodicTask,vn as stopPeriodicTask,fn as validateAgentConfig,gn as validateApiKey,hn as validateModelName,mn as validateProviderName,pn as validateUserInput,Vr as withEventEmission};
13
+ //# sourceMappingURL=index.js.map