@mxf-dev/core 2.0.4 → 3.0.0

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 (466) hide show
  1. package/dist/config/ModelContextLimits.d.ts.map +1 -1
  2. package/dist/config/ModelContextLimits.js +7 -1
  3. package/dist/config/ModelContextLimits.js.map +1 -1
  4. package/dist/constants/CoreTools.d.ts +6 -5
  5. package/dist/constants/CoreTools.d.ts.map +1 -1
  6. package/dist/constants/CoreTools.js +6 -5
  7. package/dist/constants/CoreTools.js.map +1 -1
  8. package/dist/constants/DefaultPhaseProfiles.d.ts.map +1 -1
  9. package/dist/constants/DefaultPhaseProfiles.js +29 -0
  10. package/dist/constants/DefaultPhaseProfiles.js.map +1 -1
  11. package/dist/constants/ReservedIdentities.d.ts +14 -0
  12. package/dist/constants/ReservedIdentities.d.ts.map +1 -0
  13. package/dist/constants/ReservedIdentities.js +42 -0
  14. package/dist/constants/ReservedIdentities.js.map +1 -0
  15. package/dist/database/adapters/mongodb/MongoKnowledgeGraphRepository.d.ts +16 -16
  16. package/dist/database/adapters/mongodb/MongoKnowledgeGraphRepository.d.ts.map +1 -1
  17. package/dist/database/adapters/mongodb/MongoKnowledgeGraphRepository.js +98 -36
  18. package/dist/database/adapters/mongodb/MongoKnowledgeGraphRepository.js.map +1 -1
  19. package/dist/events/ClientEventBus.d.ts +28 -0
  20. package/dist/events/ClientEventBus.d.ts.map +1 -1
  21. package/dist/events/ClientEventBus.js +87 -40
  22. package/dist/events/ClientEventBus.js.map +1 -1
  23. package/dist/events/EventBus.d.ts +19 -1
  24. package/dist/events/EventBus.d.ts.map +1 -1
  25. package/dist/events/EventBus.js +23 -0
  26. package/dist/events/EventBus.js.map +1 -1
  27. package/dist/events/EventBusBase.d.ts +37 -6
  28. package/dist/events/EventBusBase.d.ts.map +1 -1
  29. package/dist/events/EventBusBase.js +75 -27
  30. package/dist/events/EventBusBase.js.map +1 -1
  31. package/dist/events/EventNames.d.ts +49 -36
  32. package/dist/events/EventNames.d.ts.map +1 -1
  33. package/dist/events/EventNames.js +38 -36
  34. package/dist/events/EventNames.js.map +1 -1
  35. package/dist/events/PublicEvents.d.ts +5 -1
  36. package/dist/events/PublicEvents.d.ts.map +1 -1
  37. package/dist/events/PublicEvents.js +7 -0
  38. package/dist/events/PublicEvents.js.map +1 -1
  39. package/dist/events/ServerEventBus.d.ts +7 -54
  40. package/dist/events/ServerEventBus.d.ts.map +1 -1
  41. package/dist/events/ServerEventBus.js +10 -96
  42. package/dist/events/ServerEventBus.js.map +1 -1
  43. package/dist/events/event-definitions/ControlLoopEvents.d.ts +35 -0
  44. package/dist/events/event-definitions/ControlLoopEvents.d.ts.map +1 -1
  45. package/dist/events/event-definitions/ControlLoopEvents.js +6 -0
  46. package/dist/events/event-definitions/ControlLoopEvents.js.map +1 -1
  47. package/dist/events/event-definitions/SdkEvents.d.ts +55 -0
  48. package/dist/events/event-definitions/SdkEvents.d.ts.map +1 -0
  49. package/dist/events/event-definitions/SdkEvents.js +36 -0
  50. package/dist/events/event-definitions/SdkEvents.js.map +1 -0
  51. package/dist/events/event-definitions/TaskEvents.d.ts +2 -7
  52. package/dist/events/event-definitions/TaskEvents.d.ts.map +1 -1
  53. package/dist/index.d.ts +4 -0
  54. package/dist/index.d.ts.map +1 -1
  55. package/dist/index.js +2 -0
  56. package/dist/index.js.map +1 -1
  57. package/dist/interfaces/AgentInterfaces.d.ts +5 -0
  58. package/dist/interfaces/AgentInterfaces.d.ts.map +1 -1
  59. package/dist/interfaces/ChannelConfig.d.ts +2 -2
  60. package/dist/interfaces/ChannelConfig.d.ts.map +1 -1
  61. package/dist/interfaces/ConversationMessage.d.ts +1 -1
  62. package/dist/interfaces/ConversationMessage.d.ts.map +1 -1
  63. package/dist/interfaces/IMemoryPersistence.d.ts +47 -1
  64. package/dist/interfaces/IMemoryPersistence.d.ts.map +1 -1
  65. package/dist/interfaces/SocketServiceInterface.d.ts +3 -2
  66. package/dist/interfaces/SocketServiceInterface.d.ts.map +1 -1
  67. package/dist/interfaces/TaskInterfaces.d.ts +14 -1
  68. package/dist/interfaces/TaskInterfaces.d.ts.map +1 -1
  69. package/dist/models/agent.d.ts +0 -1
  70. package/dist/models/agent.d.ts.map +1 -1
  71. package/dist/models/agent.js +0 -5
  72. package/dist/models/agent.js.map +1 -1
  73. package/dist/models/agentIdentityReservation.d.ts +42 -0
  74. package/dist/models/agentIdentityReservation.d.ts.map +1 -0
  75. package/dist/models/agentIdentityReservation.js +52 -0
  76. package/dist/models/agentIdentityReservation.js.map +1 -0
  77. package/dist/models/channel.d.ts +2 -0
  78. package/dist/models/channel.d.ts.map +1 -1
  79. package/dist/models/channel.js.map +1 -1
  80. package/dist/models/channelKey.d.ts +1 -0
  81. package/dist/models/channelKey.d.ts.map +1 -1
  82. package/dist/models/channelKey.js +5 -0
  83. package/dist/models/channelKey.js.map +1 -1
  84. package/dist/models/memory.d.ts +1 -1
  85. package/dist/models/memory.d.ts.map +1 -1
  86. package/dist/models/memory.js +9 -12
  87. package/dist/models/memory.js.map +1 -1
  88. package/dist/models/memoryStrata.d.ts +3 -16
  89. package/dist/models/memoryStrata.d.ts.map +1 -1
  90. package/dist/models/memoryStrata.js +3 -5
  91. package/dist/models/memoryStrata.js.map +1 -1
  92. package/dist/models/plan.d.ts +2 -2
  93. package/dist/models/plan.d.ts.map +1 -1
  94. package/dist/models/plan.js +1 -1
  95. package/dist/models/plan.js.map +1 -1
  96. package/dist/models/taskEffectiveness.d.ts +1 -0
  97. package/dist/models/taskEffectiveness.d.ts.map +1 -1
  98. package/dist/models/taskEffectiveness.js +7 -1
  99. package/dist/models/taskEffectiveness.js.map +1 -1
  100. package/dist/models/user.d.ts +4 -0
  101. package/dist/models/user.d.ts.map +1 -1
  102. package/dist/models/user.js +8 -0
  103. package/dist/models/user.js.map +1 -1
  104. package/dist/protocols/mcp/LlmTestEnvironmentGuard.d.ts +16 -0
  105. package/dist/protocols/mcp/LlmTestEnvironmentGuard.d.ts.map +1 -0
  106. package/dist/protocols/mcp/LlmTestEnvironmentGuard.js +25 -0
  107. package/dist/protocols/mcp/LlmTestEnvironmentGuard.js.map +1 -0
  108. package/dist/protocols/mcp/McpServerTypes.d.ts +9 -0
  109. package/dist/protocols/mcp/McpServerTypes.d.ts.map +1 -1
  110. package/dist/protocols/mcp/providers/AnthropicMcpClient.d.ts.map +1 -1
  111. package/dist/protocols/mcp/providers/AnthropicMcpClient.js +1 -0
  112. package/dist/protocols/mcp/providers/AnthropicMcpClient.js.map +1 -1
  113. package/dist/protocols/mcp/providers/AzureOpenAiMcpClient.d.ts.map +1 -1
  114. package/dist/protocols/mcp/providers/AzureOpenAiMcpClient.js +1 -0
  115. package/dist/protocols/mcp/providers/AzureOpenAiMcpClient.js.map +1 -1
  116. package/dist/protocols/mcp/providers/BaseMcpClient.d.ts +4 -0
  117. package/dist/protocols/mcp/providers/BaseMcpClient.d.ts.map +1 -1
  118. package/dist/protocols/mcp/providers/BaseMcpClient.js +10 -0
  119. package/dist/protocols/mcp/providers/BaseMcpClient.js.map +1 -1
  120. package/dist/protocols/mcp/providers/CustomMcpClient.d.ts.map +1 -1
  121. package/dist/protocols/mcp/providers/CustomMcpClient.js +7 -0
  122. package/dist/protocols/mcp/providers/CustomMcpClient.js.map +1 -1
  123. package/dist/protocols/mcp/providers/GeminiMcpClient.d.ts.map +1 -1
  124. package/dist/protocols/mcp/providers/GeminiMcpClient.js +1 -0
  125. package/dist/protocols/mcp/providers/GeminiMcpClient.js.map +1 -1
  126. package/dist/protocols/mcp/providers/OllamaMcpClient.d.ts +1 -0
  127. package/dist/protocols/mcp/providers/OllamaMcpClient.d.ts.map +1 -1
  128. package/dist/protocols/mcp/providers/OllamaMcpClient.js +1 -0
  129. package/dist/protocols/mcp/providers/OllamaMcpClient.js.map +1 -1
  130. package/dist/protocols/mcp/providers/OpenAiMcpClient.d.ts.map +1 -1
  131. package/dist/protocols/mcp/providers/OpenAiMcpClient.js +1 -0
  132. package/dist/protocols/mcp/providers/OpenAiMcpClient.js.map +1 -1
  133. package/dist/protocols/mcp/providers/OpenRouterMcpClient.d.ts.map +1 -1
  134. package/dist/protocols/mcp/providers/OpenRouterMcpClient.js +2 -0
  135. package/dist/protocols/mcp/providers/OpenRouterMcpClient.js.map +1 -1
  136. package/dist/protocols/mcp/providers/XaiMcpClient.d.ts.map +1 -1
  137. package/dist/protocols/mcp/providers/XaiMcpClient.js +1 -0
  138. package/dist/protocols/mcp/providers/XaiMcpClient.js.map +1 -1
  139. package/dist/protocols/mcp/security/BrowserTargetGuard.d.ts +14 -0
  140. package/dist/protocols/mcp/security/BrowserTargetGuard.d.ts.map +1 -0
  141. package/dist/protocols/mcp/security/BrowserTargetGuard.js +55 -0
  142. package/dist/protocols/mcp/security/BrowserTargetGuard.js.map +1 -0
  143. package/dist/protocols/mcp/security/ExternalMcpRegistrationPolicy.d.ts +24 -0
  144. package/dist/protocols/mcp/security/ExternalMcpRegistrationPolicy.d.ts.map +1 -0
  145. package/dist/protocols/mcp/security/ExternalMcpRegistrationPolicy.js +33 -0
  146. package/dist/protocols/mcp/security/ExternalMcpRegistrationPolicy.js.map +1 -0
  147. package/dist/protocols/mcp/security/HttpTargetGuard.d.ts.map +1 -1
  148. package/dist/protocols/mcp/security/HttpTargetGuard.js +68 -6
  149. package/dist/protocols/mcp/security/HttpTargetGuard.js.map +1 -1
  150. package/dist/protocols/mcp/security/McpSecurityGuard.d.ts.map +1 -1
  151. package/dist/protocols/mcp/security/McpSecurityGuard.js +7 -5
  152. package/dist/protocols/mcp/security/McpSecurityGuard.js.map +1 -1
  153. package/dist/protocols/mcp/security/McpToolPolicy.d.ts +18 -0
  154. package/dist/protocols/mcp/security/McpToolPolicy.d.ts.map +1 -1
  155. package/dist/protocols/mcp/security/McpToolPolicy.js +60 -0
  156. package/dist/protocols/mcp/security/McpToolPolicy.js.map +1 -1
  157. package/dist/protocols/mcp/services/ExternalMcpServerManager.d.ts +118 -5
  158. package/dist/protocols/mcp/services/ExternalMcpServerManager.d.ts.map +1 -1
  159. package/dist/protocols/mcp/services/ExternalMcpServerManager.js +499 -98
  160. package/dist/protocols/mcp/services/ExternalMcpServerManager.js.map +1 -1
  161. package/dist/protocols/mcp/services/ExternalServerConfigs.d.ts +2 -2
  162. package/dist/protocols/mcp/services/ExternalServerConfigs.d.ts.map +1 -1
  163. package/dist/protocols/mcp/services/ExternalServerConfigs.js +25 -8
  164. package/dist/protocols/mcp/services/ExternalServerConfigs.js.map +1 -1
  165. package/dist/protocols/mcp/tools/AnalyticsTools.d.ts +3 -37
  166. package/dist/protocols/mcp/tools/AnalyticsTools.d.ts.map +1 -1
  167. package/dist/protocols/mcp/tools/AnalyticsTools.js +134 -614
  168. package/dist/protocols/mcp/tools/AnalyticsTools.js.map +1 -1
  169. package/dist/protocols/mcp/tools/CodeAnalysisTools.d.ts.map +1 -1
  170. package/dist/protocols/mcp/tools/CodeAnalysisTools.js +16 -13
  171. package/dist/protocols/mcp/tools/CodeAnalysisTools.js.map +1 -1
  172. package/dist/protocols/mcp/tools/EffectivenessTools.d.ts.map +1 -1
  173. package/dist/protocols/mcp/tools/EffectivenessTools.js +94 -30
  174. package/dist/protocols/mcp/tools/EffectivenessTools.js.map +1 -1
  175. package/dist/protocols/mcp/tools/GitTools.d.ts.map +1 -1
  176. package/dist/protocols/mcp/tools/GitTools.js +9 -5
  177. package/dist/protocols/mcp/tools/GitTools.js.map +1 -1
  178. package/dist/protocols/mcp/tools/InfrastructureTools.d.ts +10 -40
  179. package/dist/protocols/mcp/tools/InfrastructureTools.d.ts.map +1 -1
  180. package/dist/protocols/mcp/tools/InfrastructureTools.js +29 -70
  181. package/dist/protocols/mcp/tools/InfrastructureTools.js.map +1 -1
  182. package/dist/protocols/mcp/tools/JsonTools.d.ts.map +1 -1
  183. package/dist/protocols/mcp/tools/JsonTools.js +4 -4
  184. package/dist/protocols/mcp/tools/JsonTools.js.map +1 -1
  185. package/dist/protocols/mcp/tools/KnowledgeGraphTools.d.ts +55 -592
  186. package/dist/protocols/mcp/tools/KnowledgeGraphTools.d.ts.map +1 -1
  187. package/dist/protocols/mcp/tools/KnowledgeGraphTools.js +169 -119
  188. package/dist/protocols/mcp/tools/KnowledgeGraphTools.js.map +1 -1
  189. package/dist/protocols/mcp/tools/MemorySearchTools.d.ts +6 -6
  190. package/dist/protocols/mcp/tools/MemorySearchTools.d.ts.map +1 -1
  191. package/dist/protocols/mcp/tools/MemorySearchTools.js +107 -39
  192. package/dist/protocols/mcp/tools/MemorySearchTools.js.map +1 -1
  193. package/dist/protocols/mcp/tools/MemoryUtilityTools.d.ts +4 -5
  194. package/dist/protocols/mcp/tools/MemoryUtilityTools.d.ts.map +1 -1
  195. package/dist/protocols/mcp/tools/MemoryUtilityTools.js +59 -208
  196. package/dist/protocols/mcp/tools/MemoryUtilityTools.js.map +1 -1
  197. package/dist/protocols/mcp/tools/PlanningTools.d.ts +2 -1
  198. package/dist/protocols/mcp/tools/PlanningTools.d.ts.map +1 -1
  199. package/dist/protocols/mcp/tools/PlanningTools.js +111 -49
  200. package/dist/protocols/mcp/tools/PlanningTools.js.map +1 -1
  201. package/dist/protocols/mcp/tools/ProjectContextTools.d.ts.map +1 -1
  202. package/dist/protocols/mcp/tools/ProjectContextTools.js +18 -12
  203. package/dist/protocols/mcp/tools/ProjectContextTools.js.map +1 -1
  204. package/dist/protocols/mcp/tools/SafetyTools.d.ts.map +1 -1
  205. package/dist/protocols/mcp/tools/SafetyTools.js +16 -13
  206. package/dist/protocols/mcp/tools/SafetyTools.js.map +1 -1
  207. package/dist/protocols/mcp/tools/SearchProjectTools.d.ts +24 -7
  208. package/dist/protocols/mcp/tools/SearchProjectTools.d.ts.map +1 -1
  209. package/dist/protocols/mcp/tools/SearchProjectTools.js +226 -126
  210. package/dist/protocols/mcp/tools/SearchProjectTools.js.map +1 -1
  211. package/dist/protocols/mcp/tools/TaskPlanningTools.d.ts +0 -32
  212. package/dist/protocols/mcp/tools/TaskPlanningTools.d.ts.map +1 -1
  213. package/dist/protocols/mcp/tools/TaskPlanningTools.js +363 -450
  214. package/dist/protocols/mcp/tools/TaskPlanningTools.js.map +1 -1
  215. package/dist/protocols/mcp/tools/TestTools.d.ts.map +1 -1
  216. package/dist/protocols/mcp/tools/TestTools.js +18 -11
  217. package/dist/protocols/mcp/tools/TestTools.js.map +1 -1
  218. package/dist/protocols/mcp/tools/TypeScriptTools.d.ts.map +1 -1
  219. package/dist/protocols/mcp/tools/TypeScriptTools.js +22 -12
  220. package/dist/protocols/mcp/tools/TypeScriptTools.js.map +1 -1
  221. package/dist/protocols/mcp/tools/UserInputTools.d.ts.map +1 -1
  222. package/dist/protocols/mcp/tools/UserInputTools.js +14 -1
  223. package/dist/protocols/mcp/tools/UserInputTools.js.map +1 -1
  224. package/dist/protocols/mcp/tools/UserMemoryTools.d.ts +3 -1
  225. package/dist/protocols/mcp/tools/UserMemoryTools.d.ts.map +1 -1
  226. package/dist/protocols/mcp/tools/UserMemoryTools.js +27 -62
  227. package/dist/protocols/mcp/tools/UserMemoryTools.js.map +1 -1
  228. package/dist/protocols/mcp/tools/shell/ShellExecuteHandler.d.ts.map +1 -1
  229. package/dist/protocols/mcp/tools/shell/ShellExecuteHandler.js +14 -60
  230. package/dist/protocols/mcp/tools/shell/ShellExecuteHandler.js.map +1 -1
  231. package/dist/protocols/mcp/tools/shell/ShellSandbox.d.ts.map +1 -1
  232. package/dist/protocols/mcp/tools/shell/ShellSandbox.js +9 -27
  233. package/dist/protocols/mcp/tools/shell/ShellSandbox.js.map +1 -1
  234. package/dist/repositories/interfaces/IKnowledgeGraphRepository.d.ts +40 -30
  235. package/dist/repositories/interfaces/IKnowledgeGraphRepository.d.ts.map +1 -1
  236. package/dist/schemas/EventPayloadSchema.d.ts +28 -0
  237. package/dist/schemas/EventPayloadSchema.d.ts.map +1 -1
  238. package/dist/schemas/EventPayloadSchema.js +30 -1
  239. package/dist/schemas/EventPayloadSchema.js.map +1 -1
  240. package/dist/schemas/MxpProtocolSchemas.d.ts +6 -6
  241. package/dist/services/AgentPerformanceService.d.ts +11 -0
  242. package/dist/services/AgentPerformanceService.d.ts.map +1 -1
  243. package/dist/services/AgentPerformanceService.js +59 -33
  244. package/dist/services/AgentPerformanceService.js.map +1 -1
  245. package/dist/services/AutoCorrectionService.d.ts +3 -0
  246. package/dist/services/AutoCorrectionService.d.ts.map +1 -1
  247. package/dist/services/AutoCorrectionService.js +19 -2
  248. package/dist/services/AutoCorrectionService.js.map +1 -1
  249. package/dist/services/BackgroundTaskManager.d.ts +23 -7
  250. package/dist/services/BackgroundTaskManager.d.ts.map +1 -1
  251. package/dist/services/BackgroundTaskManager.js +137 -57
  252. package/dist/services/BackgroundTaskManager.js.map +1 -1
  253. package/dist/services/BrowserManager.d.ts +2 -0
  254. package/dist/services/BrowserManager.d.ts.map +1 -1
  255. package/dist/services/BrowserManager.js +18 -15
  256. package/dist/services/BrowserManager.js.map +1 -1
  257. package/dist/services/ChannelContextMemoryOperations.d.ts +8 -1
  258. package/dist/services/ChannelContextMemoryOperations.d.ts.map +1 -1
  259. package/dist/services/ChannelContextMemoryOperations.js +89 -165
  260. package/dist/services/ChannelContextMemoryOperations.js.map +1 -1
  261. package/dist/services/ChannelContextMessageOperations.d.ts +4 -3
  262. package/dist/services/ChannelContextMessageOperations.d.ts.map +1 -1
  263. package/dist/services/ChannelContextMessageOperations.js +72 -212
  264. package/dist/services/ChannelContextMessageOperations.js.map +1 -1
  265. package/dist/services/MemoryService.d.ts +52 -21
  266. package/dist/services/MemoryService.d.ts.map +1 -1
  267. package/dist/services/MemoryService.js +775 -548
  268. package/dist/services/MemoryService.js.map +1 -1
  269. package/dist/services/PatternLearningService.d.ts +5 -0
  270. package/dist/services/PatternLearningService.d.ts.map +1 -1
  271. package/dist/services/PatternLearningService.js +26 -3
  272. package/dist/services/PatternLearningService.js.map +1 -1
  273. package/dist/services/PerformanceOptimizationService.d.ts +2 -1
  274. package/dist/services/PerformanceOptimizationService.d.ts.map +1 -1
  275. package/dist/services/PerformanceOptimizationService.js +21 -6
  276. package/dist/services/PerformanceOptimizationService.js.map +1 -1
  277. package/dist/services/PredictiveAnalyticsService.d.ts +1 -0
  278. package/dist/services/PredictiveAnalyticsService.d.ts.map +1 -1
  279. package/dist/services/PredictiveAnalyticsService.js +18 -6
  280. package/dist/services/PredictiveAnalyticsService.js.map +1 -1
  281. package/dist/services/ProactiveValidationService.d.ts +6 -0
  282. package/dist/services/ProactiveValidationService.d.ts.map +1 -1
  283. package/dist/services/ProactiveValidationService.js +58 -39
  284. package/dist/services/ProactiveValidationService.js.map +1 -1
  285. package/dist/services/TaskEffectivenessService.d.ts +55 -31
  286. package/dist/services/TaskEffectivenessService.d.ts.map +1 -1
  287. package/dist/services/TaskEffectivenessService.js +243 -125
  288. package/dist/services/TaskEffectivenessService.js.map +1 -1
  289. package/dist/services/ToolExecutionInterceptor.d.ts +4 -0
  290. package/dist/services/ToolExecutionInterceptor.d.ts.map +1 -1
  291. package/dist/services/ToolExecutionInterceptor.js +31 -5
  292. package/dist/services/ToolExecutionInterceptor.js.map +1 -1
  293. package/dist/services/UserInputRequestManager.d.ts +13 -3
  294. package/dist/services/UserInputRequestManager.d.ts.map +1 -1
  295. package/dist/services/UserInputRequestManager.js +42 -6
  296. package/dist/services/UserInputRequestManager.js.map +1 -1
  297. package/dist/services/UserMemoryService.d.ts +2 -0
  298. package/dist/services/UserMemoryService.d.ts.map +1 -1
  299. package/dist/services/UserMemoryService.js +9 -4
  300. package/dist/services/UserMemoryService.js.map +1 -1
  301. package/dist/services/ValidationAnalyticsService.d.ts +4 -0
  302. package/dist/services/ValidationAnalyticsService.d.ts.map +1 -1
  303. package/dist/services/ValidationAnalyticsService.js +30 -8
  304. package/dist/services/ValidationAnalyticsService.js.map +1 -1
  305. package/dist/services/ValidationCacheService.d.ts +3 -1
  306. package/dist/services/ValidationCacheService.d.ts.map +1 -1
  307. package/dist/services/ValidationCacheService.js +25 -4
  308. package/dist/services/ValidationCacheService.js.map +1 -1
  309. package/dist/services/ValidationMiddleware.d.ts +7 -0
  310. package/dist/services/ValidationMiddleware.d.ts.map +1 -1
  311. package/dist/services/ValidationMiddleware.js +53 -10
  312. package/dist/services/ValidationMiddleware.js.map +1 -1
  313. package/dist/services/ValidationPerformanceService.d.ts +3 -0
  314. package/dist/services/ValidationPerformanceService.d.ts.map +1 -1
  315. package/dist/services/ValidationPerformanceService.js +28 -11
  316. package/dist/services/ValidationPerformanceService.js.map +1 -1
  317. package/dist/services/WebSearchService.d.ts.map +1 -1
  318. package/dist/services/WebSearchService.js +9 -0
  319. package/dist/services/WebSearchService.js.map +1 -1
  320. package/dist/services/dag/TaskDagService.d.ts +3 -0
  321. package/dist/services/dag/TaskDagService.d.ts.map +1 -1
  322. package/dist/services/dag/TaskDagService.js +18 -0
  323. package/dist/services/dag/TaskDagService.js.map +1 -1
  324. package/dist/services/kg/EntityQValueManager.d.ts +3 -1
  325. package/dist/services/kg/EntityQValueManager.d.ts.map +1 -1
  326. package/dist/services/kg/EntityQValueManager.js +10 -10
  327. package/dist/services/kg/EntityQValueManager.js.map +1 -1
  328. package/dist/services/kg/GraphSurpriseCalculator.d.ts +0 -4
  329. package/dist/services/kg/GraphSurpriseCalculator.d.ts.map +1 -1
  330. package/dist/services/kg/GraphSurpriseCalculator.js +0 -9
  331. package/dist/services/kg/GraphSurpriseCalculator.js.map +1 -1
  332. package/dist/services/kg/KnowledgeGraphService.d.ts +12 -12
  333. package/dist/services/kg/KnowledgeGraphService.d.ts.map +1 -1
  334. package/dist/services/kg/KnowledgeGraphService.js +43 -51
  335. package/dist/services/kg/KnowledgeGraphService.js.map +1 -1
  336. package/dist/services/kg/OrparGraphIntegration.d.ts.map +1 -1
  337. package/dist/services/kg/OrparGraphIntegration.js +6 -5
  338. package/dist/services/kg/OrparGraphIntegration.js.map +1 -1
  339. package/dist/services/orpar-memory/CycleConsolidationTrigger.d.ts +1 -0
  340. package/dist/services/orpar-memory/CycleConsolidationTrigger.d.ts.map +1 -1
  341. package/dist/services/orpar-memory/CycleConsolidationTrigger.js +8 -1
  342. package/dist/services/orpar-memory/CycleConsolidationTrigger.js.map +1 -1
  343. package/dist/services/orpar-memory/OrparMemoryCoordinator.d.ts +8 -1
  344. package/dist/services/orpar-memory/OrparMemoryCoordinator.d.ts.map +1 -1
  345. package/dist/services/orpar-memory/OrparMemoryCoordinator.js +93 -45
  346. package/dist/services/orpar-memory/OrparMemoryCoordinator.js.map +1 -1
  347. package/dist/services/orpar-memory/SurpriseOrparAdapter.d.ts +1 -0
  348. package/dist/services/orpar-memory/SurpriseOrparAdapter.d.ts.map +1 -1
  349. package/dist/services/orpar-memory/SurpriseOrparAdapter.js +8 -1
  350. package/dist/services/orpar-memory/SurpriseOrparAdapter.js.map +1 -1
  351. package/dist/types/ChannelContext.d.ts +2 -1
  352. package/dist/types/ChannelContext.d.ts.map +1 -1
  353. package/dist/types/EffectivenessTypes.d.ts +4 -1
  354. package/dist/types/EffectivenessTypes.d.ts.map +1 -1
  355. package/dist/types/TaskCompletionTypes.d.ts +7 -5
  356. package/dist/types/TaskCompletionTypes.d.ts.map +1 -1
  357. package/dist/types/TaskTypes.d.ts +8 -1
  358. package/dist/types/TaskTypes.d.ts.map +1 -1
  359. package/dist/utils/GlobMatcher.d.ts +37 -0
  360. package/dist/utils/GlobMatcher.d.ts.map +1 -0
  361. package/dist/utils/GlobMatcher.js +131 -0
  362. package/dist/utils/GlobMatcher.js.map +1 -0
  363. package/package.json +1 -1
  364. package/src/config/ModelContextLimits.ts +7 -1
  365. package/src/constants/CoreTools.ts +6 -5
  366. package/src/constants/DefaultPhaseProfiles.ts +29 -0
  367. package/src/constants/ReservedIdentities.ts +51 -0
  368. package/src/database/adapters/mongodb/MongoKnowledgeGraphRepository.ts +115 -36
  369. package/src/events/ClientEventBus.ts +117 -48
  370. package/src/events/EventBus.ts +32 -2
  371. package/src/events/EventBusBase.ts +132 -39
  372. package/src/events/EventNames.ts +43 -36
  373. package/src/events/PublicEvents.ts +8 -0
  374. package/src/events/ServerEventBus.ts +9 -128
  375. package/src/events/event-definitions/ControlLoopEvents.ts +12 -0
  376. package/src/events/event-definitions/SdkEvents.ts +58 -0
  377. package/src/events/event-definitions/TaskEvents.ts +2 -2
  378. package/src/index.ts +15 -0
  379. package/src/interfaces/AgentInterfaces.ts +5 -0
  380. package/src/interfaces/ChannelConfig.ts +2 -2
  381. package/src/interfaces/ConversationMessage.ts +5 -0
  382. package/src/interfaces/IMemoryPersistence.ts +55 -1
  383. package/src/interfaces/SocketServiceInterface.ts +3 -2
  384. package/src/interfaces/TaskInterfaces.ts +16 -1
  385. package/src/models/agent.ts +0 -6
  386. package/src/models/agentIdentityReservation.ts +77 -0
  387. package/src/models/channel.ts +2 -0
  388. package/src/models/channelKey.ts +10 -0
  389. package/src/models/memory.ts +18 -19
  390. package/src/models/memoryStrata.ts +9 -23
  391. package/src/models/plan.ts +3 -3
  392. package/src/models/taskEffectiveness.ts +9 -2
  393. package/src/models/user.ts +12 -0
  394. package/src/protocols/mcp/LlmTestEnvironmentGuard.ts +30 -0
  395. package/src/protocols/mcp/McpServerTypes.ts +9 -0
  396. package/src/protocols/mcp/providers/AnthropicMcpClient.ts +2 -0
  397. package/src/protocols/mcp/providers/AzureOpenAiMcpClient.ts +1 -0
  398. package/src/protocols/mcp/providers/BaseMcpClient.ts +13 -0
  399. package/src/protocols/mcp/providers/CustomMcpClient.ts +7 -0
  400. package/src/protocols/mcp/providers/GeminiMcpClient.ts +2 -0
  401. package/src/protocols/mcp/providers/OllamaMcpClient.ts +3 -1
  402. package/src/protocols/mcp/providers/OpenAiMcpClient.ts +2 -0
  403. package/src/protocols/mcp/providers/OpenRouterMcpClient.ts +3 -0
  404. package/src/protocols/mcp/providers/XaiMcpClient.ts +2 -0
  405. package/src/protocols/mcp/security/BrowserTargetGuard.ts +64 -0
  406. package/src/protocols/mcp/security/ExternalMcpRegistrationPolicy.ts +38 -0
  407. package/src/protocols/mcp/security/HttpTargetGuard.ts +77 -6
  408. package/src/protocols/mcp/security/McpSecurityGuard.ts +7 -5
  409. package/src/protocols/mcp/security/McpToolPolicy.ts +74 -0
  410. package/src/protocols/mcp/services/ExternalMcpServerManager.ts +656 -111
  411. package/src/protocols/mcp/services/ExternalServerConfigs.ts +26 -8
  412. package/src/protocols/mcp/tools/AnalyticsTools.ts +167 -641
  413. package/src/protocols/mcp/tools/CodeAnalysisTools.ts +44 -14
  414. package/src/protocols/mcp/tools/EffectivenessTools.ts +185 -45
  415. package/src/protocols/mcp/tools/GitTools.ts +15 -5
  416. package/src/protocols/mcp/tools/InfrastructureTools.ts +42 -90
  417. package/src/protocols/mcp/tools/JsonTools.ts +7 -4
  418. package/src/protocols/mcp/tools/KnowledgeGraphTools.ts +313 -164
  419. package/src/protocols/mcp/tools/MemorySearchTools.ts +158 -46
  420. package/src/protocols/mcp/tools/MemoryUtilityTools.ts +85 -232
  421. package/src/protocols/mcp/tools/PlanningTools.ts +137 -59
  422. package/src/protocols/mcp/tools/ProjectContextTools.ts +33 -12
  423. package/src/protocols/mcp/tools/SafetyTools.ts +49 -13
  424. package/src/protocols/mcp/tools/SearchProjectTools.ts +294 -153
  425. package/src/protocols/mcp/tools/TaskPlanningTools.ts +437 -514
  426. package/src/protocols/mcp/tools/TestTools.ts +41 -11
  427. package/src/protocols/mcp/tools/TypeScriptTools.ts +61 -12
  428. package/src/protocols/mcp/tools/UserInputTools.ts +15 -1
  429. package/src/protocols/mcp/tools/UserMemoryTools.ts +27 -62
  430. package/src/protocols/mcp/tools/shell/ShellExecuteHandler.ts +26 -84
  431. package/src/protocols/mcp/tools/shell/ShellSandbox.ts +13 -31
  432. package/src/repositories/interfaces/IKnowledgeGraphRepository.ts +45 -27
  433. package/src/schemas/EventPayloadSchema.ts +45 -1
  434. package/src/services/AgentPerformanceService.ts +85 -36
  435. package/src/services/AutoCorrectionService.ts +25 -6
  436. package/src/services/BackgroundTaskManager.ts +183 -76
  437. package/src/services/BrowserManager.ts +20 -16
  438. package/src/services/ChannelContextMemoryOperations.ts +169 -202
  439. package/src/services/ChannelContextMessageOperations.ts +112 -274
  440. package/src/services/MemoryService.ts +1053 -760
  441. package/src/services/PatternLearningService.ts +32 -7
  442. package/src/services/PerformanceOptimizationService.ts +26 -9
  443. package/src/services/PredictiveAnalyticsService.ts +23 -10
  444. package/src/services/ProactiveValidationService.ts +66 -40
  445. package/src/services/TaskEffectivenessService.ts +421 -206
  446. package/src/services/ToolExecutionInterceptor.ts +40 -9
  447. package/src/services/UserInputRequestManager.ts +51 -6
  448. package/src/services/UserMemoryService.ts +12 -3
  449. package/src/services/ValidationAnalyticsService.ts +36 -11
  450. package/src/services/ValidationCacheService.ts +30 -7
  451. package/src/services/ValidationMiddleware.ts +62 -14
  452. package/src/services/ValidationPerformanceService.ts +47 -25
  453. package/src/services/WebSearchService.ts +16 -4
  454. package/src/services/dag/TaskDagService.ts +20 -1
  455. package/src/services/kg/EntityQValueManager.ts +21 -10
  456. package/src/services/kg/GraphSurpriseCalculator.ts +0 -14
  457. package/src/services/kg/KnowledgeGraphService.ts +56 -48
  458. package/src/services/kg/OrparGraphIntegration.ts +11 -5
  459. package/src/services/orpar-memory/CycleConsolidationTrigger.ts +10 -1
  460. package/src/services/orpar-memory/OrparMemoryCoordinator.ts +142 -71
  461. package/src/services/orpar-memory/SurpriseOrparAdapter.ts +10 -1
  462. package/src/types/ChannelContext.ts +3 -1
  463. package/src/types/EffectivenessTypes.ts +6 -2
  464. package/src/types/TaskCompletionTypes.ts +9 -9
  465. package/src/types/TaskTypes.ts +12 -1
  466. package/src/utils/GlobMatcher.ts +157 -0
