@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
@@ -39,7 +39,10 @@ import { AgentId, ChannelId } from '../types/ChannelContext.js';
39
39
  import { Logger } from '../utils/Logger.js';
40
40
  import { Events } from '../events/EventNames.js';
41
41
  import { EventBus } from '../events/EventBus.js';
42
- import { buildShellChildEnv } from '../protocols/mcp/security/McpToolPolicy.js';
42
+ import {
43
+ buildShellChildEnv,
44
+ resolveWorkspacePath
45
+ } from '../protocols/mcp/security/McpToolPolicy.js';
43
46
  import {
44
47
  createShellExecutionProgressPayload,
45
48
  createShellBackgroundStartedPayload,
@@ -106,6 +109,12 @@ export interface BackgroundTaskInfo {
106
109
  channelId: ChannelId;
107
110
  }
108
111
 
112
+ /** Authenticated principal allowed to inspect or mutate a background task. */
113
+ export interface BackgroundTaskPrincipal {
114
+ agentId: AgentId;
115
+ channelId: ChannelId;
116
+ }
117
+
109
118
  /** Internal task entry extending BackgroundTask with the child process handle and tracking metadata */
110
119
  interface InternalTask extends BackgroundTask {
111
120
  /** The spawned child process (cleared after exit) */
@@ -116,12 +125,19 @@ interface InternalTask extends BackgroundTask {
116
125
  lastProgressEmit: number;
117
126
  /** Timeout timer handle (if a timeout was specified) */
118
127
  timeoutTimer?: ReturnType<typeof setTimeout>;
128
+ /** SIGTERM-to-SIGKILL escalation timer. */
129
+ forceKillTimer?: ReturnType<typeof setTimeout>;
130
+ /** Settles after terminal process callbacks and their final event emission complete. */
131
+ completion: Promise<void>;
132
+ resolveCompletion: () => void;
133
+ /** Guards Node's error-then-close sequence from reporting completion twice. */
134
+ terminalFinalized: boolean;
119
135
  }
120
136
 
121
137
  // ---- BackgroundTaskManager ----
122
138
 
123
139
  export class BackgroundTaskManager {
124
- private static instance: BackgroundTaskManager;
140
+ private static instance: BackgroundTaskManager | undefined;
125
141
 
126
142
  /** Map of taskId -> internal task state */
127
143
  private tasks: Map<string, InternalTask> = new Map();
@@ -139,6 +155,8 @@ export class BackgroundTaskManager {
139
155
 
140
156
  /** Handle for the periodic cleanup timer */
141
157
  private cleanupTimer?: ReturnType<typeof setInterval>;
158
+ private shutdownPromise: Promise<void> | undefined;
159
+ private isShuttingDown = false;
142
160
 
143
161
  private constructor() {
144
162
  // Start periodic cleanup of completed tasks older than cleanupIntervalMs
@@ -157,6 +175,16 @@ export class BackgroundTaskManager {
157
175
  return BackgroundTaskManager.instance;
158
176
  }
159
177
 
178
+ /** Stop the live singleton without constructing one solely for teardown. */
179
+ static async shutdownExisting(): Promise<boolean> {
180
+ const instance = BackgroundTaskManager.instance;
181
+ if (!instance) {
182
+ return false;
183
+ }
184
+ await instance.shutdown();
185
+ return true;
186
+ }
187
+
160
188
  /**
161
189
  * Start a command in the background. Returns immediately with a taskId that
162
190
  * can be used to query status, retrieve output, or cancel the task.
@@ -177,6 +205,10 @@ export class BackgroundTaskManager {
177
205
  },
178
206
  context: { agentId: AgentId; channelId: ChannelId; requestId: string }
179
207
  ): Promise<{ taskId: string }> {
208
+ if (this.isShuttingDown) {
209
+ throw new Error('BackgroundTaskManager is shutting down');
210
+ }
211
+
180
212
  // Validate concurrent task limit
181
213
  const runningCount = this.getRunningTaskCount();
182
214
  if (runningCount >= this.maxConcurrentTasks) {
@@ -196,13 +228,20 @@ export class BackgroundTaskManager {
196
228
  // get the same stripped environment the guarded shell path builds.
197
229
  const spawnOptions: SpawnOptions = {
198
230
  shell: true,
199
- cwd: options.workingDirectory || process.cwd(),
231
+ cwd: resolveWorkspacePath(
232
+ options.workingDirectory,
233
+ 'BackgroundTaskManager.startBackground'
234
+ ),
200
235
  env: buildShellChildEnv(options.environment),
201
236
  };
202
237
 
203
238
  const childProcess = spawn(command, [], spawnOptions);
204
239
 
205
240
  // Create the internal task entry
241
+ let resolveCompletion!: () => void;
242
+ const completion = new Promise<void>(resolve => {
243
+ resolveCompletion = resolve;
244
+ });
206
245
  const task: InternalTask = {
207
246
  taskId,
208
247
  command,
@@ -217,6 +256,9 @@ export class BackgroundTaskManager {
217
256
  process: childProcess,
218
257
  totalOutputBytes: 0,
219
258
  lastProgressEmit: 0,
259
+ completion,
260
+ resolveCompletion,
261
+ terminalFinalized: false,
220
262
  };
221
263
 
222
264
  this.tasks.set(taskId, task);
@@ -257,6 +299,10 @@ export class BackgroundTaskManager {
257
299
 
258
300
  // Handle process exit
259
301
  childProcess.on('close', (code: number | null) => {
302
+ if (task.terminalFinalized) {
303
+ return;
304
+ }
305
+ task.terminalFinalized = true;
260
306
  const exitCode = code ?? 1;
261
307
  task.exitCode = exitCode;
262
308
  task.endTime = Date.now();
@@ -271,6 +317,10 @@ export class BackgroundTaskManager {
271
317
  clearTimeout(task.timeoutTimer);
272
318
  task.timeoutTimer = undefined;
273
319
  }
320
+ if (task.forceKillTimer) {
321
+ clearTimeout(task.forceKillTimer);
322
+ task.forceKillTimer = undefined;
323
+ }
274
324
 
275
325
  const elapsedSeconds = (task.endTime - task.startTime) / 1000;
276
326
 
@@ -280,27 +330,36 @@ export class BackgroundTaskManager {
280
330
  );
281
331
 
282
332
  // Emit SHELL_BACKGROUND_COMPLETED event
283
- EventBus.server.emit(
284
- Events.Shell.SHELL_BACKGROUND_COMPLETED,
285
- createShellBackgroundCompletedPayload(
286
- task.agentId,
287
- task.channelId,
288
- {
289
- requestId: task.requestId,
290
- taskId,
291
- command: task.command,
292
- exitCode,
293
- isError: exitCode !== 0,
294
- executionTime: (task.endTime! - task.startTime),
295
- outputSize: task.totalOutputBytes
296
- }
297
- )
298
- );
333
+ try {
334
+ EventBus.server.emit(
335
+ Events.Shell.SHELL_BACKGROUND_COMPLETED,
336
+ createShellBackgroundCompletedPayload(
337
+ task.agentId,
338
+ task.channelId,
339
+ {
340
+ requestId: task.requestId,
341
+ taskId,
342
+ command: task.command,
343
+ exitCode,
344
+ isError: exitCode !== 0,
345
+ executionTime: (task.endTime! - task.startTime),
346
+ outputSize: task.totalOutputBytes
347
+ }
348
+ )
349
+ );
350
+ } finally {
351
+ task.resolveCompletion();
352
+ }
299
353
  });
300
354
 
301
355
  // Handle spawn errors (e.g., command not found)
302
356
  childProcess.on('error', (error: Error) => {
357
+ if (task.terminalFinalized) {
358
+ return;
359
+ }
360
+ task.terminalFinalized = true;
303
361
  task.status = 'failed';
362
+ task.exitCode = 1;
304
363
  task.endTime = Date.now();
305
364
  task.process = undefined;
306
365
 
@@ -309,28 +368,34 @@ export class BackgroundTaskManager {
309
368
  clearTimeout(task.timeoutTimer);
310
369
  task.timeoutTimer = undefined;
311
370
  }
371
+ if (task.forceKillTimer) {
372
+ clearTimeout(task.forceKillTimer);
373
+ task.forceKillTimer = undefined;
374
+ }
312
375
 
313
376
  this.logger.error(`Background task error: ${taskId} — ${error.message}`);
314
377
 
315
- const elapsedSeconds = (task.endTime - task.startTime) / 1000;
316
-
317
378
  // Emit SHELL_BACKGROUND_COMPLETED with failed status
318
- EventBus.server.emit(
319
- Events.Shell.SHELL_BACKGROUND_COMPLETED,
320
- createShellBackgroundCompletedPayload(
321
- task.agentId,
322
- task.channelId,
323
- {
324
- requestId: task.requestId,
325
- taskId,
326
- command: task.command,
327
- exitCode: 1,
328
- isError: true,
329
- executionTime: (task.endTime! - task.startTime),
330
- outputSize: task.totalOutputBytes
331
- }
332
- )
333
- );
379
+ try {
380
+ EventBus.server.emit(
381
+ Events.Shell.SHELL_BACKGROUND_COMPLETED,
382
+ createShellBackgroundCompletedPayload(
383
+ task.agentId,
384
+ task.channelId,
385
+ {
386
+ requestId: task.requestId,
387
+ taskId,
388
+ command: task.command,
389
+ exitCode: 1,
390
+ isError: true,
391
+ executionTime: (task.endTime! - task.startTime),
392
+ outputSize: task.totalOutputBytes
393
+ }
394
+ )
395
+ );
396
+ } finally {
397
+ task.resolveCompletion();
398
+ }
334
399
  });
335
400
 
336
401
  // Set up timeout if specified
@@ -341,14 +406,10 @@ export class BackgroundTaskManager {
341
406
  `Background task timed out after ${options.timeout}s: ${taskId}`
342
407
  );
343
408
  task.process.kill('SIGTERM');
344
- // Force kill after 5 seconds if SIGTERM didn't work
345
- setTimeout(() => {
346
- if (task.status === 'running' && task.process) {
347
- task.process.kill('SIGKILL');
348
- }
349
- }, 5000);
409
+ this.scheduleForceKill(task, taskId);
350
410
  }
351
411
  }, options.timeout * 1000);
412
+ task.timeoutTimer.unref?.();
352
413
  }
353
414
 
354
415
  return { taskId };
@@ -360,8 +421,8 @@ export class BackgroundTaskManager {
360
421
  * @param taskId - The task identifier returned by startBackground()
361
422
  * @returns BackgroundTaskInfo with current status and output preview, or null if not found
362
423
  */
363
- getTaskStatus(taskId: string): BackgroundTaskInfo | null {
364
- const task = this.tasks.get(taskId);
424
+ getTaskStatus(taskId: string, principal: BackgroundTaskPrincipal): BackgroundTaskInfo | null {
425
+ const task = this.getOwnedTask(taskId, principal);
365
426
  if (!task) {
366
427
  return null;
367
428
  }
@@ -375,8 +436,8 @@ export class BackgroundTaskManager {
375
436
  * @param taskId - The task identifier returned by startBackground()
376
437
  * @returns The accumulated stdout output, or null if the task is not found
377
438
  */
378
- getTaskOutput(taskId: string): string | null {
379
- const task = this.tasks.get(taskId);
439
+ getTaskOutput(taskId: string, principal: BackgroundTaskPrincipal): string | null {
440
+ const task = this.getOwnedTask(taskId, principal);
380
441
  if (!task) {
381
442
  return null;
382
443
  }
@@ -390,8 +451,8 @@ export class BackgroundTaskManager {
390
451
  * @param taskId - The task identifier returned by startBackground()
391
452
  * @returns true if the task was found and cancellation was initiated, false otherwise
392
453
  */
393
- cancelTask(taskId: string): boolean {
394
- const task = this.tasks.get(taskId);
454
+ cancelTask(taskId: string, principal: BackgroundTaskPrincipal): boolean {
455
+ const task = this.getOwnedTask(taskId, principal);
395
456
  if (!task) {
396
457
  this.logger.warn(`Cannot cancel task: ${taskId} — task not found`);
397
458
  return false;
@@ -422,32 +483,21 @@ export class BackgroundTaskManager {
422
483
  task.process.kill('SIGTERM');
423
484
 
424
485
  // Escalate to SIGKILL after 5 seconds if still alive
425
- const killTimer = setTimeout(() => {
426
- if (task.process) {
427
- this.logger.warn(`Force-killing background task: ${taskId} (SIGKILL)`);
428
- task.process.kill('SIGKILL');
429
- }
430
- }, 5000);
431
-
432
- // Clean up the kill timer when the process actually exits
433
- const originalClose = task.process;
434
- originalClose.on('close', () => {
435
- clearTimeout(killTimer);
436
- });
486
+ this.scheduleForceKill(task, taskId);
437
487
 
438
488
  return true;
439
489
  }
440
490
 
441
491
  /**
442
- * List all background tasks, optionally filtered by agent.
492
+ * List background tasks owned by the exact authenticated agent/channel pair.
443
493
  *
444
- * @param agentId - If provided, only tasks belonging to this agent are returned
494
+ * @param principal - Authenticated agent and channel identity
445
495
  * @returns Array of BackgroundTaskInfo for matching tasks
446
496
  */
447
- listTasks(agentId?: AgentId): BackgroundTaskInfo[] {
497
+ listTasks(principal: BackgroundTaskPrincipal): BackgroundTaskInfo[] {
448
498
  const results: BackgroundTaskInfo[] = [];
449
499
  for (const task of this.tasks.values()) {
450
- if (agentId && task.agentId !== agentId) {
500
+ if (task.agentId !== principal.agentId || task.channelId !== principal.channelId) {
451
501
  continue;
452
502
  }
453
503
  results.push(this.toTaskInfo(task));
@@ -459,7 +509,19 @@ export class BackgroundTaskManager {
459
509
  * Shutdown the manager: cancel all running tasks, clear timers, and release resources.
460
510
  * Called during server shutdown to ensure clean process cleanup.
461
511
  */
462
- shutdown(): void {
512
+ shutdown(): Promise<void> {
513
+ if (!this.shutdownPromise) {
514
+ this.isShuttingDown = true;
515
+ this.shutdownPromise = this.performShutdown().finally((): void => {
516
+ if (BackgroundTaskManager.instance === this) {
517
+ BackgroundTaskManager.instance = undefined;
518
+ }
519
+ });
520
+ }
521
+ return this.shutdownPromise;
522
+ }
523
+
524
+ private async performShutdown(): Promise<void> {
463
525
  this.logger.info('Shutting down BackgroundTaskManager...');
464
526
 
465
527
  // Clear the periodic cleanup timer
@@ -468,27 +530,72 @@ export class BackgroundTaskManager {
468
530
  this.cleanupTimer = undefined;
469
531
  }
470
532
 
471
- // Cancel all running tasks
533
+ const completions: Promise<void>[] = [];
534
+
535
+ // Terminate every live child and retain ownership until its terminal
536
+ // callback has emitted the final lifecycle event. A task can already be
537
+ // marked cancelled while its process is still exiting, so process
538
+ // ownership — not status — defines what shutdown must drain.
472
539
  for (const task of this.tasks.values()) {
473
- if (task.status === 'running' && task.process) {
474
- // Clear any timeout timers
475
- if (task.timeoutTimer) {
476
- clearTimeout(task.timeoutTimer);
477
- task.timeoutTimer = undefined;
478
- }
540
+ if (task.timeoutTimer) {
541
+ clearTimeout(task.timeoutTimer);
542
+ task.timeoutTimer = undefined;
543
+ }
544
+ if (task.forceKillTimer) {
545
+ clearTimeout(task.forceKillTimer);
546
+ task.forceKillTimer = undefined;
547
+ }
479
548
 
480
- task.status = 'cancelled';
481
- task.endTime = Date.now();
549
+ if (!task.terminalFinalized && task.process) {
550
+ if (task.status === 'running') {
551
+ task.status = 'cancelled';
552
+ }
553
+ task.endTime ??= Date.now();
554
+ completions.push(task.completion);
482
555
  task.process.kill('SIGKILL');
483
- task.process = undefined;
484
556
  }
485
557
  }
486
558
 
559
+ await Promise.all(completions);
560
+
487
561
  this.logger.info('BackgroundTaskManager shut down successfully');
488
562
  }
489
563
 
564
+ private scheduleForceKill(task: InternalTask, taskId: string): void {
565
+ if (task.forceKillTimer) {
566
+ clearTimeout(task.forceKillTimer);
567
+ }
568
+ task.forceKillTimer = setTimeout(() => {
569
+ task.forceKillTimer = undefined;
570
+ if (task.process) {
571
+ this.logger.warn(`Force-killing background task: ${taskId} (SIGKILL)`);
572
+ task.process.kill('SIGKILL');
573
+ }
574
+ }, 5000);
575
+ task.forceKillTimer.unref?.();
576
+ }
577
+
490
578
  // ---- Private helpers ----
491
579
 
580
+ /**
581
+ * Resolve a task only when it belongs to the authenticated principal. Returning
582
+ * null for both missing and foreign task IDs avoids leaking task existence.
583
+ */
584
+ private getOwnedTask(
585
+ taskId: string,
586
+ principal: BackgroundTaskPrincipal
587
+ ): InternalTask | null {
588
+ const task = this.tasks.get(taskId);
589
+ if (
590
+ !task ||
591
+ task.agentId !== principal.agentId ||
592
+ task.channelId !== principal.channelId
593
+ ) {
594
+ return null;
595
+ }
596
+ return task;
597
+ }
598
+
492
599
  /**
493
600
  * Append output to a task's buffer with ring-buffer semantics.
494
601
  * When the buffer exceeds maxOutputBufferSize, the front is trimmed.
@@ -74,6 +74,21 @@ export interface BrowserConfig {
74
74
  userAgent?: string;
75
75
  }
76
76
 
77
+ /** Chromium launch flags that preserve its OS sandbox boundary. */
78
+ export const getSecureBrowserLaunchArgs = (): string[] => [
79
+ '--disable-dev-shm-usage',
80
+ '--disable-gpu',
81
+ '--disable-background-timer-throttling',
82
+ '--disable-backgrounding-occluded-windows',
83
+ '--disable-renderer-backgrounding',
84
+ '--disable-features=TranslateUI',
85
+ '--disable-ipc-flooding-protection',
86
+ '--no-first-run',
87
+ '--no-default-browser-check',
88
+ '--disable-default-apps',
89
+ '--disable-extensions'
90
+ ];
91
+
77
92
  export class BrowserManager {
78
93
  private pools: Map<string, BrowserInstance[]> = new Map();
79
94
  private maxPoolSize: number;
@@ -176,21 +191,10 @@ export class BrowserManager {
176
191
  const puppeteer = await loadPuppeteer();
177
192
  const browser = await puppeteer.launch({
178
193
  headless: this.config.headless ?? true,
179
- args: [
180
- '--no-sandbox',
181
- '--disable-setuid-sandbox',
182
- '--disable-dev-shm-usage',
183
- '--disable-gpu',
184
- '--disable-background-timer-throttling',
185
- '--disable-backgrounding-occluded-windows',
186
- '--disable-renderer-backgrounding',
187
- '--disable-features=TranslateUI',
188
- '--disable-ipc-flooding-protection',
189
- '--no-first-run',
190
- '--no-default-browser-check',
191
- '--disable-default-apps',
192
- '--disable-extensions'
193
- ]
194
+ // Never pass --no-sandbox or --disable-setuid-sandbox. A deployment
195
+ // that cannot start Chromium with its OS sandbox intact must fail
196
+ // instead of silently executing hostile pages without isolation.
197
+ args: getSecureBrowserLaunchArgs()
194
198
  });
195
199
 
196
200
  const instance: BrowserInstance = {
@@ -287,4 +291,4 @@ export class BrowserManager {
287
291
  await Promise.all(closePromises);
288
292
  this.logger?.info('Browser cleanup completed');
289
293
  }
290
- }
294
+ }