@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
@@ -34,6 +34,7 @@ import { Events } from '../../../events/EventNames.js';
34
34
  import { createChannelMessageEventPayload, createAgentMessageEventPayload, createPlanStepCompletedEventPayload } from '../../../schemas/EventPayloadSchema.js';
35
35
  import { createChannelMessage, createAgentMessage } from '../../../schemas/MessageSchemas.js';
36
36
  import PlanModel from '../../../models/plan.js';
37
+ import { Channel } from '../../../models/channel.js';
37
38
 
38
39
  const logger = new Logger('debug', 'PlanningTools', 'server');
39
40
 
@@ -52,9 +53,10 @@ export interface Plan {
52
53
  id: string;
53
54
  title: string;
54
55
  createdBy: string;
56
+ channelId: string;
55
57
  createdAt: number;
56
58
  items: PlanItem[];
57
- metadata?: Record<string, any>;
59
+ metadata?: Record<string, unknown>;
58
60
  }
59
61
 
60
62
  /**
@@ -78,13 +80,31 @@ const LOCK_CLEANUP_INTERVAL_MS = 60000;
78
80
  // Serialization locks to prevent parallel plan updates (like Cascade)
79
81
  const planUpdateLocks = new Map<string, PlanLock>();
80
82
 
83
+ interface PlanningIdentity {
84
+ agentId: string;
85
+ channelId: string;
86
+ }
87
+
88
+ const requirePlanningIdentity = (context: McpToolHandlerContext): PlanningIdentity => {
89
+ if (typeof context.agentId !== 'string' || context.agentId.trim().length === 0 ||
90
+ typeof context.channelId !== 'string' || context.channelId.trim().length === 0) {
91
+ throw new Error('Authenticated agentId and channelId are required for planning tools');
92
+ }
93
+ return {
94
+ agentId: context.agentId.trim(),
95
+ channelId: context.channelId.trim()
96
+ };
97
+ };
98
+
99
+ const planLockKey = (channelId: string, planId: string): string => `${channelId}\0${planId}`;
100
+
81
101
  /**
82
102
  * Acquire a lock for a plan with TTL-based expiration.
83
103
  * Returns true if lock acquired, false if plan is already locked.
84
104
  */