@@ -27,14 +27,12 @@ import { v4 as uuidv4 } from 'uuid';
27
27
  import { Logger } from '../utils/Logger.js';
28
28
  import { EventBus } from '../events/EventBus.js';
29
29
  import { Events } from '../events/EventNames.js';
30
- import { AgentPerformanceService } from './AgentPerformanceService.js';
31
30
  import { TaskEffectivenessModel } from '../models/taskEffectiveness.js';
32
31
  /**
33
32
  * Service for tracking and analyzing task effectiveness
34
33
  */
35
34
  export class TaskEffectivenessService {
36
35
  logger;
37
- performanceService;
38
36
  static instance;
39
37
  // Active task tracking
40
38
  activeTasks = new Map();
@@ -59,7 +57,6 @@ export class TaskEffectivenessService {
59
57
  };
60
58
  constructor() {
61
59
  this.logger = new Logger('info', 'TaskEffectivenessService', 'server');
62
- this.performanceService = AgentPerformanceService.getInstance();
63
60
  this.setupEventListeners();
64
61
  }
65
62
  static getInstance() {
@@ -68,15 +65,35 @@ export class TaskEffectivenessService {
68
65
  }
69
66
  return TaskEffectivenessService.instance;
70
67
  }
68
+ getTaskKey(taskId, agentId, channelId) {
69
+ return JSON.stringify([agentId, channelId, taskId]);
70
+ }
71
+ requireTenantIdentity(agentId, channelId) {
72
+ if (!agentId?.trim() || !channelId?.trim() ||
73
+ agentId !== agentId.trim() || channelId !== channelId.trim()) {
74
+ throw new Error('Agent ID and channel ID are required');
75
+ }
76
+ }
77
+ requireTaskIdentity(taskId) {
78
+ if (!taskId?.trim() || taskId !== taskId.trim()) {
79
+ throw new Error('A canonical task ID is required');
80
+ }
81
+ }
71
82
  /**
72
83
  * Start tracking a new task
73
84
  */
74
85
  startTask(definition) {
75
86
  try {
76
- if (!definition.channelId || !definition.taskType || !definition.description) {
87
+ if (!definition.agentId || !definition.channelId || !definition.taskType || !definition.description) {
77
88
  throw new Error('Missing required task definition fields');
78
89
  }
90
+ this.requireTenantIdentity(definition.agentId, definition.channelId);
79
91
  const taskId = definition.taskId || uuidv4();
92
+ this.requireTaskIdentity(taskId);
93
+ const taskKey = this.getTaskKey(taskId, definition.agentId, definition.channelId);
94
+ if (this.activeTasks.has(taskKey)) {
95
+ throw new Error(`Task ${taskId} is already being tracked for this agent and channel`);
96
+ }
80
97
  const metrics = {
81
98
  taskId,
82
99
  metadata: {
@@ -91,7 +108,7 @@ export class TaskEffectivenessService {
91
108
  uniqueTools: [],
92
109
  agentInteractions: 0,
93
110
  humanInterventions: 0,
94
- autonomyScore: 1.0 // Starts at 100%, decreases with interventions
111
+ autonomyScore: 1.0
95
112
  },
96
113
  quality: {
97
114
  goalAchieved: false,
@@ -106,26 +123,28 @@ export class TaskEffectivenessService {
106
123
  memoryOperations: 0
107
124
  },
108
125
  collaboration: {
109
- participatingAgents: [],
126
+ participatingAgents: [definition.agentId],
110
127
  messageCount: 0,
111
128
  coordinationCount: 0,
112
129
  knowledgeTransfers: 0,
113
130
  collaborationScore: 0
114
131
  }
115
132
  };
116
- this.activeTasks.set(taskId, metrics);
117
- this.taskDefinitions.set(taskId, definition);
118
- this.taskEvents.set(taskId, []);
119
- // Emit task started event
133
+ this.activeTasks.set(taskKey, metrics);
134
+ this.taskDefinitions.set(taskKey, definition);
135
+ this.taskEvents.set(taskKey, []);
120
136
  this.recordEvent({
121
137
  eventId: uuidv4(),
122
138
  taskId,
139
+ agentId: definition.agentId,
140
+ channelId: definition.channelId,
123
141
  timestamp: Date.now(),
124
142
  type: 'start',
125
143
  details: { definition }
126
144
  });
127
- EventBus.server.emit(Events.Analytics.TASK_STARTED, createBaseEventPayload(Events.Analytics.TASK_STARTED, 'system', definition.channelId, {
145
+ EventBus.server.emit(Events.Analytics.TASK_STARTED, createBaseEventPayload(Events.Analytics.TASK_STARTED, definition.agentId, definition.channelId, {
128
146
  taskId,
147
+ agentId: definition.agentId,
129
148
  channelId: definition.channelId,
130
149
  taskType: definition.taskType,
131
150
  timestamp: new Date()
@@ -141,60 +160,57 @@ export class TaskEffectivenessService {
141
160
  * Record a task execution event
142
161
  */
143
162
  recordEvent(event) {
144
- try {
145
- if (!event.taskId || !event.type) {
146
- this.logger.warn('Invalid event: missing taskId or type');
147
- return;
148
- }
149
- const events = this.taskEvents.get(event.taskId);
150
- if (events) {
151
- events.push(event);
152
- }
153
- // Update metrics based on event
154
- const metrics = this.activeTasks.get(event.taskId);
155
- if (metrics) {
156
- this.updateMetricsFromEvent(metrics, event);
157
- }
158
- else {
159
- }
160
- // Emit event for analytics tracking
161
- EventBus.server.emit(Events.Analytics.TASK_EFFECTIVENESS_EVENT, createBaseEventPayload(Events.Analytics.TASK_EFFECTIVENESS_EVENT, event.agentId || 'unknown', 'global', {
162
- taskId: event.taskId,
163
- agentId: event.agentId || 'unknown',
164
- eventType: event.type,
165
- details: event.details,
166
- timestamp: new Date()
167
- }));
168
- }
169
- catch (error) {
170
- this.logger.error(`Failed to record event: ${error}`);
171
- }
163
+ if (!event.taskId || !event.type) {
164
+ throw new Error('Task ID and event type are required');
165
+ }
166
+ this.requireTaskIdentity(event.taskId);
167
+ this.requireTenantIdentity(event.agentId, event.channelId);
168
+ const taskKey = this.getTaskKey(event.taskId, event.agentId, event.channelId);
169
+ const events = this.taskEvents.get(taskKey);
170
+ const metrics = this.activeTasks.get(taskKey);
171
+ if (!events || !metrics) {
172
+ throw new Error(`Active task ${event.taskId} was not found for this agent and channel`);
173
+ }
174
+ events.push(event);
175
+ this.updateMetricsFromEvent(metrics, event);
176
+ EventBus.server.emit(Events.Analytics.TASK_EFFECTIVENESS_EVENT, createBaseEventPayload(Events.Analytics.TASK_EFFECTIVENESS_EVENT, event.agentId, event.channelId, {
177
+ taskId: event.taskId,
178
+ agentId: event.agentId,
179
+ channelId: event.channelId,
180
+ eventType: event.type,
181
+ details: event.details,
182
+ timestamp: new Date()
183
+ }));
172
184
  }
173
185
  /**
174
186
  * Update task quality metrics
175
187
  */
176
- updateQuality(taskId, updates, agentId) {
177
- // Quality is recorded while a task is running. A completed task's metrics
178
- // are already persisted and are not amended here.
179
- const metrics = this.activeTasks.get(taskId);
180
- if (metrics) {
181
- metrics.quality = { ...metrics.quality, ...updates };
182
- // Emit quality update event
183
- EventBus.server.emit(Events.Analytics.TASK_EFFECTIVENESS_QUALITY_UPDATE, createBaseEventPayload(Events.Analytics.TASK_EFFECTIVENESS_QUALITY_UPDATE, agentId || 'unknown', 'global', {
184
- taskId,
185
- agentId: agentId || 'unknown',
186
- qualityUpdates: updates,
187
- timestamp: new Date()
188
- }));
188
+ updateQuality(taskId, agentId, channelId, updates) {
189
+ this.requireTenantIdentity(agentId, channelId);
190
+ this.requireTaskIdentity(taskId);
191
+ const taskKey = this.getTaskKey(taskId, agentId, channelId);
192
+ const metrics = this.activeTasks.get(taskKey);
193
+ if (!metrics) {
194
+ throw new Error(`Active task ${taskId} was not found for this agent and channel`);
189
195
  }
196
+ metrics.quality = { ...metrics.quality, ...updates };
197
+ EventBus.server.emit(Events.Analytics.TASK_EFFECTIVENESS_QUALITY_UPDATE, createBaseEventPayload(Events.Analytics.TASK_EFFECTIVENESS_QUALITY_UPDATE, agentId, channelId, {
198
+ taskId,
199
+ agentId,
200
+ channelId,
201
+ qualityUpdates: updates,
202
+ timestamp: new Date()
203
+ }));
190
204
  }
191
205
  /**
192
206
  * Complete a task and calculate final metrics
193
207
  */
194
- async completeTask(taskId, success, customMetrics) {
195
- const metrics = this.activeTasks.get(taskId);
208
+ async completeTask(taskId, agentId, channelId, success, customMetrics) {
209
+ this.requireTenantIdentity(agentId, channelId);
210
+ this.requireTaskIdentity(taskId);
211
+ const taskKey = this.getTaskKey(taskId, agentId, channelId);
212
+ const metrics = this.activeTasks.get(taskKey);
196
213
  if (!metrics) {
197
- this.logger.warn(`Cannot complete unknown task ${taskId}`);
198
214
  return null;
199
215
  }
200
216
  // Update final metrics
@@ -211,11 +227,13 @@ export class TaskEffectivenessService {
211
227
  }
212
228
  // Persist to MongoDB, then drop from the active set. Persist first: if
213
229
  // it throws, the task stays active rather than disappearing entirely.
214
- await this.persistTaskToDB(taskId, metrics);
215
- this.activeTasks.delete(taskId);
230
+ await this.persistTaskToDB(taskId, agentId, channelId, metrics);
231
+ this.activeTasks.delete(taskKey);
216
232
  // Emit completion event
217
- EventBus.server.emit(Events.Analytics.TASK_COMPLETED, createBaseEventPayload(Events.Analytics.TASK_COMPLETED, 'system', 'global', {
233
+ EventBus.server.emit(Events.Analytics.TASK_COMPLETED, createBaseEventPayload(Events.Analytics.TASK_COMPLETED, agentId, channelId, {
218
234
  taskId,
235
+ agentId,
236
+ channelId,
219
237
  metrics,
220
238
  success,
221
239
  timestamp: new Date()
@@ -230,11 +248,14 @@ export class TaskEffectivenessService {
230
248
  *
231
249
  * @returns null when the task or its definition is unknown
232
250
  */
233
- async compareWithBaseline(taskId) {
234
- let metrics = this.activeTasks.get(taskId);
235
- let definition = this.taskDefinitions.get(taskId);
251
+ async compareWithBaseline(taskId, agentId, channelId) {
252
+ this.requireTenantIdentity(agentId, channelId);
253
+ this.requireTaskIdentity(taskId);
254
+ const taskKey = this.getTaskKey(taskId, agentId, channelId);
255
+ let metrics = this.activeTasks.get(taskKey);
256
+ let definition = this.taskDefinitions.get(taskKey);
236
257
  if (!metrics || !definition) {
237
- const taskDoc = await TaskEffectivenessModel.findOne({ taskId }).exec();
258
+ const taskDoc = await TaskEffectivenessModel.findOne({ taskId, agentId, channelId }).exec();
238
259
  if (taskDoc) {
239
260
  metrics = metrics ?? taskDoc.metrics;
240
261
  definition = definition ?? taskDoc.definition;
@@ -278,25 +299,28 @@ export class TaskEffectivenessService {
278
299
  // Generate insights
279
300
  comparison.summary.achievements = this.identifyAchievements(metrics, baseline);
280
301
  comparison.summary.improvements = this.identifyImprovements(metrics);
281
- comparison.summary.recommendations = this.generateRecommendations(metrics);
302
+ comparison.summary.recommendations = this.generateRecommendations(metrics, taskKey);
282
303
  return comparison;
283
304
  }
284
- /**
285
- * Effectiveness analytics for a time period, computed from persisted tasks.
286
- *
287
- * Reads from MongoDB, so results cover every task ever completed — not just
288
- * the ones this process happened to run.
289
- *
290
- * @param startTime Start of the window (epoch ms)
291
- * @param endTime End of the window (epoch ms)
292
- * @param channelId Optional channel filter
293
- * @param taskType Optional task-type filter
294
- * @throws If the query fails. Effectiveness numbers computed from an empty
295
- * result set would look like real "no activity" data.
296
- */
297
- async getAnalytics(startTime, endTime, channelId, taskType) {
305
+ /** Effectiveness analytics for one exact agent and channel. */
306
+ async getAnalytics(startTime, endTime, agentId, channelId, taskType) {
307
+ this.requireTenantIdentity(agentId, channelId);
308
+ const tasks = await this.findCompletedTasks({
309
+ startTime,
310
+ endTime,
311
+ agentId,
312
+ channelId,
313
+ taskType
314
+ });
315
+ return this.computeAnalyticsFromRecords(tasks, startTime, endTime);
316
+ }
317
+ /** Channel-wide analytics intended only for the admin-authenticated REST surface. */
318
+ async getAdministrativeChannelAnalytics(startTime, endTime, channelId, taskType) {
319
+ if (!channelId?.trim()) {
320
+ throw new Error('Channel ID is required');
321
+ }
298
322
  const tasks = await this.findCompletedTasks({ startTime, endTime, channelId, taskType });
299
- return this.computeAnalyticsFromMetrics(tasks, startTime, endTime);
323
+ return this.computeAnalyticsFromRecords(tasks, startTime, endTime);
300
324
  }
301
325
  /**
302
326
  * Query persisted task effectiveness records.
@@ -307,6 +331,9 @@ export class TaskEffectivenessService {
307
331
  const query = {
308
332
  'metrics.metadata.startTime': { $gte: filter.startTime, $lte: filter.endTime }
309
333
  };
334
+ if (!Number.isFinite(filter.startTime) || !Number.isFinite(filter.endTime) || filter.startTime > filter.endTime) {
335
+ throw new Error('A valid effectiveness analytics time range is required');
336
+ }
310
337
  if (filter.channelId) {
311
338
  query.channelId = filter.channelId;
312
339
  }
@@ -314,11 +341,20 @@ export class TaskEffectivenessService {
314
341
  query['metrics.metadata.type'] = filter.taskType;
315
342
  }
316
343
  if (filter.agentId) {
317
- query.agentIds = filter.agentId;
344
+ query.agentId = filter.agentId;
318
345
  }
319
346
  try {
320
347
  const docs = await TaskEffectivenessModel.find(query).exec();
321
- return docs.map(doc => doc.metrics);
348
+ return docs.map(doc => {
349
+ if (!doc.agentId || !doc.channelId) {
350
+ throw new Error(`Task effectiveness record ${doc.taskId} has no tenant identity`);
351
+ }
352
+ return {
353
+ agentId: doc.agentId,
354
+ channelId: doc.channelId,
355
+ metrics: doc.metrics
356
+ };
357
+ });
322
358
  }
323
359
  catch (error) {
324
360
  const message = error instanceof Error ? error.message : String(error);
@@ -333,21 +369,24 @@ export class TaskEffectivenessService {
333
369
  * that is not written down is history that is simply gone; the caller
334
370
  * needs to know.
335
371
  */
336
- async persistTaskToDB(taskId, metrics) {
337
- const definition = this.taskDefinitions.get(taskId);
372
+ async persistTaskToDB(taskId, agentId, channelId, metrics) {
373
+ const taskKey = this.getTaskKey(taskId, agentId, channelId);
374
+ const definition = this.taskDefinitions.get(taskKey);
338
375
  if (!definition) {
339
376
  throw new Error(`Cannot persist task ${taskId}: no task definition was registered for it`);
340
377
  }
341
378
  try {
342
- await TaskEffectivenessModel.findOneAndUpdate({ taskId }, {
379
+ await TaskEffectivenessModel.findOneAndUpdate({ taskId, agentId, channelId }, {
343
380
  $set: {
344
- channelId: definition.channelId,
381
+ agentId,
382
+ channelId,
345
383
  agentIds: metrics.collaboration.participatingAgents,
346
384
  definition,
347
385
  metrics,
386
+ completedAt: new Date(),
348
387
  updatedAt: new Date()
349
388
  }
350
- }, { upsert: true, new: true }).exec();
389
+ }, { upsert: true, new: true, runValidators: true, setDefaultsOnInsert: true }).exec();
351
390
  }
352
391
  catch (error) {
353
392
  const message = error instanceof Error ? error.message : String(error);
@@ -358,7 +397,7 @@ export class TaskEffectivenessService {
358
397
  /**
359
398
  * Compute analytics from metrics array
360
399
  */
361
- computeAnalyticsFromMetrics(tasks, startTime, endTime) {
400
+ computeAnalyticsFromRecords(records, startTime, endTime) {
362
401
  // Initialize analytics (similar to existing getAnalytics method)
363
402
  const analytics = {
364
403
  period: { start: startTime, end: endTime },
@@ -375,8 +414,7 @@ export class TaskEffectivenessService {
375
414
  effectiveTeams: []
376
415
  }
377
416
  };
378
- // Aggregate by task type (reuse existing logic)
379
- for (const task of tasks) {
417
+ for (const { metrics: task } of records) {
380
418
  const type = task.metadata.type;
381
419
  if (!analytics.byTaskType[type]) {
382
420
  analytics.byTaskType[type] = {
@@ -404,10 +442,53 @@ export class TaskEffectivenessService {
404
442
  }
405
443
  // Calculate success rates
406
444
  for (const [type, stats] of Object.entries(analytics.byTaskType)) {
407
- const typeTasks = tasks.filter(t => t.metadata.type === type);
445
+ const typeTasks = records
446
+ .map(record => record.metrics)
447
+ .filter(task => task.metadata.type === type);
408
448
  const successful = typeTasks.filter(t => t.quality.goalAchieved).length;
409
449
  stats.successRate = typeTasks.length > 0 ? successful / typeTasks.length : 0;
410
450
  }
451
+ const channelIds = Array.from(new Set(records.map(record => record.channelId)));
452
+ for (const channelId of channelIds) {
453
+ const channelRecords = records.filter(record => record.channelId === channelId);
454
+ const agentScores = new Map();
455
+ for (const record of channelRecords) {
456
+ const scores = agentScores.get(record.agentId) ?? [];
457
+ scores.push(this.calculateOverallScore(record.metrics));
458
+ agentScores.set(record.agentId, scores);
459
+ }
460
+ analytics.byChannel[channelId] = {
461
+ totalTasks: channelRecords.length,
462
+ completedTasks: channelRecords.filter(record => record.metrics.metadata.status === 'completed').length,
463
+ avgEffectivenessScore: channelRecords.length === 0
464
+ ? 0
465
+ : channelRecords.reduce((sum, record) => sum + this.calculateOverallScore(record.metrics), 0) / channelRecords.length,
466
+ topPerformingAgents: Array.from(agentScores.entries())
467
+ .sort(([, left], [, right]) => {
468
+ const leftAverage = left.reduce((sum, score) => sum + score, 0) / left.length;
469
+ const rightAverage = right.reduce((sum, score) => sum + score, 0) / right.length;
470
+ return rightAverage - leftAverage;
471
+ })
472
+ .map(([agentId]) => agentId)
473
+ };
474
+ }
475
+ analytics.trends.effectivenessOverTime = records
476
+ .map(record => ({
477
+ timestamp: record.metrics.metadata.startTime,
478
+ avgScore: this.calculateOverallScore(record.metrics),
479
+ taskCount: 1
480
+ }))
481
+ .sort((left, right) => left.timestamp - right.timestamp);
482
+ if (analytics.trends.effectivenessOverTime.length > 1) {
483
+ const first = analytics.trends.effectivenessOverTime[0].avgScore;
484
+ const last = analytics.trends.effectivenessOverTime.at(-1).avgScore;
485
+ if (last > first) {
486
+ analytics.trends.improving.push('overall_effectiveness');
487
+ }
488
+ else if (last < first) {
489
+ analytics.trends.declining.push('overall_effectiveness');
490
+ }
491
+ }
411
492
  // Identify patterns
412
493
  analytics.patterns.highPerformanceTasks = Object.entries(analytics.byTaskType)
413
494
  .filter(([_, stats]) => stats.successRate > 0.8 && stats.avgAutonomyScore > 0.7)
@@ -415,6 +496,12 @@ export class TaskEffectivenessService {
415
496
  analytics.patterns.lowPerformanceTasks = Object.entries(analytics.byTaskType)
416
497
  .filter(([_, stats]) => stats.successRate < 0.5 || stats.avgAutonomyScore < 0.3)
417
498
  .map(([type]) => type);
499
+ const teamRecords = records.filter(record => record.metrics.collaboration.participatingAgents.length > 1);
500
+ analytics.patterns.effectiveTeams = teamRecords.map(record => ({
501
+ agents: [...record.metrics.collaboration.participatingAgents].sort(),
502
+ taskTypes: [record.metrics.metadata.type],
503
+ avgScore: this.calculateOverallScore(record.metrics)
504
+ }));
418
505
  return analytics;
419
506
  }
420
507
  /**
@@ -425,13 +512,14 @@ export class TaskEffectivenessService {
425
512
  case 'step':
426
513
  metrics.performance.stepCount++;
427
514
  break;
428
- case 'tool_use':
515
+ case 'tool_use': {
429
516
  metrics.performance.toolsUsed++;
430
517
  const toolName = event.details.toolName;
431
518
  if (toolName && !metrics.performance.uniqueTools.includes(toolName)) {
432
519
  metrics.performance.uniqueTools.push(toolName);
433
520
  }
434
521
  break;
522
+ }
435
523
  case 'agent_join':
436
524
  if (event.agentId && !metrics.collaboration.participatingAgents.includes(event.agentId)) {
437
525
  metrics.collaboration.participatingAgents.push(event.agentId);
@@ -533,7 +621,7 @@ export class TaskEffectivenessService {
533
621
  /**
534
622
  * Generate optimization recommendations
535
623
  */
536
- generateRecommendations(metrics) {
624
+ generateRecommendations(metrics, taskKey) {
537
625
  const recommendations = [];
538
626
  if (metrics.performance.humanInterventions > 0) {
539
627
  recommendations.push('Enhance agent training for similar tasks to reduce interventions');
@@ -542,7 +630,7 @@ export class TaskEffectivenessService {
542
630
  recommendations.push('Consider tool consolidation for efficiency');
543
631
  }
544
632
  if (metrics.quality.errorCount > 0) {
545
- const commonErrors = this.analyzeCommonErrors(metrics.taskId);
633
+ const commonErrors = this.analyzeCommonErrors(taskKey);
546
634
  if (commonErrors.length > 0) {
547
635
  recommendations.push(`Address common errors: ${commonErrors.join(', ')}`);
548
636
  }
@@ -552,8 +640,8 @@ export class TaskEffectivenessService {
552
640
  /**
553
641
  * Analyze common errors for a task
554
642
  */
555
- analyzeCommonErrors(taskId) {
556
- const events = this.taskEvents.get(taskId) || [];
643
+ analyzeCommonErrors(taskKey) {
644
+ const events = this.taskEvents.get(taskKey) || [];
557
645
  const errors = events.filter(e => e.type === 'error');
558
646
  // Group by error type
559
647
  const errorTypes = new Map();
@@ -571,57 +659,66 @@ export class TaskEffectivenessService {
571
659
  * Setup event listeners
572
660
  */
573
661
  setupEventListeners() {
574
- // Track tool usage
575
662
  EventBus.server.on(Events.Mcp.TOOL_CALL, (payload) => {
576
- if (payload.taskId) {
663
+ const taskId = payload.data?.taskId ?? payload.taskId;
664
+ if (taskId && payload.agentId && payload.channelId) {
665
+ const taskKey = this.getTaskKey(taskId, payload.agentId, payload.channelId);
666
+ if (!this.activeTasks.has(taskKey)) {
667
+ return;
668
+ }
577
669
  this.recordEvent({
578
670
  eventId: uuidv4(),
579
- taskId: payload.taskId,
671
+ taskId,
580
672
  timestamp: Date.now(),
581
673
  type: 'tool_use',
582
674
  agentId: payload.agentId,
583
- details: { toolName: payload.toolName }
675
+ channelId: payload.channelId,
676
+ details: { toolName: payload.data?.toolName ?? payload.toolName }
584
677
  });
585
678
  }
586
679
  });
587
- // Track errors
588
680
  EventBus.server.on(Events.Mcp.TOOL_ERROR, (payload) => {
589
- if (payload.taskId) {
681
+ const taskId = payload.data?.taskId ?? payload.taskId;
682
+ if (taskId && payload.agentId && payload.channelId) {
683
+ const taskKey = this.getTaskKey(taskId, payload.agentId, payload.channelId);
684
+ if (!this.activeTasks.has(taskKey)) {
685
+ return;
686
+ }
590
687
  this.recordEvent({
591
688
  eventId: uuidv4(),
592
- taskId: payload.taskId,
689
+ taskId,
593
690
  timestamp: Date.now(),
594
691
  type: 'error',
595
692
  agentId: payload.agentId,
693
+ channelId: payload.channelId,
596
694
  details: {
597
695
  errorType: 'tool_error',
598
- toolName: payload.toolName,
599
- error: payload.error
696
+ toolName: payload.data?.toolName ?? payload.toolName,
697
+ error: payload.data?.error ?? payload.error
600
698
  }
601
699
  });
602
700
  }
603
701
  });
604
- // Track agent collaboration
605
702
  EventBus.server.on(Events.Message.CHANNEL_MESSAGE, (payload) => {
606
- if (payload.taskId) {
607
- const metrics = this.activeTasks.get(payload.taskId);
703
+ const taskId = payload.data?.taskId ?? payload.taskId;
704
+ if (taskId && payload.agentId && payload.channelId) {
705
+ const metrics = this.activeTasks.get(this.getTaskKey(taskId, payload.agentId, payload.channelId));
608
706
  if (metrics) {
609
707
  metrics.collaboration.messageCount++;
610
708
  }
611
709
  }
612
710
  });
613
711
  }
614
- /**
615
- * Get task metrics by ID
616
- */
617
- async getTaskMetrics(taskId) {
618
- // A running task lives in memory; a finished one lives in MongoDB.
619
- const activeTask = this.activeTasks.get(taskId);
712
+ /** Get task metrics for one exact tenant task. */
713
+ async getTaskMetrics(taskId, agentId, channelId) {
714
+ this.requireTenantIdentity(agentId, channelId);
715
+ this.requireTaskIdentity(taskId);
716
+ const activeTask = this.activeTasks.get(this.getTaskKey(taskId, agentId, channelId));
620
717
  if (activeTask) {
621
718
  return activeTask;
622
719
  }
623
720
  try {
624
- const taskDoc = await TaskEffectivenessModel.findOne({ taskId }).exec();
721
+ const taskDoc = await TaskEffectivenessModel.findOne({ taskId, agentId, channelId }).exec();
625
722
  return taskDoc ? taskDoc.metrics : null;
626
723
  }
627
724
  catch (error) {
@@ -630,18 +727,29 @@ export class TaskEffectivenessService {
630
727
  throw new Error(`Failed to load task ${taskId}: ${message}`);
631
728
  }
632
729
  }
633
- /**
634
- * Get effectiveness trends over time
635
- */
636
- async getEffectivenessTrends(startTime, endTime, intervalMs, channelId) {
730
+ /** Get effectiveness trends for one exact agent and channel. */
731
+ async getEffectivenessTrends(startTime, endTime, intervalMs, agentId, channelId) {
732
+ this.requireTenantIdentity(agentId, channelId);
733
+ const records = await this.findCompletedTasks({ startTime, endTime, agentId, channelId });
734
+ return this.computeEffectivenessTrends(records, startTime, endTime, intervalMs);
735
+ }
736
+ /** Trend analytics intended only for the admin-authenticated REST surface. */
737
+ async getAdministrativeEffectivenessTrends(startTime, endTime, intervalMs, channelId) {
738
+ const records = await this.findCompletedTasks({ startTime, endTime, channelId });
739
+ return this.computeEffectivenessTrends(records, startTime, endTime, intervalMs);
740
+ }
741
+ computeEffectivenessTrends(records, startTime, endTime, intervalMs) {
742
+ if (!Number.isFinite(intervalMs) || intervalMs <= 0) {
743
+ throw new Error('A positive trend interval is required');
744
+ }
637
745
  const dataPoints = [];
638
746
  const intervals = Math.floor((endTime - startTime) / intervalMs);
639
- // One query for the whole window, then bucket in memory.
640
- const tasks = await this.findCompletedTasks({ startTime, endTime, channelId });
641
747
  for (let i = 0; i < intervals; i++) {
642
748
  const intervalStart = startTime + (i * intervalMs);
643
749
  const intervalEnd = intervalStart + intervalMs;
644
- const intervalTasks = tasks.filter(task => task.metadata.startTime >= intervalStart &&
750
+ const intervalTasks = records
751
+ .map(record => record.metrics)
752
+ .filter(task => task.metadata.startTime >= intervalStart &&
645
753
  task.metadata.startTime < intervalEnd);
646
754
  if (intervalTasks.length > 0) {
647
755
  const avgScore = intervalTasks.reduce((sum, task) => sum + this.calculateOverallScore(task), 0) / intervalTasks.length;
@@ -663,12 +771,22 @@ export class TaskEffectivenessService {
663
771
  timeRange: { start: startTime, end: endTime }
664
772
  };
665
773
  }
666
- /**
667
- * Get agent-specific effectiveness
668
- */
774
+ /** Get agent-specific effectiveness in one exact channel. */
669
775
  async getAgentEffectiveness(agentId, startTime, endTime, channelId) {
670
- // The agentIds index on the document does the channel/time/agent filtering.
671
- const agentTasks = await this.findCompletedTasks({ startTime, endTime, channelId, agentId });
776
+ this.requireTenantIdentity(agentId, channelId);
777
+ const records = await this.findCompletedTasks({ startTime, endTime, channelId, agentId });
778
+ return this.computeAgentEffectiveness(agentId, records, startTime, endTime);
779
+ }
780
+ /** Agent analytics intended only for the admin-authenticated REST surface. */
781
+ async getAdministrativeAgentEffectiveness(agentId, startTime, endTime, channelId) {
782
+ if (!agentId?.trim()) {
783
+ throw new Error('Agent ID is required');
784
+ }
785
+ const records = await this.findCompletedTasks({ startTime, endTime, channelId, agentId });
786
+ return this.computeAgentEffectiveness(agentId, records, startTime, endTime);
787
+ }
788
+ computeAgentEffectiveness(agentId, records, startTime, endTime) {
789
+ const agentTasks = records.map(record => record.metrics);
672
790
  const totalTasks = agentTasks.length;
673
791
  const successfulTasks = agentTasks.filter(t => t.quality.goalAchieved).length;
674
792
  const successRate = totalTasks > 0 ? successfulTasks / totalTasks : 0;