claude-flow-novice 1.6.1 → 1.6.3

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 (273) hide show
  1. package/.claude/agents/cfn-loop/product-owner.md +54 -4
  2. package/.claude/commands/cfn-claude-sync.md +303 -0
  3. package/.claude/commands/cfn-loop-epic.md +290 -0
  4. package/.claude/commands/cfn-loop-single.md +168 -0
  5. package/.claude/commands/cfn-loop-sprints.md +384 -0
  6. package/.claude/commands/cfn-loop.md +180 -0
  7. package/.claude/commands/metrics-summary.md +58 -0
  8. package/.claude/commands/parse-epic.md +357 -0
  9. package/.claude/settings.json +5 -4
  10. package/.claude/settings.local.json +9 -2
  11. package/.claude-flow-novice/.claude/agents/cfn-loop/product-owner.md +792 -0
  12. package/.claude-flow-novice/dist/mcp/server.js +21 -2
  13. package/.claude-flow-novice/dist/src/api/auth-service.js +84 -38
  14. package/.claude-flow-novice/dist/src/api/auth-service.js.map +1 -1
  15. package/.claude-flow-novice/dist/src/api/claude-client.js +138 -3
  16. package/.claude-flow-novice/dist/src/api/claude-client.js.map +1 -1
  17. package/.claude-flow-novice/dist/src/cfn-loop/phase-orchestrator-example.js +1 -1
  18. package/.claude-flow-novice/dist/src/cfn-loop/scope-control.js +247 -0
  19. package/.claude-flow-novice/dist/src/cfn-loop/scope-control.js.map +1 -0
  20. package/.claude-flow-novice/dist/src/cli/commands/swarm.js +32 -15
  21. package/.claude-flow-novice/dist/src/cli/commands/swarm.js.map +1 -1
  22. package/.claude-flow-novice/dist/src/cli/commands/transparency.js +455 -0
  23. package/.claude-flow-novice/dist/src/cli/commands/transparency.js.map +1 -0
  24. package/.claude-flow-novice/dist/src/cli/simple-commands/init/templates/CLAUDE.md +129 -13
  25. package/.claude-flow-novice/dist/src/components/visualizations/index.js +9 -0
  26. package/.claude-flow-novice/dist/src/components/visualizations/index.js.map +1 -0
  27. package/.claude-flow-novice/dist/src/coordination/adapters/v1-coordinator-adapter.js +462 -0
  28. package/.claude-flow-novice/dist/src/coordination/adapters/v1-coordinator-adapter.js.map +1 -0
  29. package/.claude-flow-novice/dist/src/coordination/config-translator.js +248 -0
  30. package/.claude-flow-novice/dist/src/coordination/config-translator.js.map +1 -0
  31. package/.claude-flow-novice/dist/src/coordination/coordination-toggle.js +287 -0
  32. package/.claude-flow-novice/dist/src/coordination/coordination-toggle.js.map +1 -0
  33. package/.claude-flow-novice/dist/src/coordination/distributed-consensus.js +68 -9
  34. package/.claude-flow-novice/dist/src/coordination/distributed-consensus.js.map +1 -1
  35. package/.claude-flow-novice/dist/src/coordination/feature-flags.js +166 -0
  36. package/.claude-flow-novice/dist/src/coordination/feature-flags.js.map +1 -0
  37. package/.claude-flow-novice/dist/src/coordination/queen-agent.js +18 -4
  38. package/.claude-flow-novice/dist/src/coordination/queen-agent.js.map +1 -1
  39. package/.claude-flow-novice/dist/src/coordination/role-assignment.js +6 -110
  40. package/.claude-flow-novice/dist/src/coordination/role-assignment.js.map +1 -1
  41. package/.claude-flow-novice/dist/src/coordination/v2/cache/artifact-cache-optimizer.js +632 -0
  42. package/.claude-flow-novice/dist/src/coordination/v2/cache/artifact-cache-optimizer.js.map +1 -0
  43. package/.claude-flow-novice/dist/src/coordination/v2/cache/index.js +11 -0
  44. package/.claude-flow-novice/dist/src/coordination/v2/cache/index.js.map +1 -0
  45. package/.claude-flow-novice/dist/src/coordination/v2/checkpoints/checkpoint-compressor.js +318 -0
  46. package/.claude-flow-novice/dist/src/coordination/v2/checkpoints/checkpoint-compressor.js.map +1 -0
  47. package/.claude-flow-novice/dist/src/coordination/v2/coordinators/cascading-shutdown.example.js +364 -0
  48. package/.claude-flow-novice/dist/src/coordination/v2/coordinators/cascading-shutdown.example.js.map +1 -0
  49. package/.claude-flow-novice/dist/src/coordination/v2/coordinators/cascading-shutdown.js +492 -0
  50. package/.claude-flow-novice/dist/src/coordination/v2/coordinators/cascading-shutdown.js.map +1 -0
  51. package/.claude-flow-novice/dist/src/coordination/v2/coordinators/hierarchical-coordinator.js +786 -0
  52. package/.claude-flow-novice/dist/src/coordination/v2/coordinators/hierarchical-coordinator.js.map +1 -0
  53. package/.claude-flow-novice/dist/src/coordination/v2/coordinators/index.js +16 -0
  54. package/.claude-flow-novice/dist/src/coordination/v2/coordinators/index.js.map +1 -0
  55. package/.claude-flow-novice/dist/src/coordination/v2/coordinators/parent-child-manager.js +342 -0
  56. package/.claude-flow-novice/dist/src/coordination/v2/coordinators/parent-child-manager.js.map +1 -0
  57. package/.claude-flow-novice/dist/src/coordination/v2/coordinators/swarm-coordinator-v2.js +601 -0
  58. package/.claude-flow-novice/dist/src/coordination/v2/coordinators/swarm-coordinator-v2.js.map +1 -0
  59. package/.claude-flow-novice/dist/src/coordination/v2/core/help-request-metrics.js +211 -0
  60. package/.claude-flow-novice/dist/src/coordination/v2/core/help-request-metrics.js.map +1 -0
  61. package/.claude-flow-novice/dist/src/coordination/v2/core/index.js +1 -0
  62. package/.claude-flow-novice/dist/src/coordination/v2/core/index.js.map +1 -1
  63. package/.claude-flow-novice/dist/src/coordination/v2/core/message-broker.js +365 -6
  64. package/.claude-flow-novice/dist/src/coordination/v2/core/message-broker.js.map +1 -1
  65. package/.claude-flow-novice/dist/src/coordination/v2/core/resource-manager-safe.js +478 -0
  66. package/.claude-flow-novice/dist/src/coordination/v2/core/resource-manager-safe.js.map +1 -0
  67. package/.claude-flow-novice/dist/src/coordination/v2/core/state-machine-config.js +5 -2
  68. package/.claude-flow-novice/dist/src/coordination/v2/core/state-machine-config.js.map +1 -1
  69. package/.claude-flow-novice/dist/src/coordination/v2/core/state-machine.js +189 -0
  70. package/.claude-flow-novice/dist/src/coordination/v2/core/state-machine.js.map +1 -1
  71. package/.claude-flow-novice/dist/src/coordination/v2/deadlock/deadlock-detector.js +424 -0
  72. package/.claude-flow-novice/dist/src/coordination/v2/deadlock/deadlock-detector.js.map +1 -0
  73. package/.claude-flow-novice/dist/src/coordination/v2/deadlock/index.js +9 -0
  74. package/.claude-flow-novice/dist/src/coordination/v2/deadlock/index.js.map +1 -0
  75. package/.claude-flow-novice/dist/src/coordination/v2/deadlock/resource-manager.js +669 -0
  76. package/.claude-flow-novice/dist/src/coordination/v2/deadlock/resource-manager.js.map +1 -0
  77. package/.claude-flow-novice/dist/src/coordination/v2/dependency/artifact-storage.js +451 -0
  78. package/.claude-flow-novice/dist/src/coordination/v2/dependency/artifact-storage.js.map +1 -0
  79. package/.claude-flow-novice/dist/src/coordination/v2/dependency/cycle-detector.js +271 -0
  80. package/.claude-flow-novice/dist/src/coordination/v2/dependency/cycle-detector.js.map +1 -0
  81. package/.claude-flow-novice/dist/src/coordination/v2/dependency/dependency-graph.js +335 -0
  82. package/.claude-flow-novice/dist/src/coordination/v2/dependency/dependency-graph.js.map +1 -0
  83. package/.claude-flow-novice/dist/src/coordination/v2/dependency/dependency-manager.js +439 -0
  84. package/.claude-flow-novice/dist/src/coordination/v2/dependency/dependency-manager.js.map +1 -0
  85. package/.claude-flow-novice/dist/src/coordination/v2/dependency/dependency-request.js +92 -0
  86. package/.claude-flow-novice/dist/src/coordination/v2/dependency/dependency-request.js.map +1 -0
  87. package/.claude-flow-novice/dist/src/coordination/v2/dependency/index.js +21 -0
  88. package/.claude-flow-novice/dist/src/coordination/v2/dependency/index.js.map +1 -0
  89. package/.claude-flow-novice/dist/src/coordination/v2/dependency/topological-sort.js +223 -0
  90. package/.claude-flow-novice/dist/src/coordination/v2/dependency/topological-sort.js.map +1 -0
  91. package/.claude-flow-novice/dist/src/coordination/v2/help-system/help-coordinator.js +436 -0
  92. package/.claude-flow-novice/dist/src/coordination/v2/help-system/help-coordinator.js.map +1 -0
  93. package/.claude-flow-novice/dist/src/coordination/v2/help-system/help-matcher.js +278 -0
  94. package/.claude-flow-novice/dist/src/coordination/v2/help-system/help-matcher.js.map +1 -0
  95. package/.claude-flow-novice/dist/src/coordination/v2/help-system/help-request-handler.js +317 -0
  96. package/.claude-flow-novice/dist/src/coordination/v2/help-system/help-request-handler.js.map +1 -0
  97. package/.claude-flow-novice/dist/src/coordination/v2/help-system/help-request.js +273 -0
  98. package/.claude-flow-novice/dist/src/coordination/v2/help-system/help-request.js.map +1 -0
  99. package/.claude-flow-novice/dist/src/coordination/v2/help-system/index.js +15 -0
  100. package/.claude-flow-novice/dist/src/coordination/v2/help-system/index.js.map +1 -0
  101. package/.claude-flow-novice/dist/src/coordination/v2/help-system/waiting-agent-pool.js +512 -0
  102. package/.claude-flow-novice/dist/src/coordination/v2/help-system/waiting-agent-pool.js.map +1 -0
  103. package/.claude-flow-novice/dist/src/coordination/v2/index.js +6 -0
  104. package/.claude-flow-novice/dist/src/coordination/v2/index.js.map +1 -1
  105. package/.claude-flow-novice/dist/src/coordination/v2/integration/help-deadlock-integration.js +557 -0
  106. package/.claude-flow-novice/dist/src/coordination/v2/integration/help-deadlock-integration.js.map +1 -0
  107. package/.claude-flow-novice/dist/src/coordination/v2/integration/index.js +14 -0
  108. package/.claude-flow-novice/dist/src/coordination/v2/integration/index.js.map +1 -0
  109. package/.claude-flow-novice/dist/src/coordination/v2/integration/message-bus-completion-integration.example.js +212 -0
  110. package/.claude-flow-novice/dist/src/coordination/v2/integration/message-bus-completion-integration.example.js.map +1 -0
  111. package/.claude-flow-novice/dist/src/coordination/v2/integration/message-bus-completion-integration.js +552 -0
  112. package/.claude-flow-novice/dist/src/coordination/v2/integration/message-bus-completion-integration.js.map +1 -0
  113. package/.claude-flow-novice/dist/src/coordination/v2/memory/dependency-storage.js +367 -0
  114. package/.claude-flow-novice/dist/src/coordination/v2/memory/dependency-storage.js.map +1 -0
  115. package/.claude-flow-novice/dist/src/coordination/v2/memory/index.js +1 -0
  116. package/.claude-flow-novice/dist/src/coordination/v2/memory/index.js.map +1 -1
  117. package/.claude-flow-novice/dist/src/coordination/v2/messaging/channel.js +371 -0
  118. package/.claude-flow-novice/dist/src/coordination/v2/messaging/channel.js.map +1 -0
  119. package/.claude-flow-novice/dist/src/coordination/v2/messaging/channels/dependency-channel.js +355 -0
  120. package/.claude-flow-novice/dist/src/coordination/v2/messaging/channels/dependency-channel.js.map +1 -0
  121. package/.claude-flow-novice/dist/src/coordination/v2/messaging/channels/help-channel.js +424 -0
  122. package/.claude-flow-novice/dist/src/coordination/v2/messaging/channels/help-channel.js.map +1 -0
  123. package/.claude-flow-novice/dist/src/coordination/v2/messaging/channels/index.js +16 -0
  124. package/.claude-flow-novice/dist/src/coordination/v2/messaging/channels/index.js.map +1 -0
  125. package/.claude-flow-novice/dist/src/coordination/v2/messaging/channels/state-channel.js +295 -0
  126. package/.claude-flow-novice/dist/src/coordination/v2/messaging/channels/state-channel.js.map +1 -0
  127. package/.claude-flow-novice/dist/src/coordination/v2/messaging/channels/task-channel.js +411 -0
  128. package/.claude-flow-novice/dist/src/coordination/v2/messaging/channels/task-channel.js.map +1 -0
  129. package/.claude-flow-novice/dist/src/coordination/v2/messaging/index.js +14 -0
  130. package/.claude-flow-novice/dist/src/coordination/v2/messaging/index.js.map +1 -0
  131. package/.claude-flow-novice/dist/src/coordination/v2/messaging/message-bus.js +387 -0
  132. package/.claude-flow-novice/dist/src/coordination/v2/messaging/message-bus.js.map +1 -0
  133. package/.claude-flow-novice/dist/src/coordination/v2/messaging/message-persistence.js +589 -0
  134. package/.claude-flow-novice/dist/src/coordination/v2/messaging/message-persistence.js.map +1 -0
  135. package/.claude-flow-novice/dist/src/coordination/v2/messaging/message-router.js +444 -0
  136. package/.claude-flow-novice/dist/src/coordination/v2/messaging/message-router.js.map +1 -0
  137. package/.claude-flow-novice/dist/src/coordination/v2/sdk/checkpoint-manager.js +29 -8
  138. package/.claude-flow-novice/dist/src/coordination/v2/sdk/checkpoint-manager.js.map +1 -1
  139. package/.claude-flow-novice/dist/src/coordination/v2/sdk/help-coordinator.js +470 -0
  140. package/.claude-flow-novice/dist/src/coordination/v2/sdk/help-coordinator.js.map +1 -0
  141. package/.claude-flow-novice/dist/src/coordination/v2/sdk/hierarchical-background-integration.js +450 -0
  142. package/.claude-flow-novice/dist/src/coordination/v2/sdk/hierarchical-background-integration.js.map +1 -0
  143. package/.claude-flow-novice/dist/src/coordination/v2/sdk/index.js +5 -0
  144. package/.claude-flow-novice/dist/src/coordination/v2/sdk/index.js.map +1 -1
  145. package/.claude-flow-novice/dist/src/coordination/v2/sdk/multi-level-control.js +545 -0
  146. package/.claude-flow-novice/dist/src/coordination/v2/sdk/multi-level-control.js.map +1 -0
  147. package/.claude-flow-novice/dist/src/coordination/v2/sdk/query-controller.js +44 -0
  148. package/.claude-flow-novice/dist/src/coordination/v2/sdk/query-controller.js.map +1 -1
  149. package/.claude-flow-novice/dist/src/coordination/v2/sdk/query-message-integration.js +415 -0
  150. package/.claude-flow-novice/dist/src/coordination/v2/sdk/query-message-integration.js.map +1 -0
  151. package/.claude-flow-novice/dist/src/coordination/v2/sdk/session-pool-optimizer.js +615 -0
  152. package/.claude-flow-novice/dist/src/coordination/v2/sdk/session-pool-optimizer.js.map +1 -0
  153. package/.claude-flow-novice/dist/src/coordination/v2/security/payload-validator.js +259 -0
  154. package/.claude-flow-novice/dist/src/coordination/v2/security/payload-validator.js.map +1 -0
  155. package/.claude-flow-novice/dist/src/coordination/v2/transparency/index.js +17 -0
  156. package/.claude-flow-novice/dist/src/coordination/v2/transparency/index.js.map +1 -0
  157. package/.claude-flow-novice/dist/src/coordination/v2/transparency/transparency-integration.js +357 -0
  158. package/.claude-flow-novice/dist/src/coordination/v2/transparency/transparency-integration.js.map +1 -0
  159. package/.claude-flow-novice/dist/src/coordination/v2/transparency/transparency-system.js +679 -0
  160. package/.claude-flow-novice/dist/src/coordination/v2/transparency/transparency-system.js.map +1 -0
  161. package/.claude-flow-novice/dist/src/core/agent-manager.js +30 -0
  162. package/.claude-flow-novice/dist/src/core/agent-manager.js.map +1 -1
  163. package/.claude-flow-novice/dist/src/mcp/server.js +21 -2
  164. package/.claude-flow-novice/dist/src/mcp/server.js.map +1 -1
  165. package/.claude-flow-novice/dist/src/monitoring/apm/apm-integration.js +719 -0
  166. package/.claude-flow-novice/dist/src/monitoring/apm/apm-integration.js.map +1 -0
  167. package/.claude-flow-novice/dist/src/monitoring/apm/datadog-collector.js +363 -0
  168. package/.claude-flow-novice/dist/src/monitoring/apm/datadog-collector.js.map +1 -0
  169. package/.claude-flow-novice/dist/src/monitoring/apm/index.js +97 -0
  170. package/.claude-flow-novice/dist/src/monitoring/apm/index.js.map +1 -0
  171. package/.claude-flow-novice/dist/src/monitoring/apm/newrelic-collector.js +384 -0
  172. package/.claude-flow-novice/dist/src/monitoring/apm/newrelic-collector.js.map +1 -0
  173. package/.claude-flow-novice/dist/src/monitoring/apm/performance-optimizer.js +612 -0
  174. package/.claude-flow-novice/dist/src/monitoring/apm/performance-optimizer.js.map +1 -0
  175. package/.claude-flow-novice/dist/src/monitoring/metrics-collector.js +282 -0
  176. package/.claude-flow-novice/dist/src/monitoring/metrics-collector.js.map +1 -0
  177. package/.claude-flow-novice/dist/src/observability/metrics-counter.js +268 -0
  178. package/.claude-flow-novice/dist/src/observability/metrics-counter.js.map +1 -0
  179. package/.claude-flow-novice/dist/src/observability/metrics-storage.js +265 -0
  180. package/.claude-flow-novice/dist/src/observability/metrics-storage.js.map +1 -0
  181. package/.claude-flow-novice/dist/src/observability/telemetry.js +26 -0
  182. package/.claude-flow-novice/dist/src/observability/telemetry.js.map +1 -1
  183. package/.claude-flow-novice/dist/src/providers/tiered-router.js +64 -10
  184. package/.claude-flow-novice/dist/src/providers/tiered-router.js.map +1 -1
  185. package/.claude-flow-novice/dist/src/providers/zai-provider.js +196 -97
  186. package/.claude-flow-novice/dist/src/providers/zai-provider.js.map +1 -1
  187. package/.claude-flow-novice/dist/src/slash-commands/cfn-claude-sync.js +533 -0
  188. package/.claude-flow-novice/dist/src/slash-commands/index.js +5 -0
  189. package/.claude-flow-novice/dist/src/slash-commands/metrics-summary-class.js +74 -0
  190. package/.claude-flow-novice/dist/src/slash-commands/metrics-summary.js +335 -0
  191. package/.claude-flow-novice/dist/src/slash-commands/register-all-commands.js +12 -0
  192. package/.claude-flow-novice/dist/src/verification/checkpoint-compression-demo.js +96 -0
  193. package/.claude-flow-novice/dist/src/verification/checkpoint-compression-demo.js.map +1 -0
  194. package/.claude-flow-novice/dist/src/verification/checkpoint-compression.js +406 -0
  195. package/.claude-flow-novice/dist/src/verification/checkpoint-compression.js.map +1 -0
  196. package/.claude-flow-novice/dist/src/verification/checkpoint-manager.js +35 -5
  197. package/.claude-flow-novice/dist/src/verification/checkpoint-manager.js.map +1 -1
  198. package/.claude-flow-novice/dist/src/web/api/apm-routes.js +355 -0
  199. package/.claude-flow-novice/dist/src/web/api/apm-routes.js.map +1 -0
  200. package/.claude-flow-novice/dist/src/web/api/config/api-config.js +186 -0
  201. package/.claude-flow-novice/dist/src/web/api/config/api-config.js.map +1 -0
  202. package/.claude-flow-novice/dist/src/web/api/middleware/auth.js +205 -0
  203. package/.claude-flow-novice/dist/src/web/api/middleware/auth.js.map +1 -0
  204. package/.claude-flow-novice/dist/src/web/api/middleware/cache.js +262 -0
  205. package/.claude-flow-novice/dist/src/web/api/middleware/cache.js.map +1 -0
  206. package/.claude-flow-novice/dist/src/web/api/middleware/error-handler.js +250 -0
  207. package/.claude-flow-novice/dist/src/web/api/middleware/error-handler.js.map +1 -0
  208. package/.claude-flow-novice/dist/src/web/api/middleware/request-logger.js +217 -0
  209. package/.claude-flow-novice/dist/src/web/api/middleware/request-logger.js.map +1 -0
  210. package/.claude-flow-novice/dist/src/web/api/middleware/validation.js +325 -0
  211. package/.claude-flow-novice/dist/src/web/api/middleware/validation.js.map +1 -0
  212. package/.claude-flow-novice/dist/src/web/api/routes/events.js +465 -0
  213. package/.claude-flow-novice/dist/src/web/api/routes/events.js.map +1 -0
  214. package/.claude-flow-novice/dist/src/web/api/routes/hierarchy.js +302 -0
  215. package/.claude-flow-novice/dist/src/web/api/routes/hierarchy.js.map +1 -0
  216. package/.claude-flow-novice/dist/src/web/api/routes/index.js +14 -0
  217. package/.claude-flow-novice/dist/src/web/api/routes/index.js.map +1 -0
  218. package/.claude-flow-novice/dist/src/web/api/routes/metrics.js +561 -0
  219. package/.claude-flow-novice/dist/src/web/api/routes/metrics.js.map +1 -0
  220. package/.claude-flow-novice/dist/src/web/api/routes/status.js +450 -0
  221. package/.claude-flow-novice/dist/src/web/api/routes/status.js.map +1 -0
  222. package/.claude-flow-novice/dist/src/web/api/server.js +451 -0
  223. package/.claude-flow-novice/dist/src/web/api/server.js.map +1 -0
  224. package/.claude-flow-novice/dist/src/web/dashboard/hooks/useWebSocket.js +385 -0
  225. package/.claude-flow-novice/dist/src/web/dashboard/hooks/useWebSocket.js.map +1 -0
  226. package/.claude-flow-novice/dist/src/web/dashboard/index.js +87 -0
  227. package/.claude-flow-novice/dist/src/web/dashboard/index.js.map +1 -0
  228. package/.claude-flow-novice/dist/src/web/dashboard/types.js +6 -0
  229. package/.claude-flow-novice/dist/src/web/dashboard/types.js.map +1 -0
  230. package/.claude-flow-novice/dist/src/web/frontend/src/utils/security.js +425 -0
  231. package/.claude-flow-novice/dist/src/web/frontend/src/utils/security.js.map +1 -0
  232. package/.claude-flow-novice/dist/src/web/security/security-middleware.js +379 -0
  233. package/.claude-flow-novice/dist/src/web/security/security-middleware.js.map +1 -0
  234. package/.claude-flow-novice/dist/src/web/websocket/apm-websocket-handler.js +441 -0
  235. package/.claude-flow-novice/dist/src/web/websocket/apm-websocket-handler.js.map +1 -0
  236. package/.claude-flow-novice/dist/src/web/websocket/websocket-manager.js +255 -1
  237. package/.claude-flow-novice/dist/src/web/websocket/websocket-manager.js.map +1 -1
  238. package/.claude-flow-novice/metrics.db +0 -0
  239. package/.claude-flow-novice/metrics.db-shm +0 -0
  240. package/.claude-flow-novice/metrics.db-wal +0 -0
  241. package/AGENT_PERFORMANCE_GUIDELINES.md +88 -0
  242. package/CLAUDE.md +60 -3
  243. package/MEMORY_LEAK_ROOT_CAUSE.md +149 -0
  244. package/README.md +27 -0
  245. package/config/hooks/post-edit-pipeline.js +36 -2
  246. package/examples/metrics-counter-demo.ts +106 -0
  247. package/examples/persistent-metrics-demo.ts +83 -0
  248. package/examples/phase-5-multi-level-control.ts +282 -0
  249. package/examples/session-pool-optimizer-example.ts +311 -0
  250. package/package.json +18 -4
  251. package/scripts/check-routing-stats.cjs +122 -0
  252. package/scripts/monitor-loop.sh +65 -0
  253. package/scripts/monitor-memory.sh +47 -0
  254. package/scripts/monitor.py +43 -0
  255. package/scripts/pre-publish-validation.cjs +212 -0
  256. package/scripts/test-provider-routing.cjs +228 -0
  257. package/scripts/test-routing-telemetry.cjs +147 -0
  258. package/scripts/test-zai-10k.cjs +81 -0
  259. package/scripts/test-zai-api.cjs +191 -0
  260. package/scripts/test-zai-diagnostic.cjs +151 -0
  261. package/scripts/test-zai-final.cjs +128 -0
  262. package/scripts/test-zai-with-env.cjs +85 -0
  263. package/scripts/validate-coordination-cli.js +69 -0
  264. package/scripts/validate-coordination-toggle-integration.cjs +501 -0
  265. package/src/cli/simple-commands/init/templates/CLAUDE.md +29 -0
  266. package/src/observability/metrics-counter.ts +347 -0
  267. package/src/observability/metrics-storage.ts +356 -0
  268. package/src/observability/telemetry.ts +658 -0
  269. package/src/slash-commands/cfn-claude-sync.js +533 -0
  270. package/src/slash-commands/index.js +5 -0
  271. package/src/slash-commands/metrics-summary-class.js +74 -0
  272. package/src/slash-commands/metrics-summary.js +335 -0
  273. package/src/slash-commands/register-all-commands.js +12 -0
