@mxf-dev/core 2.0.5 → 3.1.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 (511) hide show
  1. package/dist/config/ConfigManager.d.ts +64 -0
  2. package/dist/config/ConfigManager.d.ts.map +1 -1
  3. package/dist/config/ConfigManager.js +68 -1
  4. package/dist/config/ConfigManager.js.map +1 -1
  5. package/dist/config/ModelContextLimits.d.ts.map +1 -1
  6. package/dist/config/ModelContextLimits.js +7 -1
  7. package/dist/config/ModelContextLimits.js.map +1 -1
  8. package/dist/constants/CoreTools.d.ts +6 -5
  9. package/dist/constants/CoreTools.d.ts.map +1 -1
  10. package/dist/constants/CoreTools.js +6 -5
  11. package/dist/constants/CoreTools.js.map +1 -1
  12. package/dist/constants/DefaultPhaseProfiles.d.ts.map +1 -1
  13. package/dist/constants/DefaultPhaseProfiles.js +29 -0
  14. package/dist/constants/DefaultPhaseProfiles.js.map +1 -1
  15. package/dist/constants/ReservedIdentities.d.ts +14 -0
  16. package/dist/constants/ReservedIdentities.d.ts.map +1 -0
  17. package/dist/constants/ReservedIdentities.js +42 -0
  18. package/dist/constants/ReservedIdentities.js.map +1 -0
  19. package/dist/database/adapters/mongodb/MongoChannelRepository.d.ts.map +1 -1
  20. package/dist/database/adapters/mongodb/MongoChannelRepository.js +2 -1
  21. package/dist/database/adapters/mongodb/MongoChannelRepository.js.map +1 -1
  22. package/dist/database/adapters/mongodb/MongoKnowledgeGraphRepository.d.ts +16 -16
  23. package/dist/database/adapters/mongodb/MongoKnowledgeGraphRepository.d.ts.map +1 -1
  24. package/dist/database/adapters/mongodb/MongoKnowledgeGraphRepository.js +98 -36
  25. package/dist/database/adapters/mongodb/MongoKnowledgeGraphRepository.js.map +1 -1
  26. package/dist/events/ClientEventBus.d.ts +28 -0
  27. package/dist/events/ClientEventBus.d.ts.map +1 -1
  28. package/dist/events/ClientEventBus.js +87 -40
  29. package/dist/events/ClientEventBus.js.map +1 -1
  30. package/dist/events/EventBus.d.ts +19 -1
  31. package/dist/events/EventBus.d.ts.map +1 -1
  32. package/dist/events/EventBus.js +23 -0
  33. package/dist/events/EventBus.js.map +1 -1
  34. package/dist/events/EventBusBase.d.ts +37 -6
  35. package/dist/events/EventBusBase.d.ts.map +1 -1
  36. package/dist/events/EventBusBase.js +75 -27
  37. package/dist/events/EventBusBase.js.map +1 -1
  38. package/dist/events/EventNames.d.ts +50 -36
  39. package/dist/events/EventNames.d.ts.map +1 -1
  40. package/dist/events/EventNames.js +38 -36
  41. package/dist/events/EventNames.js.map +1 -1
  42. package/dist/events/PublicEvents.d.ts +5 -1
  43. package/dist/events/PublicEvents.d.ts.map +1 -1
  44. package/dist/events/PublicEvents.js +7 -0
  45. package/dist/events/PublicEvents.js.map +1 -1
  46. package/dist/events/ServerEventBus.d.ts +7 -54
  47. package/dist/events/ServerEventBus.d.ts.map +1 -1
  48. package/dist/events/ServerEventBus.js +10 -96
  49. package/dist/events/ServerEventBus.js.map +1 -1
  50. package/dist/events/event-definitions/ConfigEvents.d.ts +6 -0
  51. package/dist/events/event-definitions/ConfigEvents.d.ts.map +1 -1
  52. package/dist/events/event-definitions/ConfigEvents.js +0 -5
  53. package/dist/events/event-definitions/ConfigEvents.js.map +1 -1
  54. package/dist/events/event-definitions/ControlLoopEvents.d.ts +35 -0
  55. package/dist/events/event-definitions/ControlLoopEvents.d.ts.map +1 -1
  56. package/dist/events/event-definitions/ControlLoopEvents.js +6 -0
  57. package/dist/events/event-definitions/ControlLoopEvents.js.map +1 -1
  58. package/dist/events/event-definitions/SdkEvents.d.ts +55 -0
  59. package/dist/events/event-definitions/SdkEvents.d.ts.map +1 -0
  60. package/dist/events/event-definitions/SdkEvents.js +36 -0
  61. package/dist/events/event-definitions/SdkEvents.js.map +1 -0
  62. package/dist/events/event-definitions/SystemEvents.d.ts +16 -0
  63. package/dist/events/event-definitions/SystemEvents.d.ts.map +1 -1
  64. package/dist/events/event-definitions/SystemEvents.js +2 -0
  65. package/dist/events/event-definitions/SystemEvents.js.map +1 -1
  66. package/dist/events/event-definitions/TaskEvents.d.ts +2 -7
  67. package/dist/events/event-definitions/TaskEvents.d.ts.map +1 -1
  68. package/dist/index.d.ts +4 -0
  69. package/dist/index.d.ts.map +1 -1
  70. package/dist/index.js +2 -0
  71. package/dist/index.js.map +1 -1
  72. package/dist/interfaces/AgentInterfaces.d.ts +5 -0
  73. package/dist/interfaces/AgentInterfaces.d.ts.map +1 -1
  74. package/dist/interfaces/Channel.d.ts +3 -0
  75. package/dist/interfaces/Channel.d.ts.map +1 -1
  76. package/dist/interfaces/ChannelConfig.d.ts +4 -2
  77. package/dist/interfaces/ChannelConfig.d.ts.map +1 -1
  78. package/dist/interfaces/ConversationMessage.d.ts +1 -1
  79. package/dist/interfaces/ConversationMessage.d.ts.map +1 -1
  80. package/dist/interfaces/IMemoryPersistence.d.ts +47 -1
  81. package/dist/interfaces/IMemoryPersistence.d.ts.map +1 -1
  82. package/dist/interfaces/SocketServiceInterface.d.ts +3 -2
  83. package/dist/interfaces/SocketServiceInterface.d.ts.map +1 -1
  84. package/dist/interfaces/TaskInterfaces.d.ts +14 -1
  85. package/dist/interfaces/TaskInterfaces.d.ts.map +1 -1
  86. package/dist/models/agent.d.ts +0 -1
  87. package/dist/models/agent.d.ts.map +1 -1
  88. package/dist/models/agent.js +0 -5
  89. package/dist/models/agent.js.map +1 -1
  90. package/dist/models/agentIdentityReservation.d.ts +42 -0
  91. package/dist/models/agentIdentityReservation.d.ts.map +1 -0
  92. package/dist/models/agentIdentityReservation.js +52 -0
  93. package/dist/models/agentIdentityReservation.js.map +1 -0
  94. package/dist/models/channel.d.ts +4 -0
  95. package/dist/models/channel.d.ts.map +1 -1
  96. package/dist/models/channel.js +8 -0
  97. package/dist/models/channel.js.map +1 -1
  98. package/dist/models/channelKey.d.ts +1 -0
  99. package/dist/models/channelKey.d.ts.map +1 -1
  100. package/dist/models/channelKey.js +5 -0
  101. package/dist/models/channelKey.js.map +1 -1
  102. package/dist/models/memory.d.ts +1 -1
  103. package/dist/models/memory.d.ts.map +1 -1
  104. package/dist/models/memory.js +9 -12
  105. package/dist/models/memory.js.map +1 -1
  106. package/dist/models/memoryStrata.d.ts +3 -16
  107. package/dist/models/memoryStrata.d.ts.map +1 -1
  108. package/dist/models/memoryStrata.js +3 -5
  109. package/dist/models/memoryStrata.js.map +1 -1
  110. package/dist/models/plan.d.ts +2 -2
  111. package/dist/models/plan.d.ts.map +1 -1
  112. package/dist/models/plan.js +1 -1
  113. package/dist/models/plan.js.map +1 -1
  114. package/dist/models/taskEffectiveness.d.ts +1 -0
  115. package/dist/models/taskEffectiveness.d.ts.map +1 -1
  116. package/dist/models/taskEffectiveness.js +7 -1
  117. package/dist/models/taskEffectiveness.js.map +1 -1
  118. package/dist/models/user.d.ts +4 -0
  119. package/dist/models/user.d.ts.map +1 -1
  120. package/dist/models/user.js +8 -0
  121. package/dist/models/user.js.map +1 -1
  122. package/dist/prompts/MxfAgentSystemPrompt.d.ts.map +1 -1
  123. package/dist/prompts/MxfAgentSystemPrompt.js +9 -1
  124. package/dist/prompts/MxfAgentSystemPrompt.js.map +1 -1
  125. package/dist/prompts/SystemLlmStanceGuidance.d.ts +37 -0
  126. package/dist/prompts/SystemLlmStanceGuidance.d.ts.map +1 -0
  127. package/dist/prompts/SystemLlmStanceGuidance.js +48 -0
  128. package/dist/prompts/SystemLlmStanceGuidance.js.map +1 -0
  129. package/dist/protocols/mcp/LlmTestEnvironmentGuard.d.ts +16 -0
  130. package/dist/protocols/mcp/LlmTestEnvironmentGuard.d.ts.map +1 -0
  131. package/dist/protocols/mcp/LlmTestEnvironmentGuard.js +25 -0
  132. package/dist/protocols/mcp/LlmTestEnvironmentGuard.js.map +1 -0
  133. package/dist/protocols/mcp/McpServerTypes.d.ts +9 -0
  134. package/dist/protocols/mcp/McpServerTypes.d.ts.map +1 -1
  135. package/dist/protocols/mcp/providers/AnthropicMcpClient.d.ts.map +1 -1
  136. package/dist/protocols/mcp/providers/AnthropicMcpClient.js +1 -0
  137. package/dist/protocols/mcp/providers/AnthropicMcpClient.js.map +1 -1
  138. package/dist/protocols/mcp/providers/AzureOpenAiMcpClient.d.ts.map +1 -1
  139. package/dist/protocols/mcp/providers/AzureOpenAiMcpClient.js +1 -0
  140. package/dist/protocols/mcp/providers/AzureOpenAiMcpClient.js.map +1 -1
  141. package/dist/protocols/mcp/providers/BaseMcpClient.d.ts +4 -0
  142. package/dist/protocols/mcp/providers/BaseMcpClient.d.ts.map +1 -1
  143. package/dist/protocols/mcp/providers/BaseMcpClient.js +10 -0
  144. package/dist/protocols/mcp/providers/BaseMcpClient.js.map +1 -1
  145. package/dist/protocols/mcp/providers/CustomMcpClient.d.ts.map +1 -1
  146. package/dist/protocols/mcp/providers/CustomMcpClient.js +7 -0
  147. package/dist/protocols/mcp/providers/CustomMcpClient.js.map +1 -1
  148. package/dist/protocols/mcp/providers/GeminiMcpClient.d.ts.map +1 -1
  149. package/dist/protocols/mcp/providers/GeminiMcpClient.js +1 -0
  150. package/dist/protocols/mcp/providers/GeminiMcpClient.js.map +1 -1
  151. package/dist/protocols/mcp/providers/OllamaMcpClient.d.ts +1 -0
  152. package/dist/protocols/mcp/providers/OllamaMcpClient.d.ts.map +1 -1
  153. package/dist/protocols/mcp/providers/OllamaMcpClient.js +1 -0
  154. package/dist/protocols/mcp/providers/OllamaMcpClient.js.map +1 -1
  155. package/dist/protocols/mcp/providers/OpenAiMcpClient.d.ts.map +1 -1
  156. package/dist/protocols/mcp/providers/OpenAiMcpClient.js +1 -0
  157. package/dist/protocols/mcp/providers/OpenAiMcpClient.js.map +1 -1
  158. package/dist/protocols/mcp/providers/OpenRouterMcpClient.d.ts.map +1 -1
  159. package/dist/protocols/mcp/providers/OpenRouterMcpClient.js +2 -0
  160. package/dist/protocols/mcp/providers/OpenRouterMcpClient.js.map +1 -1
  161. package/dist/protocols/mcp/providers/XaiMcpClient.d.ts.map +1 -1
  162. package/dist/protocols/mcp/providers/XaiMcpClient.js +1 -0
  163. package/dist/protocols/mcp/providers/XaiMcpClient.js.map +1 -1
  164. package/dist/protocols/mcp/security/BrowserTargetGuard.d.ts +14 -0
  165. package/dist/protocols/mcp/security/BrowserTargetGuard.d.ts.map +1 -0
  166. package/dist/protocols/mcp/security/BrowserTargetGuard.js +55 -0
  167. package/dist/protocols/mcp/security/BrowserTargetGuard.js.map +1 -0
  168. package/dist/protocols/mcp/security/ExternalMcpRegistrationPolicy.d.ts +24 -0
  169. package/dist/protocols/mcp/security/ExternalMcpRegistrationPolicy.d.ts.map +1 -0
  170. package/dist/protocols/mcp/security/ExternalMcpRegistrationPolicy.js +33 -0
  171. package/dist/protocols/mcp/security/ExternalMcpRegistrationPolicy.js.map +1 -0
  172. package/dist/protocols/mcp/security/HttpTargetGuard.d.ts.map +1 -1
  173. package/dist/protocols/mcp/security/HttpTargetGuard.js +68 -6
  174. package/dist/protocols/mcp/security/HttpTargetGuard.js.map +1 -1
  175. package/dist/protocols/mcp/security/McpSecurityGuard.d.ts.map +1 -1
  176. package/dist/protocols/mcp/security/McpSecurityGuard.js +7 -5
  177. package/dist/protocols/mcp/security/McpSecurityGuard.js.map +1 -1
  178. package/dist/protocols/mcp/security/McpToolPolicy.d.ts +18 -0
  179. package/dist/protocols/mcp/security/McpToolPolicy.d.ts.map +1 -1
  180. package/dist/protocols/mcp/security/McpToolPolicy.js +60 -0
  181. package/dist/protocols/mcp/security/McpToolPolicy.js.map +1 -1
  182. package/dist/protocols/mcp/services/ExternalMcpServerManager.d.ts +25 -0
  183. package/dist/protocols/mcp/services/ExternalMcpServerManager.d.ts.map +1 -1
  184. package/dist/protocols/mcp/services/ExternalMcpServerManager.js +93 -17
  185. package/dist/protocols/mcp/services/ExternalMcpServerManager.js.map +1 -1
  186. package/dist/protocols/mcp/services/ExternalServerConfigs.d.ts +2 -2
  187. package/dist/protocols/mcp/services/ExternalServerConfigs.d.ts.map +1 -1
  188. package/dist/protocols/mcp/services/ExternalServerConfigs.js +25 -8
  189. package/dist/protocols/mcp/services/ExternalServerConfigs.js.map +1 -1
  190. package/dist/protocols/mcp/tools/AnalyticsTools.d.ts +3 -37
  191. package/dist/protocols/mcp/tools/AnalyticsTools.d.ts.map +1 -1
  192. package/dist/protocols/mcp/tools/AnalyticsTools.js +134 -614
  193. package/dist/protocols/mcp/tools/AnalyticsTools.js.map +1 -1
  194. package/dist/protocols/mcp/tools/CodeAnalysisTools.d.ts.map +1 -1
  195. package/dist/protocols/mcp/tools/CodeAnalysisTools.js +16 -13
  196. package/dist/protocols/mcp/tools/CodeAnalysisTools.js.map +1 -1
  197. package/dist/protocols/mcp/tools/EffectivenessTools.d.ts.map +1 -1
  198. package/dist/protocols/mcp/tools/EffectivenessTools.js +94 -30
  199. package/dist/protocols/mcp/tools/EffectivenessTools.js.map +1 -1
  200. package/dist/protocols/mcp/tools/GitTools.d.ts.map +1 -1
  201. package/dist/protocols/mcp/tools/GitTools.js +9 -5
  202. package/dist/protocols/mcp/tools/GitTools.js.map +1 -1
  203. package/dist/protocols/mcp/tools/InfrastructureTools.d.ts +10 -40
  204. package/dist/protocols/mcp/tools/InfrastructureTools.d.ts.map +1 -1
  205. package/dist/protocols/mcp/tools/InfrastructureTools.js +29 -70
  206. package/dist/protocols/mcp/tools/InfrastructureTools.js.map +1 -1
  207. package/dist/protocols/mcp/tools/JsonTools.d.ts.map +1 -1
  208. package/dist/protocols/mcp/tools/JsonTools.js +4 -4
  209. package/dist/protocols/mcp/tools/JsonTools.js.map +1 -1
  210. package/dist/protocols/mcp/tools/KnowledgeGraphTools.d.ts +55 -592
  211. package/dist/protocols/mcp/tools/KnowledgeGraphTools.d.ts.map +1 -1
  212. package/dist/protocols/mcp/tools/KnowledgeGraphTools.js +169 -119
  213. package/dist/protocols/mcp/tools/KnowledgeGraphTools.js.map +1 -1
  214. package/dist/protocols/mcp/tools/MemorySearchTools.d.ts +6 -6
  215. package/dist/protocols/mcp/tools/MemorySearchTools.d.ts.map +1 -1
  216. package/dist/protocols/mcp/tools/MemorySearchTools.js +107 -39
  217. package/dist/protocols/mcp/tools/MemorySearchTools.js.map +1 -1
  218. package/dist/protocols/mcp/tools/MemoryUtilityTools.d.ts +4 -5
  219. package/dist/protocols/mcp/tools/MemoryUtilityTools.d.ts.map +1 -1
  220. package/dist/protocols/mcp/tools/MemoryUtilityTools.js +59 -208
  221. package/dist/protocols/mcp/tools/MemoryUtilityTools.js.map +1 -1
  222. package/dist/protocols/mcp/tools/PlanningTools.d.ts +2 -1
  223. package/dist/protocols/mcp/tools/PlanningTools.d.ts.map +1 -1
  224. package/dist/protocols/mcp/tools/PlanningTools.js +111 -49
  225. package/dist/protocols/mcp/tools/PlanningTools.js.map +1 -1
  226. package/dist/protocols/mcp/tools/ProjectContextTools.d.ts.map +1 -1
  227. package/dist/protocols/mcp/tools/ProjectContextTools.js +18 -12
  228. package/dist/protocols/mcp/tools/ProjectContextTools.js.map +1 -1
  229. package/dist/protocols/mcp/tools/SafetyTools.d.ts.map +1 -1
  230. package/dist/protocols/mcp/tools/SafetyTools.js +16 -13
  231. package/dist/protocols/mcp/tools/SafetyTools.js.map +1 -1
  232. package/dist/protocols/mcp/tools/SearchProjectTools.d.ts +24 -7
  233. package/dist/protocols/mcp/tools/SearchProjectTools.d.ts.map +1 -1
  234. package/dist/protocols/mcp/tools/SearchProjectTools.js +226 -126
  235. package/dist/protocols/mcp/tools/SearchProjectTools.js.map +1 -1
  236. package/dist/protocols/mcp/tools/TaskPlanningTools.d.ts +0 -32
  237. package/dist/protocols/mcp/tools/TaskPlanningTools.d.ts.map +1 -1
  238. package/dist/protocols/mcp/tools/TaskPlanningTools.js +363 -450
  239. package/dist/protocols/mcp/tools/TaskPlanningTools.js.map +1 -1
  240. package/dist/protocols/mcp/tools/TestTools.d.ts.map +1 -1
  241. package/dist/protocols/mcp/tools/TestTools.js +18 -11
  242. package/dist/protocols/mcp/tools/TestTools.js.map +1 -1
  243. package/dist/protocols/mcp/tools/TypeScriptTools.d.ts.map +1 -1
  244. package/dist/protocols/mcp/tools/TypeScriptTools.js +22 -12
  245. package/dist/protocols/mcp/tools/TypeScriptTools.js.map +1 -1
  246. package/dist/protocols/mcp/tools/UserInputTools.d.ts.map +1 -1
  247. package/dist/protocols/mcp/tools/UserInputTools.js +14 -1
  248. package/dist/protocols/mcp/tools/UserInputTools.js.map +1 -1
  249. package/dist/protocols/mcp/tools/UserMemoryTools.d.ts +3 -1
  250. package/dist/protocols/mcp/tools/UserMemoryTools.d.ts.map +1 -1
  251. package/dist/protocols/mcp/tools/UserMemoryTools.js +27 -62
  252. package/dist/protocols/mcp/tools/UserMemoryTools.js.map +1 -1
  253. package/dist/protocols/mcp/tools/shell/ShellExecuteHandler.d.ts.map +1 -1
  254. package/dist/protocols/mcp/tools/shell/ShellExecuteHandler.js +14 -60
  255. package/dist/protocols/mcp/tools/shell/ShellExecuteHandler.js.map +1 -1
  256. package/dist/protocols/mcp/tools/shell/ShellSandbox.d.ts.map +1 -1
  257. package/dist/protocols/mcp/tools/shell/ShellSandbox.js +9 -27
  258. package/dist/protocols/mcp/tools/shell/ShellSandbox.js.map +1 -1
  259. package/dist/repositories/interfaces/IChannelRepository.d.ts +2 -0
  260. package/dist/repositories/interfaces/IChannelRepository.d.ts.map +1 -1
  261. package/dist/repositories/interfaces/IKnowledgeGraphRepository.d.ts +40 -30
  262. package/dist/repositories/interfaces/IKnowledgeGraphRepository.d.ts.map +1 -1
  263. package/dist/schemas/EventPayloadSchema.d.ts +41 -1
  264. package/dist/schemas/EventPayloadSchema.d.ts.map +1 -1
  265. package/dist/schemas/EventPayloadSchema.js +54 -1
  266. package/dist/schemas/EventPayloadSchema.js.map +1 -1
  267. package/dist/schemas/MxpProtocolSchemas.d.ts +6 -6
  268. package/dist/services/AgentPerformanceService.d.ts +11 -0
  269. package/dist/services/AgentPerformanceService.d.ts.map +1 -1
  270. package/dist/services/AgentPerformanceService.js +59 -33
  271. package/dist/services/AgentPerformanceService.js.map +1 -1
  272. package/dist/services/AutoCorrectionService.d.ts +3 -0
  273. package/dist/services/AutoCorrectionService.d.ts.map +1 -1
  274. package/dist/services/AutoCorrectionService.js +19 -2
  275. package/dist/services/AutoCorrectionService.js.map +1 -1
  276. package/dist/services/BackgroundTaskManager.d.ts +29 -7
  277. package/dist/services/BackgroundTaskManager.d.ts.map +1 -1
  278. package/dist/services/BackgroundTaskManager.js +171 -60
  279. package/dist/services/BackgroundTaskManager.js.map +1 -1
  280. package/dist/services/BrowserManager.d.ts +2 -0
  281. package/dist/services/BrowserManager.d.ts.map +1 -1
  282. package/dist/services/BrowserManager.js +18 -15
  283. package/dist/services/BrowserManager.js.map +1 -1
  284. package/dist/services/ChannelContextMemoryOperations.d.ts +8 -1
  285. package/dist/services/ChannelContextMemoryOperations.d.ts.map +1 -1
  286. package/dist/services/ChannelContextMemoryOperations.js +89 -165
  287. package/dist/services/ChannelContextMemoryOperations.js.map +1 -1
  288. package/dist/services/ChannelContextMessageOperations.d.ts +4 -3
  289. package/dist/services/ChannelContextMessageOperations.d.ts.map +1 -1
  290. package/dist/services/ChannelContextMessageOperations.js +72 -212
  291. package/dist/services/ChannelContextMessageOperations.js.map +1 -1
  292. package/dist/services/MemoryService.d.ts +52 -21
  293. package/dist/services/MemoryService.d.ts.map +1 -1
  294. package/dist/services/MemoryService.js +775 -548
  295. package/dist/services/MemoryService.js.map +1 -1
  296. package/dist/services/PatternLearningService.d.ts +5 -0
  297. package/dist/services/PatternLearningService.d.ts.map +1 -1
  298. package/dist/services/PatternLearningService.js +26 -3
  299. package/dist/services/PatternLearningService.js.map +1 -1
  300. package/dist/services/PerformanceOptimizationService.d.ts +2 -1
  301. package/dist/services/PerformanceOptimizationService.d.ts.map +1 -1
  302. package/dist/services/PerformanceOptimizationService.js +21 -6
  303. package/dist/services/PerformanceOptimizationService.js.map +1 -1
  304. package/dist/services/PredictiveAnalyticsService.d.ts +1 -0
  305. package/dist/services/PredictiveAnalyticsService.d.ts.map +1 -1
  306. package/dist/services/PredictiveAnalyticsService.js +18 -6
  307. package/dist/services/PredictiveAnalyticsService.js.map +1 -1
  308. package/dist/services/ProactiveValidationService.d.ts +6 -0
  309. package/dist/services/ProactiveValidationService.d.ts.map +1 -1
  310. package/dist/services/ProactiveValidationService.js +58 -39
  311. package/dist/services/ProactiveValidationService.js.map +1 -1
  312. package/dist/services/TaskEffectivenessService.d.ts +55 -31
  313. package/dist/services/TaskEffectivenessService.d.ts.map +1 -1
  314. package/dist/services/TaskEffectivenessService.js +243 -125
  315. package/dist/services/TaskEffectivenessService.js.map +1 -1
  316. package/dist/services/ToolExecutionInterceptor.d.ts +4 -0
  317. package/dist/services/ToolExecutionInterceptor.d.ts.map +1 -1
  318. package/dist/services/ToolExecutionInterceptor.js +31 -5
  319. package/dist/services/ToolExecutionInterceptor.js.map +1 -1
  320. package/dist/services/UserInputRequestManager.d.ts +13 -3
  321. package/dist/services/UserInputRequestManager.d.ts.map +1 -1
  322. package/dist/services/UserInputRequestManager.js +42 -6
  323. package/dist/services/UserInputRequestManager.js.map +1 -1
  324. package/dist/services/UserMemoryService.d.ts +2 -0
  325. package/dist/services/UserMemoryService.d.ts.map +1 -1
  326. package/dist/services/UserMemoryService.js +9 -4
  327. package/dist/services/UserMemoryService.js.map +1 -1
  328. package/dist/services/ValidationAnalyticsService.d.ts +4 -0
  329. package/dist/services/ValidationAnalyticsService.d.ts.map +1 -1
  330. package/dist/services/ValidationAnalyticsService.js +30 -8
  331. package/dist/services/ValidationAnalyticsService.js.map +1 -1
  332. package/dist/services/ValidationCacheService.d.ts +3 -1
  333. package/dist/services/ValidationCacheService.d.ts.map +1 -1
  334. package/dist/services/ValidationCacheService.js +25 -4
  335. package/dist/services/ValidationCacheService.js.map +1 -1
  336. package/dist/services/ValidationMiddleware.d.ts +7 -0
  337. package/dist/services/ValidationMiddleware.d.ts.map +1 -1
  338. package/dist/services/ValidationMiddleware.js +53 -10
  339. package/dist/services/ValidationMiddleware.js.map +1 -1
  340. package/dist/services/ValidationPerformanceService.d.ts +3 -0
  341. package/dist/services/ValidationPerformanceService.d.ts.map +1 -1
  342. package/dist/services/ValidationPerformanceService.js +28 -11
  343. package/dist/services/ValidationPerformanceService.js.map +1 -1
  344. package/dist/services/WebSearchService.d.ts.map +1 -1
  345. package/dist/services/WebSearchService.js +9 -0
  346. package/dist/services/WebSearchService.js.map +1 -1
  347. package/dist/services/dag/TaskDagService.d.ts +3 -0
  348. package/dist/services/dag/TaskDagService.d.ts.map +1 -1
  349. package/dist/services/dag/TaskDagService.js +18 -0
  350. package/dist/services/dag/TaskDagService.js.map +1 -1
  351. package/dist/services/kg/EntityQValueManager.d.ts +3 -1
  352. package/dist/services/kg/EntityQValueManager.d.ts.map +1 -1
  353. package/dist/services/kg/EntityQValueManager.js +10 -10
  354. package/dist/services/kg/EntityQValueManager.js.map +1 -1
  355. package/dist/services/kg/GraphSurpriseCalculator.d.ts +0 -4
  356. package/dist/services/kg/GraphSurpriseCalculator.d.ts.map +1 -1
  357. package/dist/services/kg/GraphSurpriseCalculator.js +0 -9
  358. package/dist/services/kg/GraphSurpriseCalculator.js.map +1 -1
  359. package/dist/services/kg/KnowledgeGraphService.d.ts +12 -12
  360. package/dist/services/kg/KnowledgeGraphService.d.ts.map +1 -1
  361. package/dist/services/kg/KnowledgeGraphService.js +43 -51
  362. package/dist/services/kg/KnowledgeGraphService.js.map +1 -1
  363. package/dist/services/kg/OrparGraphIntegration.d.ts.map +1 -1
  364. package/dist/services/kg/OrparGraphIntegration.js +6 -5
  365. package/dist/services/kg/OrparGraphIntegration.js.map +1 -1
  366. package/dist/services/orpar-memory/CycleConsolidationTrigger.d.ts +1 -0
  367. package/dist/services/orpar-memory/CycleConsolidationTrigger.d.ts.map +1 -1
  368. package/dist/services/orpar-memory/CycleConsolidationTrigger.js +8 -1
  369. package/dist/services/orpar-memory/CycleConsolidationTrigger.js.map +1 -1
  370. package/dist/services/orpar-memory/OrparMemoryCoordinator.d.ts +8 -1
  371. package/dist/services/orpar-memory/OrparMemoryCoordinator.d.ts.map +1 -1
  372. package/dist/services/orpar-memory/OrparMemoryCoordinator.js +93 -45
  373. package/dist/services/orpar-memory/OrparMemoryCoordinator.js.map +1 -1
  374. package/dist/services/orpar-memory/SurpriseOrparAdapter.d.ts +1 -0
  375. package/dist/services/orpar-memory/SurpriseOrparAdapter.d.ts.map +1 -1
  376. package/dist/services/orpar-memory/SurpriseOrparAdapter.js +8 -1
  377. package/dist/services/orpar-memory/SurpriseOrparAdapter.js.map +1 -1
  378. package/dist/types/ChannelContext.d.ts +2 -1
  379. package/dist/types/ChannelContext.d.ts.map +1 -1
  380. package/dist/types/EffectivenessTypes.d.ts +4 -1
  381. package/dist/types/EffectivenessTypes.d.ts.map +1 -1
  382. package/dist/types/SystemLlmStanceTypes.d.ts +123 -0
  383. package/dist/types/SystemLlmStanceTypes.d.ts.map +1 -0
  384. package/dist/types/SystemLlmStanceTypes.js +101 -0
  385. package/dist/types/SystemLlmStanceTypes.js.map +1 -0
  386. package/dist/types/TaskCompletionTypes.d.ts +7 -5
  387. package/dist/types/TaskCompletionTypes.d.ts.map +1 -1
  388. package/dist/types/TaskTypes.d.ts +8 -1
  389. package/dist/types/TaskTypes.d.ts.map +1 -1
  390. package/dist/utils/GlobMatcher.d.ts +37 -0
  391. package/dist/utils/GlobMatcher.d.ts.map +1 -0
  392. package/dist/utils/GlobMatcher.js +131 -0
  393. package/dist/utils/GlobMatcher.js.map +1 -0
  394. package/dist/utils/PromptTemplateReplacer.d.ts +5 -0
  395. package/dist/utils/PromptTemplateReplacer.d.ts.map +1 -1
  396. package/dist/utils/PromptTemplateReplacer.js +13 -0
  397. package/dist/utils/PromptTemplateReplacer.js.map +1 -1
  398. package/package.json +1 -1
  399. package/src/config/ConfigManager.ts +126 -1
  400. package/src/config/ModelContextLimits.ts +7 -1
  401. package/src/constants/CoreTools.ts +6 -5
  402. package/src/constants/DefaultPhaseProfiles.ts +29 -0
  403. package/src/constants/ReservedIdentities.ts +51 -0
  404. package/src/database/adapters/mongodb/MongoChannelRepository.ts +2 -1
  405. package/src/database/adapters/mongodb/MongoKnowledgeGraphRepository.ts +115 -36
  406. package/src/events/ClientEventBus.ts +117 -48
  407. package/src/events/EventBus.ts +32 -2
  408. package/src/events/EventBusBase.ts +132 -39
  409. package/src/events/EventNames.ts +43 -36
  410. package/src/events/PublicEvents.ts +8 -0
  411. package/src/events/ServerEventBus.ts +9 -128
  412. package/src/events/event-definitions/ConfigEvents.ts +8 -0
  413. package/src/events/event-definitions/ControlLoopEvents.ts +12 -0
  414. package/src/events/event-definitions/SdkEvents.ts +58 -0
  415. package/src/events/event-definitions/SystemEvents.ts +24 -0
  416. package/src/events/event-definitions/TaskEvents.ts +2 -2
  417. package/src/index.ts +15 -0
  418. package/src/interfaces/AgentInterfaces.ts +5 -0
  419. package/src/interfaces/Channel.ts +4 -0
  420. package/src/interfaces/ChannelConfig.ts +8 -2
  421. package/src/interfaces/ConversationMessage.ts +6 -0
  422. package/src/interfaces/IMemoryPersistence.ts +55 -1
  423. package/src/interfaces/SocketServiceInterface.ts +3 -2
  424. package/src/interfaces/TaskInterfaces.ts +16 -1
  425. package/src/models/agent.ts +0 -6
  426. package/src/models/agentIdentityReservation.ts +77 -0
  427. package/src/models/channel.ts +12 -0
  428. package/src/models/channelKey.ts +10 -0
  429. package/src/models/memory.ts +18 -19
  430. package/src/models/memoryStrata.ts +9 -23
  431. package/src/models/plan.ts +3 -3
  432. package/src/models/taskEffectiveness.ts +9 -2
  433. package/src/models/user.ts +12 -0
  434. package/src/prompts/MxfAgentSystemPrompt.ts +9 -1
  435. package/src/prompts/SystemLlmStanceGuidance.ts +67 -0
  436. package/src/protocols/mcp/LlmTestEnvironmentGuard.ts +30 -0
  437. package/src/protocols/mcp/McpServerTypes.ts +9 -0
  438. package/src/protocols/mcp/providers/AnthropicMcpClient.ts +2 -0
  439. package/src/protocols/mcp/providers/AzureOpenAiMcpClient.ts +1 -0
  440. package/src/protocols/mcp/providers/BaseMcpClient.ts +13 -0
  441. package/src/protocols/mcp/providers/CustomMcpClient.ts +7 -0
  442. package/src/protocols/mcp/providers/GeminiMcpClient.ts +2 -0
  443. package/src/protocols/mcp/providers/OllamaMcpClient.ts +3 -1
  444. package/src/protocols/mcp/providers/OpenAiMcpClient.ts +2 -0
  445. package/src/protocols/mcp/providers/OpenRouterMcpClient.ts +3 -0
  446. package/src/protocols/mcp/providers/XaiMcpClient.ts +2 -0
  447. package/src/protocols/mcp/security/BrowserTargetGuard.ts +64 -0
  448. package/src/protocols/mcp/security/ExternalMcpRegistrationPolicy.ts +38 -0
  449. package/src/protocols/mcp/security/HttpTargetGuard.ts +77 -6
  450. package/src/protocols/mcp/security/McpSecurityGuard.ts +7 -5
  451. package/src/protocols/mcp/security/McpToolPolicy.ts +74 -0
  452. package/src/protocols/mcp/services/ExternalMcpServerManager.ts +146 -17
  453. package/src/protocols/mcp/services/ExternalServerConfigs.ts +26 -8
  454. package/src/protocols/mcp/tools/AnalyticsTools.ts +167 -641
  455. package/src/protocols/mcp/tools/CodeAnalysisTools.ts +44 -14
  456. package/src/protocols/mcp/tools/EffectivenessTools.ts +185 -45
  457. package/src/protocols/mcp/tools/GitTools.ts +15 -5
  458. package/src/protocols/mcp/tools/InfrastructureTools.ts +42 -90
  459. package/src/protocols/mcp/tools/JsonTools.ts +7 -4
  460. package/src/protocols/mcp/tools/KnowledgeGraphTools.ts +313 -164
  461. package/src/protocols/mcp/tools/MemorySearchTools.ts +158 -46
  462. package/src/protocols/mcp/tools/MemoryUtilityTools.ts +85 -232
  463. package/src/protocols/mcp/tools/PlanningTools.ts +137 -59
  464. package/src/protocols/mcp/tools/ProjectContextTools.ts +33 -12
  465. package/src/protocols/mcp/tools/SafetyTools.ts +49 -13
  466. package/src/protocols/mcp/tools/SearchProjectTools.ts +294 -153
  467. package/src/protocols/mcp/tools/TaskPlanningTools.ts +437 -514
  468. package/src/protocols/mcp/tools/TestTools.ts +41 -11
  469. package/src/protocols/mcp/tools/TypeScriptTools.ts +61 -12
  470. package/src/protocols/mcp/tools/UserInputTools.ts +15 -1
  471. package/src/protocols/mcp/tools/UserMemoryTools.ts +27 -62
  472. package/src/protocols/mcp/tools/shell/ShellExecuteHandler.ts +26 -84
  473. package/src/protocols/mcp/tools/shell/ShellSandbox.ts +13 -31
  474. package/src/repositories/interfaces/IChannelRepository.ts +2 -0
  475. package/src/repositories/interfaces/IKnowledgeGraphRepository.ts +45 -27
  476. package/src/schemas/EventPayloadSchema.ts +85 -2
  477. package/src/services/AgentPerformanceService.ts +85 -36
  478. package/src/services/AutoCorrectionService.ts +25 -6
  479. package/src/services/BackgroundTaskManager.ts +217 -79
  480. package/src/services/BrowserManager.ts +20 -16
  481. package/src/services/ChannelContextMemoryOperations.ts +169 -202
  482. package/src/services/ChannelContextMessageOperations.ts +112 -274
  483. package/src/services/MemoryService.ts +1053 -760
  484. package/src/services/PatternLearningService.ts +32 -7
  485. package/src/services/PerformanceOptimizationService.ts +26 -9
  486. package/src/services/PredictiveAnalyticsService.ts +23 -10
  487. package/src/services/ProactiveValidationService.ts +66 -40
  488. package/src/services/TaskEffectivenessService.ts +421 -206
  489. package/src/services/ToolExecutionInterceptor.ts +40 -9
  490. package/src/services/UserInputRequestManager.ts +51 -6
  491. package/src/services/UserMemoryService.ts +12 -3
  492. package/src/services/ValidationAnalyticsService.ts +36 -11
  493. package/src/services/ValidationCacheService.ts +30 -7
  494. package/src/services/ValidationMiddleware.ts +62 -14
  495. package/src/services/ValidationPerformanceService.ts +47 -25
  496. package/src/services/WebSearchService.ts +16 -4
  497. package/src/services/dag/TaskDagService.ts +20 -1
  498. package/src/services/kg/EntityQValueManager.ts +21 -10
  499. package/src/services/kg/GraphSurpriseCalculator.ts +0 -14
  500. package/src/services/kg/KnowledgeGraphService.ts +56 -48
  501. package/src/services/kg/OrparGraphIntegration.ts +11 -5
  502. package/src/services/orpar-memory/CycleConsolidationTrigger.ts +10 -1
  503. package/src/services/orpar-memory/OrparMemoryCoordinator.ts +142 -71
  504. package/src/services/orpar-memory/SurpriseOrparAdapter.ts +10 -1
  505. package/src/types/ChannelContext.ts +3 -1
  506. package/src/types/EffectivenessTypes.ts +6 -2
  507. package/src/types/SystemLlmStanceTypes.ts +162 -0
  508. package/src/types/TaskCompletionTypes.ts +9 -9
  509. package/src/types/TaskTypes.ts +12 -1
  510. package/src/utils/GlobMatcher.ts +157 -0
  511. package/src/utils/PromptTemplateReplacer.ts +17 -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,26 @@ 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