85
- function acquirePlanLock(planId: string, agentId?: string): boolean {
105
+ function acquirePlanLock(lockKey: string, agentId?: string): boolean {
86
106
  const now = Date.now();
87
- const existingLock = planUpdateLocks.get(planId);
107
+ const existingLock = planUpdateLocks.get(lockKey);
88
108
 
89
109
  // Check if existing lock has expired
90
110
  if (existingLock && (now - existingLock.acquiredAt) < LOCK_TIMEOUT_MS) {
@@ -93,29 +113,29 @@ function acquirePlanLock(planId: string, agentId?: string): boolean {
93
113
  }
94
114
 
95
115
  // Acquire or renew lock
96
- planUpdateLocks.set(planId, { acquiredAt: now, agentId });
116
+ planUpdateLocks.set(lockKey, { acquiredAt: now, agentId });
97
117
  return true;
98
118
  }
99
119
 
100
120
  /**
101
121
  * Release a lock for a plan.
102
122
  */
103
- function releasePlanLock(planId: string): void {
104
- planUpdateLocks.delete(planId);
123
+ function releasePlanLock(lockKey: string): void {
124
+ planUpdateLocks.delete(lockKey);
105
125
  }
106
126
 
107
127
  /**
108
128
  * Check if a plan is currently locked.
109
129
  * Returns lock info if locked, undefined if not locked.
110
130
  */
111
- function getPlanLockInfo(planId: string): PlanLock | undefined {
112
- const lock = planUpdateLocks.get(planId);
131
+ function getPlanLockInfo(lockKey: string): PlanLock | undefined {
132
+ const lock = planUpdateLocks.get(lockKey);
113
133
  if (!lock) return undefined;
114
134
 
115
135
  const now = Date.now();
116
136
  if ((now - lock.acquiredAt) >= LOCK_TIMEOUT_MS) {
117
137
  // Lock has expired, clean it up
118
- planUpdateLocks.delete(planId);
138
+ planUpdateLocks.delete(lockKey);
119
139
  return undefined;
120
140
  }
121
141
 
@@ -203,8 +223,12 @@ export const planning_create: McpToolDefinition = {
203
223
  enabled: true,
204
224
  handler: async (input: McpToolInput, context: McpToolHandlerContext): Promise<McpToolHandlerResult> => {
205
225
  try {
226
+ const identity = requirePlanningIdentity(context);
206
227
  const planId = uuidv4();
207
- const planItems = (input.items || []).map((item: any, index: number) => ({
228
+ if (!Array.isArray(input.items)) {
229
+ throw new Error('items must be an array');
230
+ }
231
+ const planItems: PlanItem[] = (input.items as Array<Partial<PlanItem>>).map((item, index) => ({
208
232
  id: `item-${index + 1}`,
209
233
  title: item.title || 'Untitled Item',
210
234
  description: item.description,
@@ -219,8 +243,8 @@ export const planning_create: McpToolDefinition = {
219
243
  const planDoc = new PlanModel({
220
244
  planId,
221
245
  title: input.title,
222
- createdBy: context.agentId || 'system',
223
- channelId: context.channelId,
246
+ createdBy: identity.agentId,
247
+ channelId: identity.channelId,
224
248
  items: planItems,
225
249
  metadata: input.metadata
226
250
  });
@@ -230,17 +254,18 @@ export const planning_create: McpToolDefinition = {
230
254
  const plan: Plan = {
231
255
  id: planId,
232
256
  title: input.title,
233
- createdBy: context.agentId || 'system',
257
+ createdBy: identity.agentId,
258
+ channelId: identity.channelId,
234
259
  createdAt: planDoc.createdAt.getTime(),
235
260
  items: planItems,
236
261
  metadata: input.metadata
237
262
  };
238
263
 
239
264
  // Emit planning event
240
- if (context.channelId && context.agentId) {
265
+ {
241
266
  const channelMessage = createChannelMessage(
242
- context.channelId,
243
- context.agentId,
267
+ identity.channelId,
268
+ identity.agentId,
244
269
  `📋 Created plan: ${plan.title} with ${plan.items.length} items`,
245
270
  {
246
271
  context: {
@@ -254,7 +279,7 @@ export const planning_create: McpToolDefinition = {
254
279
  EventBus.server.emit(Events.Message.CHANNEL_MESSAGE,
255
280
  createChannelMessageEventPayload(
256
281
  Events.Message.CHANNEL_MESSAGE,
257
- context.agentId,
282
+ identity.agentId,
258
283
  channelMessage
259
284
  )
260
285
  );
@@ -276,6 +301,7 @@ export const planning_create: McpToolDefinition = {
276
301
  const content: McpToolResultContent = {
277
302
  type: 'application/json',
278
303
  data: {
304
+ success: false,
279
305
  error: `Failed to create plan: ${error instanceof Error ? error.message : String(error)}`
280
306
  }
281
307
  };
@@ -316,13 +342,16 @@ export const planning_update_item: McpToolDefinition = {
316
342
  enabled: true,
317
343
  handler: async (input: McpToolInput, context: McpToolHandlerContext): Promise<McpToolHandlerResult> => {
318
344
  try {
345
+ const identity = requirePlanningIdentity(context);
346
+ const lockKey = planLockKey(identity.channelId, input.planId);
319
347
  // Check for serialization lock with TTL
320
- const existingLock = getPlanLockInfo(input.planId);
348
+ const existingLock = getPlanLockInfo(lockKey);
321
349
  if (existingLock) {
322
350
  const lockAgeMs = Date.now() - existingLock.acquiredAt;
323
351
  const content: McpToolResultContent = {
324
352
  type: 'application/json',
325
353
  data: {
354
+ success: false,
326
355
  error: `Plan ${input.planId} is currently being updated by another operation (locked ${Math.round(lockAgeMs / 1000)}s ago${existingLock.agentId ? ` by ${existingLock.agentId}` : ''}). Please try again.`
327
356
  }
328
357
  };
@@ -330,10 +359,11 @@ export const planning_update_item: McpToolDefinition = {
330
359
  }
331
360
 
332
361
  // Acquire lock with TTL
333
- if (!acquirePlanLock(input.planId, context.agentId)) {
362
+ if (!acquirePlanLock(lockKey, identity.agentId)) {
334
363
  const content: McpToolResultContent = {
335
364
  type: 'application/json',
336
365
  data: {
366
+ success: false,
337
367
  error: `Failed to acquire lock for plan ${input.planId}. Please try again.`
338
368
  }
339
369
  };
@@ -342,22 +372,27 @@ export const planning_update_item: McpToolDefinition = {
342
372
 
343
373
  try {
344
374
  // Fetch plan from MongoDB
345
- const planDoc = await PlanModel.findOne({ planId: input.planId });
375
+ const planDoc = await PlanModel.findOne({
376
+ planId: input.planId,
377
+ channelId: identity.channelId
378
+ });
346
379
  if (!planDoc) {
347
380
  const content: McpToolResultContent = {
348
381
  type: 'application/json',
349
382
  data: {
383
+ success: false,
350
384
  error: `Plan not found: ${input.planId}`
351
385
  }
352
386
  };
353
387
  return { content };
354
388
  }
355
389
 
356
- const item = planDoc.items.find((i: any) => i.id === input.itemId);
390
+ const item = planDoc.items.find(i => i.id === input.itemId);
357
391
  if (!item) {
358
392
  const content: McpToolResultContent = {
359
393
  type: 'application/json',
360
394
  data: {
395
+ success: false,
361
396
  error: `Item not found: ${input.itemId} in plan ${input.planId}`
362
397
  }
363
398
  };
@@ -372,31 +407,31 @@ export const planning_update_item: McpToolDefinition = {
372
407
  await planDoc.save();
373
408
 
374
409
  // Emit update event
375
- if (context.channelId && context.agentId) {
410
+ {
376
411
  const updateMessage = createChannelMessage(
377
- context.channelId,
378
- context.agentId,
412
+ identity.channelId,
413
+ identity.agentId,
379
414
  `✅ Updated plan item: ${item.title} → ${input.status || 'updated'}${input.notes ? ` (${input.notes})` : ''}`,
380
415
  { context: { planId: input.planId, itemId: input.itemId, status: input.status, toolName: 'planning_update_item' } }
381
416
  );
382
417
  EventBus.server.emit(
383
418
  Events.Message.CHANNEL_MESSAGE,
384
- createChannelMessageEventPayload(Events.Message.CHANNEL_MESSAGE, context.agentId, updateMessage)
419
+ createChannelMessageEventPayload(Events.Message.CHANNEL_MESSAGE, identity.agentId, updateMessage)
385
420
  );
386
421
  }
387
422
 
388
423
  // Emit plan step completion event for monitoring service
389
- if (input.status === 'completed' && context.agentId && context.channelId) {
424
+ if (input.status === 'completed') {
390
425
  EventBus.server.emit(
391
426
  Events.Plan.PLAN_STEP_COMPLETED,
392
427
  createPlanStepCompletedEventPayload(
393
428
  Events.Plan.PLAN_STEP_COMPLETED,
394
- context.agentId,
395
- context.channelId,
429
+ identity.agentId,
430
+ identity.channelId,
396
431
  {
397
432
  planId: input.planId,
398
433
  stepId: input.itemId,
399
- completedBy: context.agentId
434
+ completedBy: identity.agentId
400
435
  }
401
436
  )
402
437
  );
@@ -415,13 +450,14 @@ export const planning_update_item: McpToolDefinition = {
415
450
  return { content };
416
451
  } finally {
417
452
  // Always release lock
418
- releasePlanLock(input.planId);
453
+ releasePlanLock(lockKey);
419
454
  }
420
455
  } catch (error) {
421
456
  logger.error(`Error updating plan item: ${error}`);
422
457
  const content: McpToolResultContent = {
423
458
  type: 'application/json',
424
459
  data: {
460
+ success: false,
425
461
  error: `Failed to update plan item: ${error instanceof Error ? error.message : String(error)}`
426
462
  }
427
463
  };
@@ -448,13 +484,18 @@ export const planning_view: McpToolDefinition = {
448
484
  enabled: true,
449
485
  handler: async (input: McpToolInput, context: McpToolHandlerContext): Promise<McpToolHandlerResult> => {
450
486
  try {
487
+ const identity = requirePlanningIdentity(context);
451
488
  if (input.planId) {
452
489
  // Fetch specific plan from MongoDB
453
- const planDoc = await PlanModel.findOne({ planId: input.planId });
490
+ const planDoc = await PlanModel.findOne({
491
+ planId: input.planId,
492
+ channelId: identity.channelId
493
+ });
454
494
  if (!planDoc) {
455
495
  const content: McpToolResultContent = {
456
496
  type: 'application/json',
457
497
  data: {
498
+ success: false,
458
499
  error: `Plan not found: ${input.planId}`
459
500
  }
460
501
  };
@@ -472,10 +513,10 @@ export const planning_view: McpToolDefinition = {
472
513
 
473
514
  const summary = {
474
515
  total: plan.items.length,
475
- pending: plan.items.filter((i: any) => i.status === 'pending').length,
476
- inProgress: plan.items.filter((i: any) => i.status === 'in_progress').length,
477
- completed: plan.items.filter((i: any) => i.status === 'completed').length,
478
- blocked: plan.items.filter((i: any) => i.status === 'blocked').length
516
+ pending: plan.items.filter(i => i.status === 'pending').length,
517
+ inProgress: plan.items.filter(i => i.status === 'in_progress').length,
518
+ completed: plan.items.filter(i => i.status === 'completed').length,
519
+ blocked: plan.items.filter(i => i.status === 'blocked').length
479
520
  };
480
521
 
481
522
  const content: McpToolResultContent = {
@@ -490,9 +531,9 @@ export const planning_view: McpToolDefinition = {
490
531
  return { content };
491
532
  } else {
492
533
  // Return all plans for this channel from MongoDB
493
- const planDocs = context.channelId
494
- ? await PlanModel.find({ channelId: context.channelId }).sort({ createdAt: -1 })
495
- : await PlanModel.find({ createdBy: context.agentId }).sort({ createdAt: -1 });
534
+ const planDocs = await PlanModel.find({
535
+ channelId: identity.channelId
536
+ }).sort({ createdAt: -1 });
496
537
 
497
538
  const channelPlans = planDocs.map(doc => ({
498
539
  id: doc.planId,
@@ -503,10 +544,6 @@ export const planning_view: McpToolDefinition = {
503
544
  metadata: doc.metadata
504
545
  }));
505
546
 
506
- const allPlansFiltered = channelPlans.filter(
507
- p => !context.channelId || p.metadata?.channelId === context.channelId
508
- );
509
-
510
547
  const content: McpToolResultContent = {
511
548
  type: 'application/json',
512
549
  data: {
@@ -528,6 +565,7 @@ export const planning_view: McpToolDefinition = {
528
565
  const content: McpToolResultContent = {
529
566
  type: 'application/json',
530
567
  data: {
568
+ success: false,
531
569
  error: `Failed to view plan: ${error instanceof Error ? error.message : String(error)}`
532
570
  }
533
571
  };
@@ -564,12 +602,17 @@ export const planning_share: McpToolDefinition = {
564
602
  enabled: true,
565
603
  handler: async (input: McpToolInput, context: McpToolHandlerContext): Promise<McpToolHandlerResult> => {
566
604
  try {
605
+ const identity = requirePlanningIdentity(context);
567
606
  // Fetch plan from MongoDB
568
- const planDoc = await PlanModel.findOne({ planId: input.planId });
607
+ const planDoc = await PlanModel.findOne({
608
+ planId: input.planId,
609
+ channelId: identity.channelId
610
+ });
569
611
  if (!planDoc) {
570
612
  const content: McpToolResultContent = {
571
613
  type: 'application/json',
572
614
  data: {
615
+ success: false,
573
616
  error: `Plan not found: ${input.planId}`
574
617
  }
575
618
  };
@@ -577,7 +620,7 @@ export const planning_share: McpToolDefinition = {
577
620
  }
578
621
 
579
622
  const planSummary = `📋 **${planDoc.title}**\n` +
580
- planDoc.items.map((item: any, idx: number) =>
623
+ planDoc.items.map((item, idx: number) =>
581
624
  `${idx + 1}. ${item.title} [${item.status}]${item.assignee ? ` - @${item.assignee}` : ''}`
582
625
  ).join('\n');
583
626
 
@@ -585,44 +628,77 @@ export const planning_share: McpToolDefinition = {
585
628
  ? `${input.message}\n\n${planSummary}`
586
629
  : planSummary;
587
630
 
588
- if (input.agentIds && input.agentIds.length > 0) {
589
- // Send to specific agents
590
- if (context.agentId && context.channelId) {
591
- for (const targetAgentId of input.agentIds) {
631
+ if (input.agentIds !== undefined && !Array.isArray(input.agentIds)) {
632
+ throw new Error('agentIds must be an array when provided');
633
+ }
634
+
635
+ if (Array.isArray(input.agentIds) && input.agentIds.length > 0) {
636
+ if (input.agentIds.some(
637
+ (targetAgentId: unknown) => typeof targetAgentId !== 'string' || targetAgentId.trim().length === 0
638
+ )) {
639
+ throw new Error('agentIds must contain only non-empty agent identifiers');
640
+ }
641
+ const targetAgentIds = [...new Set(
642
+ input.agentIds.map((targetAgentId: string) => targetAgentId.trim())
643
+ )];
644
+ const allTargetsAreCurrentParticipants = await Channel.exists({
645
+ channelId: identity.channelId,
646
+ active: true,
647
+ participants: { $all: targetAgentIds }
648
+ });
649
+ if (!allTargetsAreCurrentParticipants) {
650
+ const content: McpToolResultContent = {
651
+ type: 'application/json',
652
+ data: {
653
+ success: false,
654
+ error: 'Every share target must be a current participant of the authenticated channel'
655
+ }
656
+ };
657
+ return { content };
658
+ }
659
+
660
+ // Send only after all targets pass authorization so a mixed list
661
+ // cannot partially disclose the plan before reporting failure.
662
+ for (const targetAgentId of targetAgentIds) {
592
663
  const agentMessage = createAgentMessage(
593
- context.agentId,
664
+ identity.agentId,
594
665
  targetAgentId,
595
666
  fullMessage,
596
667
  { context: { planId: input.planId, planShared: true, toolName: 'planning_share' } }
597
668
  );
598
669
  EventBus.server.emit(
599
670
  Events.Message.AGENT_MESSAGE,
600
- createAgentMessageEventPayload(Events.Message.AGENT_MESSAGE, context.agentId, context.channelId, agentMessage)
671
+ createAgentMessageEventPayload(
672
+ Events.Message.AGENT_MESSAGE,
673
+ identity.agentId,
674
+ identity.channelId,
675
+ agentMessage
676
+ )
601
677
  );
602
- }
603
678
  }
604
679
 
605
680
  const content: McpToolResultContent = {
606
681
  type: 'application/json',
607
682
  data: {
608
683
  success: true,
609
- message: `Shared plan with ${input.agentIds.length} agents`,
610
- sharedWith: input.agentIds
684
+ message: `Queued plan delivery for ${targetAgentIds.length} channel participants`,
685
+ sharedWith: targetAgentIds,
686
+ deliveryConfirmed: false
611
687
  }
612
688
  };
613
689
  return { content };
614
690
  } else {
615
691
  // Broadcast to channel
616
- if (context.channelId && context.agentId) {
692
+ {
617
693
  const channelMessage = createChannelMessage(
618
- context.channelId,
619
- context.agentId,
694
+ identity.channelId,
695
+ identity.agentId,
620
696
  fullMessage,
621
697
  { context: { planId: input.planId, planShared: true, toolName: 'planning_share' } }
622
698
  );
623
699
  EventBus.server.emit(
624
700
  Events.Message.CHANNEL_MESSAGE,
625
- createChannelMessageEventPayload(Events.Message.CHANNEL_MESSAGE, context.agentId, channelMessage)
701
+ createChannelMessageEventPayload(Events.Message.CHANNEL_MESSAGE, identity.agentId, channelMessage)
626
702
  );
627
703
  }
628
704
 
@@ -630,7 +706,8 @@ export const planning_share: McpToolDefinition = {
630
706
  type: 'application/json',
631
707
  data: {
632
708
  success: true,
633
- message: 'Broadcast plan to all agents in channel'
709
+ message: 'Queued plan broadcast to the authenticated channel',
710
+ deliveryConfirmed: false
634
711
  }
635
712
  };
636
713
  return { content };
@@ -640,6 +717,7 @@ export const planning_share: McpToolDefinition = {
640
717
  const content: McpToolResultContent = {
641
718
  type: 'application/json',
642
719
  data: {
720
+ success: false,
643
721
  error: `Failed to share plan: ${error instanceof Error ? error.message : String(error)}`
644
722
  }
645
723
  };
@@ -657,4 +735,4 @@ export const PLANNING_TOOLS = [
657
735
  ];
658
736
 
659
737
  // Export tool names for easy reference
660
- export const PLANNING_TOOL_NAMES = PLANNING_TOOLS.map(tool => tool.name);
738
+ export const PLANNING_TOOL_NAMES = PLANNING_TOOLS.map(tool => tool.name);
@@ -31,7 +31,11 @@ import { McpToolInput } from '../IMcpClient.js';
31
31
  import { Logger } from '../../../utils/Logger.js';
32
32
  import * as fs from 'fs';
33
33
  import * as path from 'path';
34
- import { execSync } from 'child_process';
34
+ import { execFileSync } from 'child_process';
35
+ import {
36
+ buildShellChildEnv,
37
+ resolveWorkspacePath
38
+ } from '../security/McpToolPolicy.js';
35
39
 
36
40
  const logger = new Logger('info', 'ProjectContextTools', 'server');
37
41
 
@@ -128,10 +132,16 @@ function parseManifestInfo(filename: string, content: string): Record<string, an
128
132
  */
129
133
  function getGitInfo(dir: string): Record<string, any> | null {
130
134
  try {
131
- const branch = execSync(`git -C "${dir}" rev-parse --abbrev-ref HEAD`, { encoding: 'utf-8' }).trim();
132
- const logOutput = execSync(`git -C "${dir}" log --oneline -5`, { encoding: 'utf-8' }).trim();
135
+ const options = {
136
+ cwd: dir,
137
+ encoding: 'utf-8' as const,
138
+ env: buildShellChildEnv(),
139
+ timeout: 10_000
140
+ };
141
+ const branch = execFileSync('git', ['rev-parse', '--abbrev-ref', 'HEAD'], options).trim();
142
+ const logOutput = execFileSync('git', ['log', '--oneline', '-5'], options).trim();
133
143
  const recentCommits = logOutput ? logOutput.split('\n') : [];
134
- const statusOutput = execSync(`git -C "${dir}" status --porcelain`, { encoding: 'utf-8' }).trim();
144
+ const statusOutput = execFileSync('git', ['status', '--porcelain'], options).trim();
135
145
  const dirtyLines = statusOutput ? statusOutput.split('\n').filter(l => l.trim()) : [];
136
146
  const dirtyCount = dirtyLines.length;
137
147
 
@@ -154,11 +164,14 @@ function detectConfigFiles(dir: string): string[] {
154
164
  const found: string[] = [];
155
165
 
156
166
  for (const configFile of CONFIG_FILES) {
157
- const fullPath = path.join(dir, configFile);
158
167
  try {
168
+ const fullPath = resolveWorkspacePath(
169
+ path.join(dir, configFile.replace(/\/$/, '')),
170
+ 'project_context config file'
171
+ );
159
172
  // For directory entries (ending with /), check if it's a directory
160
173
  if (configFile.endsWith('/')) {
161
- const stat = fs.statSync(fullPath.slice(0, -1));
174
+ const stat = fs.statSync(fullPath);
162
175
  if (stat.isDirectory()) {
163
176
  found.push(configFile);
164
177
  }
@@ -188,7 +201,7 @@ export const project_context_tool: McpToolDefinition = {
188
201
  properties: {
189
202
  workingDirectory: {
190
203
  type: 'string',
191
- description: 'Absolute path to the directory to scan. Defaults to the current working directory if not provided.',
204
+ description: 'Directory under MXF_WORKSPACE_ROOT to scan. Defaults to MXF_WORKSPACE_ROOT.',
192
205
  },
193
206
  },
194
207
  additionalProperties: false,
@@ -208,9 +221,11 @@ export const project_context_tool: McpToolDefinition = {
208
221
  timeout: 10000,
209
222
  },
210
223
 
211
- async handler(input: McpToolInput, context: McpToolHandlerContext): Promise<McpToolHandlerResult> {
212
- const dir = (input as any).workingDirectory || process.cwd();
213
- const resolvedDir = path.resolve(dir);
224
+ async handler(input: McpToolInput, _context: McpToolHandlerContext): Promise<McpToolHandlerResult> {
225
+ const resolvedDir = resolveWorkspacePath(
226
+ input.workingDirectory,
227
+ 'project_context workingDirectory'
228
+ );
214
229
 
215
230
  logger.info('Scanning project context', { directory: resolvedDir });
216
231
 
@@ -266,8 +281,11 @@ export const project_context_tool: McpToolDefinition = {
266
281
  let manifestFile: string | null = null;
267
282
 
268
283
  for (const [filename, typeInfo] of Object.entries(MANIFEST_MAP)) {
269
- const manifestPath = path.join(resolvedDir, filename);
270
284
  try {
285
+ const manifestPath = resolveWorkspacePath(
286
+ path.join(resolvedDir, filename),
287
+ 'project_context manifest'
288
+ );
271
289
  fs.accessSync(manifestPath, fs.constants.F_OK);
272
290
  projectType = typeInfo.projectType;
273
291
  language = typeInfo.language;
@@ -281,7 +299,10 @@ export const project_context_tool: McpToolDefinition = {
281
299
  // 3. If manifest found, read and parse basic info
282
300
  if (manifestFile) {
283
301
  try {
284
- const manifestPath = path.join(resolvedDir, manifestFile);
302
+ const manifestPath = resolveWorkspacePath(
303
+ path.join(resolvedDir, manifestFile),
304
+ 'project_context manifest read'
305
+ );
285
306
  const content = fs.readFileSync(manifestPath, 'utf-8').slice(0, 500);
286
307
  const parsed = parseManifestInfo(manifestFile, content);
287
308
  manifest = {