@@ -10,7 +10,9 @@
10
10
  *
11
11
  * @module coordination/v2/core/message-broker
12
12
  */ import { EventEmitter } from 'events';
13
+ import { RateLimiter } from 'limiter';
13
14
  import { MessagePriority, MessageUtils, DeliverySemantics } from './message.js';
15
+ import { PayloadValidator } from '../security/payload-validator.js';
14
16
  /**
15
17
  * Message broker error.
16
18
  */ export class MessageBrokerError extends Error {
@@ -30,6 +32,9 @@ import { MessagePriority, MessageUtils, DeliverySemantics } from './message.js';
30
32
  dequeue() {
31
33
  return this.items.shift();
32
34
  }
35
+ peek() {
36
+ return this.items[0];
37
+ }
33
38
  get length() {
34
39
  return this.items.length;
35
40
  }
@@ -87,6 +92,17 @@ import { MessagePriority, MessageUtils, DeliverySemantics } from './message.js';
87
92
  stats;
88
93
  processing;
89
94
  subscriptionCounter;
95
+ // SEC-DOS-001: Per-sender queue tracking and dead letter queue
96
+ senderQueueSizes;
97
+ deadLetterQueue;
98
+ // SEC-DOS-002: Rate limiting
99
+ rateLimiters;
100
+ rateLimiterCleanupInterval;
101
+ // SEC-INJ-001: Payload validation
102
+ payloadValidator;
103
+ // SEC-MEM-001: Subscription tracking and limits
104
+ agentSubscriptions;
105
+ subscriptionCleanupInterval;
90
106
  /**
91
107
  * Creates a new message broker instance.
92
108
  *
@@ -99,13 +115,35 @@ import { MessagePriority, MessageUtils, DeliverySemantics } from './message.js';
99
115
  this.messageQueue = new PriorityQueue();
100
116
  this.subscriptionCounter = 0;
101
117
  this.processing = false;
118
+ // SEC-DOS-001: Initialize per-sender queue tracking
119
+ this.senderQueueSizes = new Map();
120
+ this.deadLetterQueue = new PriorityQueue();
121
+ // SEC-DOS-002: Initialize rate limiters
122
+ this.rateLimiters = new Map();
123
+ // SEC-MEM-001: Initialize subscription tracking
124
+ this.agentSubscriptions = new Map();
102
125
  this.config = {
103
126
  maxQueueSize: config?.maxQueueSize ?? 10000,
127
+ maxQueueSizePerSender: config?.maxQueueSizePerSender ?? 100,
128
+ enableDeadLetterQueue: config?.enableDeadLetterQueue ?? true,
129
+ priorityEvictionThreshold: config?.priorityEvictionThreshold ?? 0.9,
104
130
  defaultRequestTimeout: config?.defaultRequestTimeout ?? 30000,
105
131
  enableStats: config?.enableStats ?? true,
106
132
  maxConcurrency: config?.maxConcurrency ?? 100,
107
- authorizationProvider: config?.authorizationProvider
133
+ maxSubscriptions: config?.maxSubscriptions ?? 10000,
134
+ maxSubscriptionsPerAgent: config?.maxSubscriptionsPerAgent ?? 100,
135
+ subscriptionTTL: config?.subscriptionTTL ?? 3600000,
136
+ cleanupIntervalMs: config?.cleanupIntervalMs ?? 60000,
137
+ authorizationProvider: config?.authorizationProvider,
138
+ rateLimit: config?.rateLimit ? {
139
+ maxMessagesPerSecond: config.rateLimit.maxMessagesPerSecond ?? 100,
140
+ maxBurstSize: config.rateLimit.maxBurstSize ?? 10,
141
+ strategy: config.rateLimit.strategy ?? 'token-bucket'
142
+ } : undefined,
143
+ payloadValidation: config?.payloadValidation
108
144
  };
145
+ // SEC-INJ-001: Initialize payload validator
146
+ this.payloadValidator = new PayloadValidator(this.config.payloadValidation);
109
147
  this.stats = {
110
148
  totalPublished: 0,
111
149
  totalDelivered: 0,
@@ -115,6 +153,12 @@ import { MessagePriority, MessageUtils, DeliverySemantics } from './message.js';
115
153
  messagesByPriority: {},
116
154
  avgDeliveryTime: 0
117
155
  };
156
+ // SEC-DOS-002: Start rate limiter cleanup if rate limiting is enabled
157
+ if (this.config.rateLimit) {
158
+ this.startRateLimiterCleanup();
159
+ }
160
+ // SEC-MEM-001: Start subscription cleanup for TTL expiration
161
+ this.startSubscriptionCleanup();
118
162
  }
119
163
  // ============================================
120
164
  // Pub/Sub Pattern
@@ -145,6 +189,16 @@ import { MessagePriority, MessageUtils, DeliverySemantics } from './message.js';
145
189
  if (typeof config.handler !== 'function') {
146
190
  throw new MessageBrokerError('Subscription handler must be a function');
147
191
  }
192
+ // SEC-MEM-001: Check global subscription limit
193
+ if (this.stats.totalSubscriptions >= this.config.maxSubscriptions) {
194
+ throw new MessageBrokerError(`Maximum subscriptions reached (max: ${this.config.maxSubscriptions})`);
195
+ }
196
+ // SEC-MEM-001: Check per-agent subscription limit
197
+ const subscriberId = config.subscriberId || 'anonymous';
198
+ const agentSubs = this.agentSubscriptions.get(subscriberId) || new Set();
199
+ if (agentSubs.size >= this.config.maxSubscriptionsPerAgent) {
200
+ throw new MessageBrokerError(`Subscriber ${subscriberId} exceeded subscription limit (max: ${this.config.maxSubscriptionsPerAgent})`);
201
+ }
148
202
  // SEC-012: Check subscription authorization
149
203
  if (this.config.authorizationProvider && config.subscriberId) {
150
204
  const authorized = await this.config.authorizationProvider.canSubscribe(config.subscriberId, config.topic);
@@ -153,13 +207,16 @@ import { MessagePriority, MessageUtils, DeliverySemantics } from './message.js';
153
207
  }
154
208
  }
155
209
  const subscriptionId = `sub-${++this.subscriptionCounter}-${Date.now()}`;
210
+ // SEC-MEM-001: Create subscription with TTL expiration
156
211
  const internalSub = {
157
212
  id: subscriptionId,
158
213
  topic: config.topic,
159
214
  handler: config.handler,
160
215
  priority: config.priority ?? 0,
161
216
  createdAt: Date.now(),
162
- filter: config.filter
217
+ filter: config.filter,
218
+ expiresAt: Date.now() + this.config.subscriptionTTL,
219
+ subscriberId
163
220
  };
164
221
  // Add to subscriptions map
165
222
  if (!this.subscriptions.has(config.topic)) {
@@ -169,6 +226,9 @@ import { MessagePriority, MessageUtils, DeliverySemantics } from './message.js';
169
226
  topicSubs.push(internalSub);
170
227
  // Sort by priority (higher priority first)
171
228
  topicSubs.sort((a, b)=>b.priority - a.priority);
229
+ // SEC-MEM-001: Track subscription by agent
230
+ agentSubs.add(subscriptionId);
231
+ this.agentSubscriptions.set(subscriberId, agentSubs);
172
232
  this.stats.totalSubscriptions++;
173
233
  return {
174
234
  id: subscriptionId,
@@ -187,8 +247,19 @@ import { MessagePriority, MessageUtils, DeliverySemantics } from './message.js';
187
247
  const subs = this.subscriptions.get(topic);
188
248
  const index = subs.findIndex((sub)=>sub.id === subscriptionId);
189
249
  if (index !== -1) {
250
+ const sub = subs[index];
190
251
  subs.splice(index, 1);
191
252
  this.stats.totalSubscriptions--;
253
+ // SEC-MEM-001: Clean up agent subscription tracking
254
+ if (sub.subscriberId) {
255
+ const agentSubs = this.agentSubscriptions.get(sub.subscriberId);
256
+ if (agentSubs) {
257
+ agentSubs.delete(subscriptionId);
258
+ if (agentSubs.size === 0) {
259
+ this.agentSubscriptions.delete(sub.subscriberId);
260
+ }
261
+ }
262
+ }
192
263
  // Clean up empty topic entries
193
264
  if (subs.length === 0) {
194
265
  this.subscriptions.delete(topic);
@@ -217,13 +288,70 @@ import { MessagePriority, MessageUtils, DeliverySemantics } from './message.js';
217
288
  MessageUtils.validateConfig(config);
218
289
  // SEC-007: Validate topic name to prevent injection
219
290
  this.validateTopicName(config.topic);
291
+ // SEC-INJ-001: Validate and sanitize payload BEFORE processing
292
+ const validationResult = this.payloadValidator.validate(config.payload);
293
+ if (!validationResult.valid) {
294
+ this.emitter.emit('validation:failed', {
295
+ errors: validationResult.errors,
296
+ senderId: config.senderId,
297
+ topic: config.topic
298
+ });
299
+ throw new MessageBrokerError(`Payload validation failed: ${validationResult.errors.join(', ')}`);
300
+ }
301
+ // SEC-INJ-001: Sanitize payload to prevent injection attacks
302
+ const sanitizedPayload = this.payloadValidator.sanitize(config.payload);
303
+ const senderId = config.senderId || 'anonymous';
304
+ // SEC-DOS-002: Rate limiting - Check FIRST before any processing
305
+ if (this.config.rateLimit) {
306
+ const allowed = await this.checkRateLimit(senderId);
307
+ if (!allowed) {
308
+ this.emitter.emit('rate-limit:exceeded', {
309
+ senderId,
310
+ topic: config.topic
311
+ });
312
+ throw new MessageBrokerError(`Rate limit exceeded for sender ${senderId}`);
313
+ }
314
+ }
315
+ // SEC-DOS-001: Per-sender queue limit - Check BEFORE global limit
316
+ // CRITICAL: Read and increment atomically to prevent race condition
317
+ const currentSenderSize = this.senderQueueSizes.get(senderId) || 0;
318
+ // Debug logging for per-sender queue tracking
319
+ if (process.env.DEBUG_MESSAGE_BROKER) {
320
+ console.log(`[MessageBroker PUBLISH] Sender ${senderId}: ${currentSenderSize} messages (limit: ${this.config.maxQueueSizePerSender}), queue processing: ${this.processing}`);
321
+ }
322
+ if (currentSenderSize >= this.config.maxQueueSizePerSender) {
323
+ throw new MessageBrokerError(`Sender ${senderId} exceeded queue limit (${currentSenderSize}/${this.config.maxQueueSizePerSender})`);
324
+ }
325
+ // SEC-DOS-001: Increment IMMEDIATELY after check to reserve slot (before async processing)
326
+ this.senderQueueSizes.set(senderId, currentSenderSize + 1);
327
+ if (process.env.DEBUG_MESSAGE_BROKER) {
328
+ console.log(`[MessageBroker PUBLISH] After increment: ${this.senderQueueSizes.get(senderId)}`);
329
+ }
330
+ // SEC-DOS-001: Global queue limit with priority eviction
220
331
  if (this.messageQueue.length >= this.config.maxQueueSize) {
221
- throw new MessageBrokerError(`Message queue full (max: ${this.config.maxQueueSize})`);
332
+ // If queue is at priority eviction threshold, evict low-priority messages
333
+ const evictionThreshold = Math.floor(this.config.maxQueueSize * this.config.priorityEvictionThreshold);
334
+ if (this.messageQueue.length >= evictionThreshold) {
335
+ const messagePriority = MessageUtils.normalizePriority(config.priority);
336
+ const evicted = this.evictLowPriorityMessages(messagePriority);
337
+ if (evicted.length === 0) {
338
+ throw new MessageBrokerError(`Message queue full (max: ${this.config.maxQueueSize}, no evictable messages)`);
339
+ }
340
+ this.emitter.emit('queue:high-pressure', {
341
+ queueSize: this.messageQueue.length,
342
+ evicted: evicted.length,
343
+ evictedMessages: evicted,
344
+ threshold: evictionThreshold
345
+ });
346
+ } else {
347
+ throw new MessageBrokerError(`Message queue full (max: ${this.config.maxQueueSize})`);
348
+ }
222
349
  }
350
+ // SEC-INJ-001: Use sanitized payload in message
223
351
  const message = {
224
352
  id: MessageUtils.generateMessageId(),
225
353
  topic: config.topic,
226
- payload: config.payload,
354
+ payload: sanitizedPayload,
227
355
  priority: MessageUtils.normalizePriority(config.priority),
228
356
  timestamp: Date.now(),
229
357
  replyTo: config.replyTo,
@@ -234,6 +362,7 @@ import { MessagePriority, MessageUtils, DeliverySemantics } from './message.js';
234
362
  metadata: config.metadata
235
363
  };
236
364
  this.messageQueue.enqueue(message);
365
+ // SEC-DOS-001: Sender queue size already incremented at line 517 (atomic check-and-increment)
237
366
  if (this.config.enableStats) {
238
367
  this.stats.totalPublished++;
239
368
  this.stats.messagesByTopic[message.topic] = (this.stats.messagesByTopic[message.topic] || 0) + 1;
@@ -361,19 +490,60 @@ import { MessagePriority, MessageUtils, DeliverySemantics } from './message.js';
361
490
  this.processing = true;
362
491
  try {
363
492
  while(this.messageQueue.length > 0){
364
- const message = this.messageQueue.dequeue();
493
+ // SEC-DOS-001-RACE: Peek at message first to check for matching handlers
494
+ const message = this.messageQueue.peek();
365
495
  if (!message) break;
496
+ // Check if there are any matching handlers BEFORE dequeuing
497
+ const hasHandlers = this.hasMatchingHandlers(message);
498
+ // SEC-DOS-001-RACE: Only dequeue if handlers exist to prevent race condition
499
+ if (!hasHandlers) {
500
+ break;
501
+ }
502
+ // Now dequeue the message
503
+ this.messageQueue.dequeue();
504
+ // SEC-DOS-001: Deliver first, then decrement (counter represents "in-flight" messages)
366
505
  await this.deliverMessage(message);
506
+ // SEC-DOS-001: Decrement AFTER successful delivery (message no longer in-flight)
507
+ const senderId = message.senderId || 'anonymous';
508
+ const senderSize = this.senderQueueSizes.get(senderId) || 0;
509
+ if (senderSize > 0) {
510
+ this.senderQueueSizes.set(senderId, senderSize - 1);
511
+ if (process.env.DEBUG_MESSAGE_BROKER) {
512
+ console.log(`[MessageBroker DELIVER] Decremented ${senderId}: ${senderSize} -> ${this.senderQueueSizes.get(senderId)}`);
513
+ }
514
+ }
367
515
  }
368
516
  } finally{
369
517
  this.processing = false;
370
518
  }
371
519
  }
372
520
  /**
521
+ * Checks if there are any matching handlers for a message (without delivering).
522
+ * Used to prevent dequeuing messages when no subscribers exist.
523
+ */ hasMatchingHandlers(message) {
524
+ // Check for pending request/reply handlers
525
+ if (message.correlationId && this.pendingRequests.has(message.correlationId)) {
526
+ return true;
527
+ }
528
+ // Check for topic subscribers
529
+ for (const topicPattern of Array.from(this.subscriptions.keys())){
530
+ if (MessageUtils.matchesTopic(message.topic, topicPattern)) {
531
+ const subs = this.subscriptions.get(topicPattern);
532
+ if (subs.length > 0) {
533
+ return true;
534
+ }
535
+ }
536
+ }
537
+ return false;
538
+ }
539
+ /**
373
540
  * Delivers a message to all matching subscribers.
541
+ * Returns true if message was delivered to any handler, false otherwise.
374
542
  */ async deliverMessage(message) {
375
543
  const startTime = Date.now();
376
544
  const matchingHandlers = [];
545
+ // SEC-MEM-001: Clean up expired subscriptions before delivery
546
+ this.cleanupExpiredSubscriptions();
377
547
  // Find matching subscriptions
378
548
  for (const topicPattern of Array.from(this.subscriptions.keys())){
379
549
  const subs = this.subscriptions.get(topicPattern);
@@ -425,11 +595,14 @@ import { MessagePriority, MessageUtils, DeliverySemantics } from './message.js';
425
595
  });
426
596
  }