+ // The command runs under `sh -c`. On Linux, dash forks the command
232
+ // rather than exec'ing it, so a signal to the shell's pid left the
233
+ // real work running and holding the stdio pipes — `close` never
234
+ // fired and shutdown() waited on it. Each task gets its own process
235
+ // group and is signalled as a group (see signalTask).
236
+ detached: process.platform !== 'win32',
237
+ cwd: resolveWorkspacePath(
238
+ options.workingDirectory,
239
+ 'BackgroundTaskManager.startBackground'
240
+ ),
200
241
  env: buildShellChildEnv(options.environment),
201
242
  };
202
243
 
203
244
  const childProcess = spawn(command, [], spawnOptions);
204
245
 
205
246
  // Create the internal task entry
247
+ let resolveCompletion!: () => void;
248
+ const completion = new Promise<void>(resolve => {
249
+ resolveCompletion = resolve;
250
+ });
206
251
  const task: InternalTask = {
207
252
  taskId,
208
253
  command,
@@ -217,6 +262,9 @@ export class BackgroundTaskManager {
217
262
  process: childProcess,
218
263
  totalOutputBytes: 0,
219
264
  lastProgressEmit: 0,
265
+ completion,
266
+ resolveCompletion,
267
+ terminalFinalized: false,
220
268
  };
221
269
 
222
270
  this.tasks.set(taskId, task);
@@ -257,6 +305,10 @@ export class BackgroundTaskManager {
257
305
 
258
306
  // Handle process exit
259
307
  childProcess.on('close', (code: number | null) => {
308
+ if (task.terminalFinalized) {
309
+ return;
310
+ }
311
+ task.terminalFinalized = true;
260
312
  const exitCode = code ?? 1;
261
313
  task.exitCode = exitCode;
262
314
  task.endTime = Date.now();
@@ -271,6 +323,10 @@ export class BackgroundTaskManager {
271
323
  clearTimeout(task.timeoutTimer);
272
324
  task.timeoutTimer = undefined;
273
325
  }
326
+ if (task.forceKillTimer) {
327
+ clearTimeout(task.forceKillTimer);
328
+ task.forceKillTimer = undefined;
329
+ }
274
330
 
275
331
  const elapsedSeconds = (task.endTime - task.startTime) / 1000;
276
332
 
@@ -280,27 +336,36 @@ export class BackgroundTaskManager {
280
336
  );
281
337
 
282
338
  // 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
- );
339
+ try {
340
+ EventBus.server.emit(
341
+ Events.Shell.SHELL_BACKGROUND_COMPLETED,
342
+ createShellBackgroundCompletedPayload(
343
+ task.agentId,
344
+ task.channelId,
345
+ {
346
+ requestId: task.requestId,
347
+ taskId,
348
+ command: task.command,
349
+ exitCode,
350
+ isError: exitCode !== 0,
351
+ executionTime: (task.endTime! - task.startTime),
352
+ outputSize: task.totalOutputBytes
353
+ }
354
+ )
355
+ );
356
+ } finally {
357
+ task.resolveCompletion();
358
+ }
299
359
  });
300
360
 
301
361
  // Handle spawn errors (e.g., command not found)
302
362
  childProcess.on('error', (error: Error) => {
363
+ if (task.terminalFinalized) {
364
+ return;
365
+ }
366
+ task.terminalFinalized = true;
303
367
  task.status = 'failed';
368
+ task.exitCode = 1;
304
369
  task.endTime = Date.now();
305
370
  task.process = undefined;
306
371
 
@@ -309,28 +374,34 @@ export class BackgroundTaskManager {
309
374
  clearTimeout(task.timeoutTimer);
310
375
  task.timeoutTimer = undefined;
311
376
  }
377
+ if (task.forceKillTimer) {
378
+ clearTimeout(task.forceKillTimer);
379
+ task.forceKillTimer = undefined;
380
+ }
312
381
 
313
382
  this.logger.error(`Background task error: ${taskId} — ${error.message}`);
314
383
 
315
- const elapsedSeconds = (task.endTime - task.startTime) / 1000;
316
-
317
384
  // 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
- );
385
+ try {
386
+ EventBus.server.emit(
387
+ Events.Shell.SHELL_BACKGROUND_COMPLETED,
388
+ createShellBackgroundCompletedPayload(
389
+ task.agentId,
390
+ task.channelId,
391
+ {
392
+ requestId: task.requestId,
393
+ taskId,
394
+ command: task.command,
395
+ exitCode: 1,
396
+ isError: true,
397
+ executionTime: (task.endTime! - task.startTime),
398
+ outputSize: task.totalOutputBytes
399
+ }
400
+ )
401
+ );
402
+ } finally {
403
+ task.resolveCompletion();
404
+ }
334
405
  });