427
597
  }
598
+ // SEC-DOS-001: Sender queue size already decremented in processQueue() after dequeue (line 729-734)
428
599
  // Update delivery time statistics
429
- if (this.config.enableStats) {
600
+ if (this.config.enableStats && matchingHandlers.length > 0) {
430
601
  const deliveryTime = Date.now() - startTime;
431
602
  this.stats.avgDeliveryTime = (this.stats.avgDeliveryTime * (this.stats.totalDelivered - 1) + deliveryTime) / this.stats.totalDelivered;
432
603
  }
604
+ // Return true if message was delivered to any handler
605
+ return matchingHandlers.length > 0;
433
606
  }
434
607
  // ============================================
435
608
  // Statistics and Monitoring
@@ -518,6 +691,179 @@ import { MessagePriority, MessageUtils, DeliverySemantics } from './message.js';
518
691
  }
519
692
  }
520
693
  // ============================================
694
+ // SEC-DOS-001 & SEC-DOS-002: DoS Protection Methods
695
+ // ============================================
696
+ /**
697
+ * SEC-DOS-002: Checks rate limit for a sender using token bucket algorithm.
698
+ *
699
+ * @param senderId - Sender identifier
700
+ * @returns True if request is allowed, false if rate limit exceeded
701
+ */ async checkRateLimit(senderId) {
702
+ if (!this.config.rateLimit) {
703
+ return true; // Rate limiting disabled
704
+ }
705
+ let limiter = this.rateLimiters.get(senderId);
706
+ if (!limiter) {
707
+ // Create new rate limiter for this sender
708
+ limiter = new RateLimiter({
709
+ tokensPerInterval: this.config.rateLimit.maxMessagesPerSecond,
710
+ interval: 'second',
711
+ fireImmediately: true
712
+ });
713
+ this.rateLimiters.set(senderId, limiter);
714
+ }
715
+ try {
716
+ const remainingTokens = await limiter.removeTokens(1);
717
+ return remainingTokens >= 0;
718
+ } catch (error) {
719
+ // Rate limit exceeded
720
+ return false;
721
+ }
722
+ }
723
+ /**
724
+ * SEC-DOS-002: Periodically cleanup idle rate limiters to prevent memory leaks.
725
+ */ startRateLimiterCleanup() {
726
+ this.rateLimiterCleanupInterval = setInterval(()=>{
727
+ // Remove rate limiters that haven't been used recently
728
+ // In production, you would track last access time
729
+ // For now, we clear limiters periodically to prevent unbounded growth
730
+ if (this.rateLimiters.size > 1000) {
731
+ // Keep only the most recent 500 limiters (simple cleanup strategy)
732
+ const entries = Array.from(this.rateLimiters.entries());
733
+ const toKeep = entries.slice(-500);
734
+ this.rateLimiters.clear();
735
+ toKeep.forEach(([key, value])=>this.rateLimiters.set(key, value));
736
+ }
737
+ }, 60000); // Cleanup every 60 seconds
738
+ }
739
+ /**
740
+ * SEC-DOS-001: Evicts low-priority messages when queue is full.
741
+ * Only evicts enough messages to make room for 1 new message.
742
+ *
743
+ * @param incomingPriority - Priority of the incoming message
744
+ * @returns Array of evicted messages
745
+ */ evictLowPriorityMessages(incomingPriority) {
746
+ const evicted = [];
747
+ // SEC-DOS-001-RACE: Only evict 1 message to make room for the incoming message
748
+ // Don't evict ALL lower-priority messages
749
+ const items = this.messageQueue.items;
750
+ if (!items || items.length === 0) {
751
+ return evicted;
752
+ }
753
+ // Find lowest priority message
754
+ let lowestIndex = 0;
755
+ let lowestPriority = items[0].priority;
756
+ for(let i = 1; i < items.length; i++){
757
+ if (items[i].priority < lowestPriority) {
758
+ lowestPriority = items[i].priority;
759
+ lowestIndex = i;
760
+ }
761
+ }
762
+ // Only evict if priority is lower than incoming
763
+ if (lowestPriority < incomingPriority) {
764
+ const candidate = items[lowestIndex];
765
+ items.splice(lowestIndex, 1);
766
+ // Move to dead letter queue if enabled
767
+ if (this.config.enableDeadLetterQueue) {
768
+ this.deadLetterQueue.enqueue(candidate);
769
+ }
770
+ // Decrement sender queue size
771
+ const senderId = candidate.senderId || 'anonymous';
772
+ const senderSize = this.senderQueueSizes.get(senderId) || 0;
773
+ if (senderSize > 0) {
774
+ this.senderQueueSizes.set(senderId, senderSize - 1);
775
+ }
776
+ evicted.push(candidate);
777
+ }
778
+ return evicted;
779
+ }
780
+ /**
781
+ * Gets the current size of the dead letter queue.
782
+ *
783
+ * @returns Number of messages in dead letter queue
784
+ */ getDeadLetterQueueSize() {
785
+ return this.deadLetterQueue.length;
786
+ }
787
+ /**
788
+ * SEC-DOS-002: Returns the number of active rate limiters.
789
+ */ getRateLimiterCount() {
790
+ return this.rateLimiters.size;
791
+ }
792
+ /**
793
+ * Retrieves messages from the dead letter queue.
794
+ *
795
+ * @param count - Number of messages to retrieve (default: all)
796
+ * @returns Array of dead letter messages
797
+ */ getDeadLetterMessages(count) {
798
+ const items = this.deadLetterQueue.items;
799
+ if (!items) return [];
800
+ if (count === undefined) {
801
+ return [
802
+ ...items
803
+ ];
804
+ }
805
+ return items.slice(0, count);
806
+ }
807
+ /**
808
+ * Clears the dead letter queue.
809
+ */ clearDeadLetterQueue() {
810
+ this.deadLetterQueue.clear();
811
+ }
812
+ // ============================================
813
+ // SEC-MEM-001: Subscription Cleanup
814
+ // ============================================
815
+ /**
816
+ * Starts periodic subscription cleanup to expire old subscriptions (SEC-MEM-001).
817
+ * Runs periodically to remove expired subscriptions based on TTL.
818
+ */ startSubscriptionCleanup() {
819
+ const cleanupInterval = this.config.cleanupIntervalMs ?? 60000;
820
+ this.subscriptionCleanupInterval = setInterval(()=>{
821
+ this.cleanupExpiredSubscriptions();
822
+ }, cleanupInterval);
823
+ }
824
+ /**
825
+ * Synchronously removes expired subscriptions (SEC-MEM-001).
826
+ * Called by background timer and immediately before publishing.
827
+ *
828
+ * @returns Number of subscriptions removed
829
+ */ cleanupExpiredSubscriptions() {
830
+ const now = Date.now();
831
+ let expiredCount = 0;
832
+ for (const topic of Array.from(this.subscriptions.keys())){
833
+ const subs = this.subscriptions.get(topic);
834
+ const validSubs = subs.filter((sub)=>{
835
+ if (sub.expiresAt && now >= sub.expiresAt) {
836
+ // Expired subscription
837
+ expiredCount++;
838
+ // Clean up agent tracking
839
+ if (sub.subscriberId) {
840
+ const agentSubs = this.agentSubscriptions.get(sub.subscriberId);
841
+ if (agentSubs) {
842
+ agentSubs.delete(sub.id);
843
+ if (agentSubs.size === 0) {
844
+ this.agentSubscriptions.delete(sub.subscriberId);
845
+ }
846
+ }
847
+ }
848
+ this.stats.totalSubscriptions--;
849
+ return false; // Remove expired subscription
850
+ }
851
+ return true; // Keep valid subscription
852
+ });
853
+ if (validSubs.length === 0) {
854
+ this.subscriptions.delete(topic);
855
+ } else if (validSubs.length !== subs.length) {
856
+ this.subscriptions.set(topic, validSubs);
857
+ }
858
+ }
859
+ if (expiredCount > 0) {
860
+ this.emitter.emit('subscriptions:expired', {
861
+ count: expiredCount
862
+ });
863
+ }
864
+ return expiredCount;
865
+ }
866
+ // ============================================
521
867
  // Lifecycle Management
522
868
  // ============================================
523
869
  /**
@@ -532,6 +878,19 @@ import { MessagePriority, MessageUtils, DeliverySemantics } from './message.js';
532
878
  pending.reject(new MessageBrokerError('Broker cleared'));
533
879
  }
534
880
  this.pendingRequests.clear();
881
+ // SEC-MEM-001: Clear subscription tracking
882
+ this.agentSubscriptions.clear();
883
+ // SEC-DOS-002: Clear rate limiters
884
+ this.rateLimiters.clear();
885
+ if (this.rateLimiterCleanupInterval) {
886
+ clearInterval(this.rateLimiterCleanupInterval);
887
+ this.rateLimiterCleanupInterval = undefined;
888
+ }
889
+ // SEC-MEM-001: Clear subscription cleanup interval
890
+ if (this.subscriptionCleanupInterval) {
891
+ clearInterval(this.subscriptionCleanupInterval);
892
+ this.subscriptionCleanupInterval = undefined;
893
+ }
535
894
  this.stats.totalSubscriptions = 0;
536
895
  this.emitter.removeAllListeners();
537
896
  }
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../../../src/coordination/v2/core/message-broker.ts"],"names":["EventEmitter","MessagePriority","MessageUtils","DeliverySemantics","MessageBrokerError","Error","message","name","PriorityQueue","items","enqueue","item","push","sort","a","b","priority","dequeue","shift","length","size","clear","MessageBroker","emitter","subscriptions","pendingRequests","messageQueue","config","stats","processing","subscriptionCounter","setMaxListeners","Map","maxQueueSize","defaultRequestTimeout","enableStats","maxConcurrency","authorizationProvider","totalPublished","totalDelivered","totalFailed","totalSubscriptions","messagesByTopic","messagesByPriority","avgDeliveryTime","subscribe","topic","validateTopicName","handler","subscriberId","authorized","canSubscribe","subscriptionId","Date","now","internalSub","id","createdAt","filter","has","set","topicSubs","get","unsubscribe","Array","from","keys","subs","index","findIndex","sub","splice","delete","publish","validateConfig","generateMessageId","payload","normalizePriority","timestamp","replyTo","correlationId","senderId","recipientId","deliverySemantics","AT_LEAST_ONCE","metadata","processQueue","catch","error","console","broadcast","request","options","generateCorrelationId","timeout","NORMAL","replyTopic","Promise","resolve","reject","timeoutId","setTimeout","expectedSender","resolved","clearTimeout","reply","success","createReply","deliverMessage","startTime","matchingHandlers","topicPattern","matchesTopic","pendingRequest","warn","emit","subscription","deliveryTime","getStats","resetStats","getSubscriptions","result","values","getQueueSize","getPendingRequestCount","includes","validTopicPattern","test","pending","removeAllListeners","shutdown","onError","on"],"mappings":"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"}
1
+ {"version":3,"sources":["../../../../../../src/coordination/v2/core/message-broker.ts"],"names":["EventEmitter","RateLimiter","MessagePriority","MessageUtils","DeliverySemantics","PayloadValidator","MessageBrokerError","Error","message","name","PriorityQueue","items","enqueue","item","push","sort","a","b","priority","dequeue","shift","peek","length","size","clear","MessageBroker","emitter","subscriptions","pendingRequests","messageQueue","config","stats","processing","subscriptionCounter","senderQueueSizes","deadLetterQueue","rateLimiters","rateLimiterCleanupInterval","payloadValidator","agentSubscriptions","subscriptionCleanupInterval","setMaxListeners","Map","maxQueueSize","maxQueueSizePerSender","enableDeadLetterQueue","priorityEvictionThreshold","defaultRequestTimeout","enableStats","maxConcurrency","maxSubscriptions","maxSubscriptionsPerAgent","subscriptionTTL","cleanupIntervalMs","authorizationProvider","rateLimit","maxMessagesPerSecond","maxBurstSize","strategy","undefined","payloadValidation","totalPublished","totalDelivered","totalFailed","totalSubscriptions","messagesByTopic","messagesByPriority","avgDeliveryTime","startRateLimiterCleanup","startSubscriptionCleanup","subscribe","topic","validateTopicName","handler","subscriberId","agentSubs","get","Set","authorized","canSubscribe","subscriptionId","Date","now","internalSub","id","createdAt","filter","expiresAt","has","set","topicSubs","add","unsubscribe","Array","from","keys","subs","index","findIndex","sub","splice","delete","publish","validateConfig","validationResult","validate","payload","valid","emit","errors","senderId","join","sanitizedPayload","sanitize","allowed","checkRateLimit","currentSenderSize","process","env","DEBUG_MESSAGE_BROKER","console","log","evictionThreshold","Math","floor","messagePriority","normalizePriority","evicted","evictLowPriorityMessages","queueSize","evictedMessages","threshold","generateMessageId","timestamp","replyTo","correlationId","recipientId","deliverySemantics","AT_LEAST_ONCE","metadata","processQueue","catch","error","broadcast","request","options","generateCorrelationId","timeout","NORMAL","replyTopic","Promise","resolve","reject","timeoutId","setTimeout","expectedSender","resolved","clearTimeout","reply","success","createReply","hasHandlers","hasMatchingHandlers","deliverMessage","senderSize","topicPattern","matchesTopic","startTime","matchingHandlers","cleanupExpiredSubscriptions","pendingRequest","warn","subscription","deliveryTime","getStats","resetStats","getSubscriptions","result","values","getQueueSize","getPendingRequestCount","includes","validTopicPattern","test","limiter","tokensPerInterval","interval","fireImmediately","remainingTokens","removeTokens","setInterval","entries","toKeep","slice","forEach","key","value","incomingPriority","lowestIndex","lowestPriority","i","candidate","getDeadLetterQueueSize","getRateLimiterCount","getDeadLetterMessages","count","clearDeadLetterQueue","cleanupInterval","expiredCount","validSubs","pending","clearInterval","removeAllListeners","shutdown","onError","on"],"mappings":"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"}