335
406
 
336
407
  // Set up timeout if specified
@@ -340,15 +411,11 @@ export class BackgroundTaskManager {
340
411
  this.logger.warn(
341
412
  `Background task timed out after ${options.timeout}s: ${taskId}`
342
413
  );
343
- 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);
414
+ this.signalTask(task, 'SIGTERM');
415
+ this.scheduleForceKill(task, taskId);
350
416
  }
351
417
  }, options.timeout * 1000);
418
+ task.timeoutTimer.unref?.();
352
419
  }
353
420
 
354
421
  return { taskId };
@@ -360,8 +427,8 @@ export class BackgroundTaskManager {
360
427
  * @param taskId - The task identifier returned by startBackground()
361
428
  * @returns BackgroundTaskInfo with current status and output preview, or null if not found
362
429
  */
363
- getTaskStatus(taskId: string): BackgroundTaskInfo | null {
364
- const task = this.tasks.get(taskId);
430
+ getTaskStatus(taskId: string, principal: BackgroundTaskPrincipal): BackgroundTaskInfo | null {
431
+ const task = this.getOwnedTask(taskId, principal);
365
432
  if (!task) {
366
433
  return null;
367
434
  }
@@ -375,8 +442,8 @@ export class BackgroundTaskManager {
375
442
  * @param taskId - The task identifier returned by startBackground()
376
443
  * @returns The accumulated stdout output, or null if the task is not found
377
444
  */
378
- getTaskOutput(taskId: string): string | null {
379
- const task = this.tasks.get(taskId);
445
+ getTaskOutput(taskId: string, principal: BackgroundTaskPrincipal): string | null {
446
+ const task = this.getOwnedTask(taskId, principal);
380
447
  if (!task) {
381
448
  return null;
382
449
  }
@@ -390,8 +457,8 @@ export class BackgroundTaskManager {
390
457
  * @param taskId - The task identifier returned by startBackground()
391
458
  * @returns true if the task was found and cancellation was initiated, false otherwise
392
459
  */
393
- cancelTask(taskId: string): boolean {
394
- const task = this.tasks.get(taskId);
460
+ cancelTask(taskId: string, principal: BackgroundTaskPrincipal): boolean {
461
+ const task = this.getOwnedTask(taskId, principal);
395
462
  if (!task) {
396
463
  this.logger.warn(`Cannot cancel task: ${taskId} — task not found`);
397
464
  return false;
@@ -419,35 +486,24 @@ export class BackgroundTaskManager {
419
486
  }
420
487
 
421
488
  // Send SIGTERM for graceful shutdown
422
- task.process.kill('SIGTERM');
489
+ this.signalTask(task, 'SIGTERM');
423
490
 
424
491
  // 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
- });
492
+ this.scheduleForceKill(task, taskId);
437
493
 
438
494
  return true;
439
495
  }
440
496
 
441
497
  /**
442
- * List all background tasks, optionally filtered by agent.
498
+ * List background tasks owned by the exact authenticated agent/channel pair.
443
499
  *
444
- * @param agentId - If provided, only tasks belonging to this agent are returned
500
+ * @param principal - Authenticated agent and channel identity
445
501
  * @returns Array of BackgroundTaskInfo for matching tasks
446
502
  */
447
- listTasks(agentId?: AgentId): BackgroundTaskInfo[] {
503
+ listTasks(principal: BackgroundTaskPrincipal): BackgroundTaskInfo[] {
448
504
  const results: BackgroundTaskInfo[] = [];
449
505
  for (const task of this.tasks.values()) {
450
- if (agentId && task.agentId !== agentId) {
506
+ if (task.agentId !== principal.agentId || task.channelId !== principal.channelId) {
451
507
  continue;
452
508
  }
453
509
  results.push(this.toTaskInfo(task));
@@ -459,7 +515,19 @@ export class BackgroundTaskManager {
459
515
  * Shutdown the manager: cancel all running tasks, clear timers, and release resources.
460
516
  * Called during server shutdown to ensure clean process cleanup.
461
517
  */
462
- shutdown(): void {
518
+ shutdown(): Promise<void> {
519
+ if (!this.shutdownPromise) {
520
+ this.isShuttingDown = true;
521
+ this.shutdownPromise = this.performShutdown().finally((): void => {
522
+ if (BackgroundTaskManager.instance === this) {
523
+ BackgroundTaskManager.instance = undefined;
524
+ }
525
+ });
526
+ }
527
+ return this.shutdownPromise;
528
+ }
529
+
530
+ private async performShutdown(): Promise<void> {
463
531
  this.logger.info('Shutting down BackgroundTaskManager...');
464
532
 
465
533
  // Clear the periodic cleanup timer
@@ -468,27 +536,97 @@ export class BackgroundTaskManager {
468
536
  this.cleanupTimer = undefined;
469
537
  }
470
538
 
471
- // Cancel all running tasks
539
+ const completions: Promise<void>[] = [];
540
+
541
+ // Terminate every live child and retain ownership until its terminal
542
+ // callback has emitted the final lifecycle event. A task can already be
543
+ // marked cancelled while its process is still exiting, so process
544
+ // ownership — not status — defines what shutdown must drain.
472
545
  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
- }
546
+ if (task.timeoutTimer) {
547
+ clearTimeout(task.timeoutTimer);
548
+ task.timeoutTimer = undefined;
549
+ }
550
+ if (task.forceKillTimer) {
551
+ clearTimeout(task.forceKillTimer);
552
+ task.forceKillTimer = undefined;
553
+ }
479
554
 
480
- task.status = 'cancelled';
481
- task.endTime = Date.now();
482
- task.process.kill('SIGKILL');
483
- task.process = undefined;
555
+ if (!task.terminalFinalized && task.process) {
556
+ if (task.status === 'running') {
557
+ task.status = 'cancelled';
558
+ }
559
+ task.endTime ??= Date.now();
560
+ completions.push(task.completion);
561
+ this.signalTask(task, 'SIGKILL');
484
562
  }
485
563
  }
486
564
 
565
+ await Promise.all(completions);
566
+
487
567
  this.logger.info('BackgroundTaskManager shut down successfully');
488
568
  }
489
569
 
570
+ private scheduleForceKill(task: InternalTask, taskId: string): void {
571
+ if (task.forceKillTimer) {
572
+ clearTimeout(task.forceKillTimer);
573
+ }
574
+ task.forceKillTimer = setTimeout(() => {
575
+ task.forceKillTimer = undefined;
576
+ if (task.process) {
577
+ this.logger.warn(`Force-killing background task: ${taskId} (SIGKILL)`);
578
+ this.signalTask(task, 'SIGKILL');
579
+ }
580
+ }, 5000);
581
+ task.forceKillTimer.unref?.();
582
+ }
583
+
584
+ /**
585
+ * Deliver a signal to a task's whole process group — the shell and every
586
+ * process it started — so the work actually stops and its stdio pipes
587
+ * close. A group that has already exited (ESRCH) is not an error.
588
+ */
589
+ private signalTask(task: InternalTask, signal: NodeJS.Signals): void {
590
+ const child = task.process;
591
+ if (!child) {
592
+ return;
593
+ }
594
+ // No pid means the process never started, so there is no group to
595
+ // signal; Windows has no process groups to signal either.
596
+ if (child.pid === undefined || process.platform === 'win32') {
597
+ child.kill(signal);
598
+ return;
599
+ }
600
+ try {
601
+ process.kill(-child.pid, signal);
602
+ } catch (error) {
603
+ if ((error as NodeJS.ErrnoException).code !== 'ESRCH') {
604
+ throw error;
605
+ }
606
+ }
607
+ }
608
+
490
609
  // ---- Private helpers ----
491
610
 
611
+ /**
612
+ * Resolve a task only when it belongs to the authenticated principal. Returning
613
+ * null for both missing and foreign task IDs avoids leaking task existence.
614
+ */
615
+ private getOwnedTask(
616
+ taskId: string,
617
+ principal: BackgroundTaskPrincipal
618
+ ): InternalTask | null {
619
+ const task = this.tasks.get(taskId);
620
+ if (
621
+ !task ||
622
+ task.agentId !== principal.agentId ||
623
+ task.channelId !== principal.channelId
624
+ ) {
625
+ return null;
626
+ }
627
+ return task;
628
+ }
629
+
492
630
  /**
493
631
  * Append output to a task's buffer with ring-buffer semantics.
494
632
  * 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
+ }