claude-flow-novice 1.6.1 → 1.6.2

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 (244) 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 +4 -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/claude-client.js +138 -3
  14. package/.claude-flow-novice/dist/src/api/claude-client.js.map +1 -1
  15. package/.claude-flow-novice/dist/src/cfn-loop/phase-orchestrator-example.js +1 -1
  16. package/.claude-flow-novice/dist/src/cfn-loop/scope-control.js +247 -0
  17. package/.claude-flow-novice/dist/src/cfn-loop/scope-control.js.map +1 -0
  18. package/.claude-flow-novice/dist/src/cli/commands/swarm.js +32 -15
  19. package/.claude-flow-novice/dist/src/cli/commands/swarm.js.map +1 -1
  20. package/.claude-flow-novice/dist/src/cli/commands/transparency.js +455 -0
  21. package/.claude-flow-novice/dist/src/cli/commands/transparency.js.map +1 -0
  22. package/.claude-flow-novice/dist/src/cli/simple-commands/init/templates/CLAUDE.md +129 -13
  23. package/.claude-flow-novice/dist/src/components/visualizations/index.js +9 -0
  24. package/.claude-flow-novice/dist/src/components/visualizations/index.js.map +1 -0
  25. package/.claude-flow-novice/dist/src/coordination/adapters/v1-coordinator-adapter.js +462 -0
  26. package/.claude-flow-novice/dist/src/coordination/adapters/v1-coordinator-adapter.js.map +1 -0
  27. package/.claude-flow-novice/dist/src/coordination/config-translator.js +248 -0
  28. package/.claude-flow-novice/dist/src/coordination/config-translator.js.map +1 -0
  29. package/.claude-flow-novice/dist/src/coordination/coordination-toggle.js +287 -0
  30. package/.claude-flow-novice/dist/src/coordination/coordination-toggle.js.map +1 -0
  31. package/.claude-flow-novice/dist/src/coordination/distributed-consensus.js +68 -9
  32. package/.claude-flow-novice/dist/src/coordination/distributed-consensus.js.map +1 -1
  33. package/.claude-flow-novice/dist/src/coordination/feature-flags.js +166 -0
  34. package/.claude-flow-novice/dist/src/coordination/feature-flags.js.map +1 -0
  35. package/.claude-flow-novice/dist/src/coordination/queen-agent.js +18 -4
  36. package/.claude-flow-novice/dist/src/coordination/queen-agent.js.map +1 -1
  37. package/.claude-flow-novice/dist/src/coordination/role-assignment.js +6 -110
  38. package/.claude-flow-novice/dist/src/coordination/role-assignment.js.map +1 -1
  39. package/.claude-flow-novice/dist/src/coordination/v2/cache/artifact-cache-optimizer.js +632 -0
  40. package/.claude-flow-novice/dist/src/coordination/v2/cache/artifact-cache-optimizer.js.map +1 -0
  41. package/.claude-flow-novice/dist/src/coordination/v2/cache/index.js +11 -0
  42. package/.claude-flow-novice/dist/src/coordination/v2/cache/index.js.map +1 -0
  43. package/.claude-flow-novice/dist/src/coordination/v2/checkpoints/checkpoint-compressor.js +318 -0
  44. package/.claude-flow-novice/dist/src/coordination/v2/checkpoints/checkpoint-compressor.js.map +1 -0
  45. package/.claude-flow-novice/dist/src/coordination/v2/coordinators/cascading-shutdown.example.js +364 -0
  46. package/.claude-flow-novice/dist/src/coordination/v2/coordinators/cascading-shutdown.example.js.map +1 -0
  47. package/.claude-flow-novice/dist/src/coordination/v2/coordinators/cascading-shutdown.js +492 -0
  48. package/.claude-flow-novice/dist/src/coordination/v2/coordinators/cascading-shutdown.js.map +1 -0
  49. package/.claude-flow-novice/dist/src/coordination/v2/coordinators/hierarchical-coordinator.js +786 -0
  50. package/.claude-flow-novice/dist/src/coordination/v2/coordinators/hierarchical-coordinator.js.map +1 -0
  51. package/.claude-flow-novice/dist/src/coordination/v2/coordinators/index.js +16 -0
  52. package/.claude-flow-novice/dist/src/coordination/v2/coordinators/index.js.map +1 -0
  53. package/.claude-flow-novice/dist/src/coordination/v2/coordinators/parent-child-manager.js +342 -0
  54. package/.claude-flow-novice/dist/src/coordination/v2/coordinators/parent-child-manager.js.map +1 -0
  55. package/.claude-flow-novice/dist/src/coordination/v2/coordinators/swarm-coordinator-v2.js +601 -0
  56. package/.claude-flow-novice/dist/src/coordination/v2/coordinators/swarm-coordinator-v2.js.map +1 -0
  57. package/.claude-flow-novice/dist/src/coordination/v2/core/help-request-metrics.js +211 -0
  58. package/.claude-flow-novice/dist/src/coordination/v2/core/help-request-metrics.js.map +1 -0
  59. package/.claude-flow-novice/dist/src/coordination/v2/core/index.js +1 -0
  60. package/.claude-flow-novice/dist/src/coordination/v2/core/index.js.map +1 -1
  61. package/.claude-flow-novice/dist/src/coordination/v2/core/message-broker.js +365 -6
  62. package/.claude-flow-novice/dist/src/coordination/v2/core/message-broker.js.map +1 -1
  63. package/.claude-flow-novice/dist/src/coordination/v2/core/resource-manager-safe.js +478 -0
  64. package/.claude-flow-novice/dist/src/coordination/v2/core/resource-manager-safe.js.map +1 -0
  65. package/.claude-flow-novice/dist/src/coordination/v2/core/state-machine-config.js +5 -2
  66. package/.claude-flow-novice/dist/src/coordination/v2/core/state-machine-config.js.map +1 -1
  67. package/.claude-flow-novice/dist/src/coordination/v2/core/state-machine.js +189 -0
  68. package/.claude-flow-novice/dist/src/coordination/v2/core/state-machine.js.map +1 -1
  69. package/.claude-flow-novice/dist/src/coordination/v2/deadlock/deadlock-detector.js +424 -0
  70. package/.claude-flow-novice/dist/src/coordination/v2/deadlock/deadlock-detector.js.map +1 -0
  71. package/.claude-flow-novice/dist/src/coordination/v2/deadlock/index.js +9 -0
  72. package/.claude-flow-novice/dist/src/coordination/v2/deadlock/index.js.map +1 -0
  73. package/.claude-flow-novice/dist/src/coordination/v2/deadlock/resource-manager.js +669 -0
  74. package/.claude-flow-novice/dist/src/coordination/v2/deadlock/resource-manager.js.map +1 -0
  75. package/.claude-flow-novice/dist/src/coordination/v2/dependency/artifact-storage.js +451 -0
  76. package/.claude-flow-novice/dist/src/coordination/v2/dependency/artifact-storage.js.map +1 -0
  77. package/.claude-flow-novice/dist/src/coordination/v2/dependency/cycle-detector.js +271 -0
  78. package/.claude-flow-novice/dist/src/coordination/v2/dependency/cycle-detector.js.map +1 -0
  79. package/.claude-flow-novice/dist/src/coordination/v2/dependency/dependency-graph.js +335 -0
  80. package/.claude-flow-novice/dist/src/coordination/v2/dependency/dependency-graph.js.map +1 -0
  81. package/.claude-flow-novice/dist/src/coordination/v2/dependency/dependency-manager.js +439 -0
  82. package/.claude-flow-novice/dist/src/coordination/v2/dependency/dependency-manager.js.map +1 -0
  83. package/.claude-flow-novice/dist/src/coordination/v2/dependency/dependency-request.js +92 -0
  84. package/.claude-flow-novice/dist/src/coordination/v2/dependency/dependency-request.js.map +1 -0
  85. package/.claude-flow-novice/dist/src/coordination/v2/dependency/index.js +21 -0
  86. package/.claude-flow-novice/dist/src/coordination/v2/dependency/index.js.map +1 -0
  87. package/.claude-flow-novice/dist/src/coordination/v2/dependency/topological-sort.js +223 -0
  88. package/.claude-flow-novice/dist/src/coordination/v2/dependency/topological-sort.js.map +1 -0
  89. package/.claude-flow-novice/dist/src/coordination/v2/help-system/help-coordinator.js +436 -0
  90. package/.claude-flow-novice/dist/src/coordination/v2/help-system/help-coordinator.js.map +1 -0
  91. package/.claude-flow-novice/dist/src/coordination/v2/help-system/help-matcher.js +278 -0
  92. package/.claude-flow-novice/dist/src/coordination/v2/help-system/help-matcher.js.map +1 -0
  93. package/.claude-flow-novice/dist/src/coordination/v2/help-system/help-request-handler.js +317 -0
  94. package/.claude-flow-novice/dist/src/coordination/v2/help-system/help-request-handler.js.map +1 -0
  95. package/.claude-flow-novice/dist/src/coordination/v2/help-system/help-request.js +273 -0
  96. package/.claude-flow-novice/dist/src/coordination/v2/help-system/help-request.js.map +1 -0
  97. package/.claude-flow-novice/dist/src/coordination/v2/help-system/index.js +15 -0
  98. package/.claude-flow-novice/dist/src/coordination/v2/help-system/index.js.map +1 -0
  99. package/.claude-flow-novice/dist/src/coordination/v2/help-system/waiting-agent-pool.js +512 -0
  100. package/.claude-flow-novice/dist/src/coordination/v2/help-system/waiting-agent-pool.js.map +1 -0
  101. package/.claude-flow-novice/dist/src/coordination/v2/index.js +6 -0
  102. package/.claude-flow-novice/dist/src/coordination/v2/index.js.map +1 -1
  103. package/.claude-flow-novice/dist/src/coordination/v2/integration/help-deadlock-integration.js +557 -0
  104. package/.claude-flow-novice/dist/src/coordination/v2/integration/help-deadlock-integration.js.map +1 -0
  105. package/.claude-flow-novice/dist/src/coordination/v2/integration/index.js +14 -0
  106. package/.claude-flow-novice/dist/src/coordination/v2/integration/index.js.map +1 -0
  107. package/.claude-flow-novice/dist/src/coordination/v2/integration/message-bus-completion-integration.example.js +212 -0
  108. package/.claude-flow-novice/dist/src/coordination/v2/integration/message-bus-completion-integration.example.js.map +1 -0
  109. package/.claude-flow-novice/dist/src/coordination/v2/integration/message-bus-completion-integration.js +552 -0
  110. package/.claude-flow-novice/dist/src/coordination/v2/integration/message-bus-completion-integration.js.map +1 -0
  111. package/.claude-flow-novice/dist/src/coordination/v2/memory/dependency-storage.js +367 -0
  112. package/.claude-flow-novice/dist/src/coordination/v2/memory/dependency-storage.js.map +1 -0
  113. package/.claude-flow-novice/dist/src/coordination/v2/memory/index.js +1 -0
  114. package/.claude-flow-novice/dist/src/coordination/v2/memory/index.js.map +1 -1
  115. package/.claude-flow-novice/dist/src/coordination/v2/messaging/channel.js +371 -0
  116. package/.claude-flow-novice/dist/src/coordination/v2/messaging/channel.js.map +1 -0
  117. package/.claude-flow-novice/dist/src/coordination/v2/messaging/channels/dependency-channel.js +355 -0
  118. package/.claude-flow-novice/dist/src/coordination/v2/messaging/channels/dependency-channel.js.map +1 -0
  119. package/.claude-flow-novice/dist/src/coordination/v2/messaging/channels/help-channel.js +424 -0
  120. package/.claude-flow-novice/dist/src/coordination/v2/messaging/channels/help-channel.js.map +1 -0
  121. package/.claude-flow-novice/dist/src/coordination/v2/messaging/channels/index.js +16 -0
  122. package/.claude-flow-novice/dist/src/coordination/v2/messaging/channels/index.js.map +1 -0
  123. package/.claude-flow-novice/dist/src/coordination/v2/messaging/channels/state-channel.js +295 -0
  124. package/.claude-flow-novice/dist/src/coordination/v2/messaging/channels/state-channel.js.map +1 -0
  125. package/.claude-flow-novice/dist/src/coordination/v2/messaging/channels/task-channel.js +411 -0
  126. package/.claude-flow-novice/dist/src/coordination/v2/messaging/channels/task-channel.js.map +1 -0
  127. package/.claude-flow-novice/dist/src/coordination/v2/messaging/index.js +14 -0
  128. package/.claude-flow-novice/dist/src/coordination/v2/messaging/index.js.map +1 -0
  129. package/.claude-flow-novice/dist/src/coordination/v2/messaging/message-bus.js +387 -0
  130. package/.claude-flow-novice/dist/src/coordination/v2/messaging/message-bus.js.map +1 -0
  131. package/.claude-flow-novice/dist/src/coordination/v2/messaging/message-persistence.js +589 -0
  132. package/.claude-flow-novice/dist/src/coordination/v2/messaging/message-persistence.js.map +1 -0
  133. package/.claude-flow-novice/dist/src/coordination/v2/messaging/message-router.js +444 -0
  134. package/.claude-flow-novice/dist/src/coordination/v2/messaging/message-router.js.map +1 -0
  135. package/.claude-flow-novice/dist/src/coordination/v2/sdk/checkpoint-manager.js +29 -8
  136. package/.claude-flow-novice/dist/src/coordination/v2/sdk/checkpoint-manager.js.map +1 -1
  137. package/.claude-flow-novice/dist/src/coordination/v2/sdk/help-coordinator.js +470 -0
  138. package/.claude-flow-novice/dist/src/coordination/v2/sdk/help-coordinator.js.map +1 -0
  139. package/.claude-flow-novice/dist/src/coordination/v2/sdk/hierarchical-background-integration.js +450 -0
  140. package/.claude-flow-novice/dist/src/coordination/v2/sdk/hierarchical-background-integration.js.map +1 -0
  141. package/.claude-flow-novice/dist/src/coordination/v2/sdk/index.js +5 -0
  142. package/.claude-flow-novice/dist/src/coordination/v2/sdk/index.js.map +1 -1
  143. package/.claude-flow-novice/dist/src/coordination/v2/sdk/multi-level-control.js +545 -0
  144. package/.claude-flow-novice/dist/src/coordination/v2/sdk/multi-level-control.js.map +1 -0
  145. package/.claude-flow-novice/dist/src/coordination/v2/sdk/query-controller.js +44 -0
  146. package/.claude-flow-novice/dist/src/coordination/v2/sdk/query-controller.js.map +1 -1
  147. package/.claude-flow-novice/dist/src/coordination/v2/sdk/query-message-integration.js +415 -0
  148. package/.claude-flow-novice/dist/src/coordination/v2/sdk/query-message-integration.js.map +1 -0
  149. package/.claude-flow-novice/dist/src/coordination/v2/sdk/session-pool-optimizer.js +615 -0
  150. package/.claude-flow-novice/dist/src/coordination/v2/sdk/session-pool-optimizer.js.map +1 -0
  151. package/.claude-flow-novice/dist/src/coordination/v2/security/payload-validator.js +259 -0
  152. package/.claude-flow-novice/dist/src/coordination/v2/security/payload-validator.js.map +1 -0
  153. package/.claude-flow-novice/dist/src/coordination/v2/transparency/index.js +17 -0
  154. package/.claude-flow-novice/dist/src/coordination/v2/transparency/index.js.map +1 -0
  155. package/.claude-flow-novice/dist/src/coordination/v2/transparency/transparency-integration.js +357 -0
  156. package/.claude-flow-novice/dist/src/coordination/v2/transparency/transparency-integration.js.map +1 -0
  157. package/.claude-flow-novice/dist/src/coordination/v2/transparency/transparency-system.js +679 -0
  158. package/.claude-flow-novice/dist/src/coordination/v2/transparency/transparency-system.js.map +1 -0
  159. package/.claude-flow-novice/dist/src/core/agent-manager.js +30 -0
  160. package/.claude-flow-novice/dist/src/core/agent-manager.js.map +1 -1
  161. package/.claude-flow-novice/dist/src/mcp/server.js +21 -2
  162. package/.claude-flow-novice/dist/src/mcp/server.js.map +1 -1
  163. package/.claude-flow-novice/dist/src/observability/metrics-counter.js +268 -0
  164. package/.claude-flow-novice/dist/src/observability/metrics-counter.js.map +1 -0
  165. package/.claude-flow-novice/dist/src/observability/metrics-storage.js +265 -0
  166. package/.claude-flow-novice/dist/src/observability/metrics-storage.js.map +1 -0
  167. package/.claude-flow-novice/dist/src/observability/telemetry.js +26 -0
  168. package/.claude-flow-novice/dist/src/observability/telemetry.js.map +1 -1
  169. package/.claude-flow-novice/dist/src/providers/tiered-router.js +64 -10
  170. package/.claude-flow-novice/dist/src/providers/tiered-router.js.map +1 -1
  171. package/.claude-flow-novice/dist/src/providers/zai-provider.js +196 -97
  172. package/.claude-flow-novice/dist/src/providers/zai-provider.js.map +1 -1
  173. package/.claude-flow-novice/dist/src/slash-commands/cfn-claude-sync.js +533 -0
  174. package/.claude-flow-novice/dist/src/slash-commands/index.js +5 -0
  175. package/.claude-flow-novice/dist/src/slash-commands/metrics-summary-class.js +74 -0
  176. package/.claude-flow-novice/dist/src/slash-commands/metrics-summary.js +335 -0
  177. package/.claude-flow-novice/dist/src/slash-commands/register-all-commands.js +12 -0
  178. package/.claude-flow-novice/dist/src/verification/checkpoint-compression-demo.js +96 -0
  179. package/.claude-flow-novice/dist/src/verification/checkpoint-compression-demo.js.map +1 -0
  180. package/.claude-flow-novice/dist/src/verification/checkpoint-compression.js +406 -0
  181. package/.claude-flow-novice/dist/src/verification/checkpoint-compression.js.map +1 -0
  182. package/.claude-flow-novice/dist/src/verification/checkpoint-manager.js +35 -5
  183. package/.claude-flow-novice/dist/src/verification/checkpoint-manager.js.map +1 -1
  184. package/.claude-flow-novice/dist/src/web/api/config/api-config.js +186 -0
  185. package/.claude-flow-novice/dist/src/web/api/config/api-config.js.map +1 -0
  186. package/.claude-flow-novice/dist/src/web/api/middleware/auth.js +205 -0
  187. package/.claude-flow-novice/dist/src/web/api/middleware/auth.js.map +1 -0
  188. package/.claude-flow-novice/dist/src/web/api/middleware/cache.js +262 -0
  189. package/.claude-flow-novice/dist/src/web/api/middleware/cache.js.map +1 -0
  190. package/.claude-flow-novice/dist/src/web/api/middleware/error-handler.js +250 -0
  191. package/.claude-flow-novice/dist/src/web/api/middleware/error-handler.js.map +1 -0
  192. package/.claude-flow-novice/dist/src/web/api/middleware/request-logger.js +217 -0
  193. package/.claude-flow-novice/dist/src/web/api/middleware/request-logger.js.map +1 -0
  194. package/.claude-flow-novice/dist/src/web/api/middleware/validation.js +325 -0
  195. package/.claude-flow-novice/dist/src/web/api/middleware/validation.js.map +1 -0
  196. package/.claude-flow-novice/dist/src/web/api/routes/events.js +465 -0
  197. package/.claude-flow-novice/dist/src/web/api/routes/events.js.map +1 -0
  198. package/.claude-flow-novice/dist/src/web/api/routes/hierarchy.js +302 -0
  199. package/.claude-flow-novice/dist/src/web/api/routes/hierarchy.js.map +1 -0
  200. package/.claude-flow-novice/dist/src/web/api/routes/index.js +14 -0
  201. package/.claude-flow-novice/dist/src/web/api/routes/index.js.map +1 -0
  202. package/.claude-flow-novice/dist/src/web/api/routes/metrics.js +561 -0
  203. package/.claude-flow-novice/dist/src/web/api/routes/metrics.js.map +1 -0
  204. package/.claude-flow-novice/dist/src/web/api/routes/status.js +450 -0
  205. package/.claude-flow-novice/dist/src/web/api/routes/status.js.map +1 -0
  206. package/.claude-flow-novice/dist/src/web/api/server.js +451 -0
  207. package/.claude-flow-novice/dist/src/web/api/server.js.map +1 -0
  208. package/.claude-flow-novice/dist/src/web/dashboard/hooks/useWebSocket.js +385 -0
  209. package/.claude-flow-novice/dist/src/web/dashboard/hooks/useWebSocket.js.map +1 -0
  210. package/.claude-flow-novice/dist/src/web/dashboard/index.js +87 -0
  211. package/.claude-flow-novice/dist/src/web/dashboard/index.js.map +1 -0
  212. package/.claude-flow-novice/dist/src/web/dashboard/types.js +6 -0
  213. package/.claude-flow-novice/dist/src/web/dashboard/types.js.map +1 -0
  214. package/.claude-flow-novice/metrics.db +0 -0
  215. package/.claude-flow-novice/metrics.db-shm +0 -0
  216. package/.claude-flow-novice/metrics.db-wal +0 -0
  217. package/CLAUDE.md +29 -0
  218. package/README.md +27 -0
  219. package/config/hooks/post-edit-pipeline.js +36 -2
  220. package/examples/metrics-counter-demo.ts +106 -0
  221. package/examples/persistent-metrics-demo.ts +83 -0
  222. package/examples/phase-5-multi-level-control.ts +282 -0
  223. package/examples/session-pool-optimizer-example.ts +311 -0
  224. package/package.json +15 -3
  225. package/scripts/check-routing-stats.cjs +122 -0
  226. package/scripts/pre-publish-validation.cjs +212 -0
  227. package/scripts/test-provider-routing.cjs +228 -0
  228. package/scripts/test-routing-telemetry.cjs +147 -0
  229. package/scripts/test-zai-10k.cjs +81 -0
  230. package/scripts/test-zai-api.cjs +191 -0
  231. package/scripts/test-zai-diagnostic.cjs +151 -0
  232. package/scripts/test-zai-final.cjs +128 -0
  233. package/scripts/test-zai-with-env.cjs +85 -0
  234. package/scripts/validate-coordination-cli.js +69 -0
  235. package/scripts/validate-coordination-toggle-integration.cjs +501 -0
  236. package/src/cli/simple-commands/init/templates/CLAUDE.md +29 -0
  237. package/src/observability/metrics-counter.ts +347 -0
  238. package/src/observability/metrics-storage.ts +356 -0
  239. package/src/observability/telemetry.ts +658 -0
  240. package/src/slash-commands/cfn-claude-sync.js +533 -0
  241. package/src/slash-commands/index.js +5 -0
  242. package/src/slash-commands/metrics-summary-class.js +74 -0
  243. package/src/slash-commands/metrics-summary.js +335 -0
  244. package/src/slash-commands/register-all-commands.js +12 -0
@@ -0,0 +1,492 @@
1
+ /**
2
+ * Agent Coordination V2 - Cascading Shutdown Coordinator
3
+ *
4
+ * Hierarchical shutdown coordination with top-down notification and bottom-up completion.
5
+ * Implements graceful termination with resource cleanup at all levels.
6
+ *
7
+ * Performance targets:
8
+ * - Complete hierarchy shutdown: <1s for 20 agents
9
+ * - Top-down notification: <100ms per level
10
+ * - Bottom-up aggregation: <200ms total
11
+ * - Resource cleanup: 100% coverage
12
+ *
13
+ * Features:
14
+ * - Top-down shutdown notification (root → leaves)
15
+ * - Bottom-up completion aggregation (leaves → root)
16
+ * - Graceful resource cleanup (connections, files, processes)
17
+ * - Integration with Phase 4 hierarchical completion detection
18
+ * - Emergency shutdown support
19
+ * - Shutdown checkpoint creation
20
+ *
21
+ * @module coordination/v2/coordinators/cascading-shutdown
22
+ */ import { EventEmitter } from 'events';
23
+ /**
24
+ * CascadingShutdown - Top-down shutdown with bottom-up completion
25
+ *
26
+ * Implements hierarchical shutdown coordination:
27
+ * 1. Top-down: Notify all levels from root → leaves
28
+ * 2. Parallel: Each level executes shutdown simultaneously
29
+ * 3. Bottom-up: Aggregate completion from leaves → root
30
+ * 4. Cleanup: Resource cleanup at each level
31
+ * 5. Checkpoint: Optional checkpoint creation
32
+ *
33
+ * Shutdown flow:
34
+ * - Level 0 (root) initiates shutdown
35
+ * - Notify Level 1 agents → Notify Level 2 agents → ... → Notify Level N agents
36
+ * - Level N agents complete → Level N-1 aggregates → ... → Level 0 completes
37
+ * - Children complete before parents (bottom-up guarantee)
38
+ *
39
+ * @example
40
+ * ```typescript
41
+ * const cascadingShutdown = new CascadingShutdown(
42
+ * hierarchicalDetector,
43
+ * {
44
+ * maxShutdownTimeMs: 10000,
45
+ * createShutdownCheckpoints: true,
46
+ * enableResourceCleanup: true
47
+ * }
48
+ * );
49
+ *
50
+ * // Register hierarchy
51
+ * cascadingShutdown.registerHierarchy('swarm-1', 'coordinator-0', [
52
+ * { agentId: 'coordinator-0', level: 0, childIds: ['agent-1', 'agent-2'] },
53
+ * { agentId: 'agent-1', level: 1, parentId: 'coordinator-0' },
54
+ * { agentId: 'agent-2', level: 1, parentId: 'coordinator-0' }
55
+ * ]);
56
+ *
57
+ * // Initiate shutdown from root
58
+ * const result = await cascadingShutdown.initiateShutdown('coordinator-0', 'Task completed');
59
+ *
60
+ * console.log(`Shutdown ${result.totalAgents} agents in ${result.totalLatencyMs}ms`);
61
+ * ```
62
+ */ export class CascadingShutdown extends EventEmitter {
63
+ hierarchies = new Map();
64
+ hierarchicalDetector;
65
+ config;
66
+ shutdownInProgress = new Set();
67
+ resourceCleanupHandlers = new Map();
68
+ constructor(hierarchicalDetector, config){
69
+ super();
70
+ this.hierarchicalDetector = hierarchicalDetector;
71
+ this.config = {
72
+ maxShutdownTimeMs: 10000,
73
+ createShutdownCheckpoints: true,
74
+ enableResourceCleanup: true,
75
+ notificationTimeoutMs: 100,
76
+ completionTimeoutMs: 200,
77
+ enableEmergencyMode: true,
78
+ agentGracePeriodMs: 500,
79
+ ...config
80
+ };
81
+ }
82
+ /**
83
+ * Register hierarchy for shutdown coordination
84
+ *
85
+ * @param swarmId - Swarm identifier
86
+ * @param rootCoordinatorId - Root coordinator agent ID (Level 0)
87
+ * @param nodes - Hierarchy node definitions
88
+ */ registerHierarchy(swarmId, rootCoordinatorId, nodes) {
89
+ const hierarchyNodes = new Map();
90
+ // Build hierarchy nodes
91
+ for (const node of nodes){
92
+ hierarchyNodes.set(node.agentId, {
93
+ agentId: node.agentId,
94
+ level: node.level,
95
+ parentId: node.parentId,
96
+ childIds: node.childIds || [],
97
+ shutdownStatus: 'pending',
98
+ resources: node.resources || [],
99
+ sessionId: node.sessionId
100
+ });
101
+ }
102
+ // Ensure root coordinator exists
103
+ if (!hierarchyNodes.has(rootCoordinatorId)) {
104
+ hierarchyNodes.set(rootCoordinatorId, {
105
+ agentId: rootCoordinatorId,
106
+ level: 0,
107
+ childIds: [],
108
+ shutdownStatus: 'pending',
109
+ resources: []
110
+ });
111
+ }
112
+ // Build parent-child relationships if not provided
113
+ const nodesArray2 = Array.from(hierarchyNodes.values());
114
+ for (const node of nodesArray2){
115
+ if (node.parentId && hierarchyNodes.has(node.parentId)) {
116
+ const parent = hierarchyNodes.get(node.parentId);
117
+ if (!parent.childIds.includes(node.agentId)) {
118
+ parent.childIds.push(node.agentId);
119
+ }
120
+ }
121
+ }
122
+ this.hierarchies.set(swarmId, hierarchyNodes);
123
+ const nodesArray = Array.from(hierarchyNodes.values());
124
+ this.emit('hierarchy:registered', {
125
+ swarmId,
126
+ rootCoordinatorId,
127
+ totalAgents: hierarchyNodes.size,
128
+ maxDepth: Math.max(...nodesArray.map((n)=>n.level))
129
+ });
130
+ }
131
+ /**
132
+ * Register resource cleanup handler for specific resource type
133
+ *
134
+ * @param resourceType - Type of resource to handle
135
+ * @param handler - Cleanup handler function
136
+ *
137
+ * @example
138
+ * ```typescript
139
+ * cascadingShutdown.registerResourceCleanup('connection', async (resource) => {
140
+ * await closeConnection(resource.id);
141
+ * });
142
+ * ```
143
+ */ registerResourceCleanup(resourceType, handler) {
144
+ this.resourceCleanupHandlers.set(resourceType, handler);
145
+ }
146
+ /**
147
+ * Initiate cascading shutdown from root coordinator
148
+ *
149
+ * Performance target: <1s for 20-agent hierarchy
150
+ *
151
+ * Process:
152
+ * 1. Top-down notification (root → leaves)
153
+ * 2. Parallel shutdown execution at each level
154
+ * 3. Bottom-up completion aggregation (leaves → root)
155
+ * 4. Resource cleanup at all levels
156
+ *
157
+ * @param rootCoordinatorId - Root coordinator to initiate from
158
+ * @param reason - Shutdown reason
159
+ * @param swarmId - Optional swarm ID (auto-detect if omitted)
160
+ * @returns Promise resolving to CascadingShutdownResult
161
+ */ async initiateShutdown(rootCoordinatorId, reason = 'Cascading shutdown initiated', swarmId) {
162
+ const startTime = Date.now();
163
+ // Find swarm containing root coordinator
164
+ const targetSwarmId = swarmId || this.findSwarmByAgent(rootCoordinatorId);
165
+ if (!targetSwarmId) {
166
+ throw new Error(`Root coordinator ${rootCoordinatorId} not found in any hierarchy`);
167
+ }
168
+ const hierarchy = this.hierarchies.get(targetSwarmId);
169
+ if (!hierarchy) {
170
+ throw new Error(`Hierarchy not found for swarm ${targetSwarmId}`);
171
+ }
172
+ const rootNode = hierarchy.get(rootCoordinatorId);
173
+ if (!rootNode) {
174
+ throw new Error(`Root coordinator ${rootCoordinatorId} not found in hierarchy`);
175
+ }
176
+ // Check if shutdown already in progress
177
+ if (this.shutdownInProgress.has(targetSwarmId)) {
178
+ throw new Error(`Shutdown already in progress for swarm ${targetSwarmId}`);
179
+ }
180
+ this.shutdownInProgress.add(targetSwarmId);
181
+ const hierarchyArray = Array.from(hierarchy.values());
182
+ const shutdownResult = {
183
+ rootCoordinatorId,
184
+ success: true,
185
+ totalAgents: hierarchy.size,
186
+ successfulShutdowns: 0,
187
+ failedShutdowns: 0,
188
+ maxDepth: Math.max(...hierarchyArray.map((n)=>n.level)),
189
+ totalLatencyMs: 0,
190
+ notificationLatencyMs: 0,
191
+ aggregationLatencyMs: 0,
192
+ totalResourcesCleaned: 0,
193
+ agentResults: [],
194
+ shutdownAt: new Date(),
195
+ reason
196
+ };
197
+ this.emit('shutdown:started', {
198
+ rootCoordinatorId,
199
+ swarmId: targetSwarmId,
200
+ totalAgents: hierarchy.size,
201
+ reason
202
+ });
203
+ try {
204
+ // Step 1: Top-down shutdown notification (root → leaves)
205
+ const notificationStartTime = Date.now();
206
+ await this.notifyShutdownTopDown(hierarchy, rootCoordinatorId);
207
+ shutdownResult.notificationLatencyMs = Date.now() - notificationStartTime;
208
+ // Step 2: Bottom-up completion aggregation (leaves → root)
209
+ const aggregationStartTime = Date.now();
210
+ shutdownResult.agentResults = await this.aggregateCompletionBottomUp(hierarchy, rootCoordinatorId, reason);
211
+ shutdownResult.aggregationLatencyMs = Date.now() - aggregationStartTime;
212
+ // Calculate metrics
213
+ shutdownResult.successfulShutdowns = shutdownResult.agentResults.filter((r)=>r.success).length;
214
+ shutdownResult.failedShutdowns = shutdownResult.agentResults.filter((r)=>!r.success).length;
215
+ shutdownResult.totalResourcesCleaned = shutdownResult.agentResults.reduce((sum, r)=>sum + r.resourcesCleaned, 0);
216
+ shutdownResult.success = shutdownResult.failedShutdowns === 0;
217
+ shutdownResult.totalLatencyMs = Date.now() - startTime;
218
+ // Performance warning if exceeds target
219
+ if (shutdownResult.totalLatencyMs > 1000 && hierarchy.size <= 20) {
220
+ console.warn(`[CascadingShutdown] Shutdown latency ${shutdownResult.totalLatencyMs}ms exceeds 1s target for ${hierarchy.size} agents`);
221
+ }
222
+ this.emit('shutdown:completed', shutdownResult);
223
+ return shutdownResult;
224
+ } catch (error) {
225
+ shutdownResult.success = false;
226
+ shutdownResult.totalLatencyMs = Date.now() - startTime;
227
+ this.emit('shutdown:failed', {
228
+ error: error instanceof Error ? error.message : String(error),
229
+ result: shutdownResult
230
+ });
231
+ throw error;
232
+ } finally{
233
+ this.shutdownInProgress.delete(targetSwarmId);
234
+ }
235
+ }
236
+ /**
237
+ * Emergency shutdown - immediate termination without checkpoints
238
+ *
239
+ * @param rootCoordinatorId - Root coordinator to shutdown
240
+ * @param reason - Emergency reason
241
+ * @returns Promise resolving when emergency shutdown complete
242
+ */ async emergencyShutdown(rootCoordinatorId, reason) {
243
+ this.emit('shutdown:emergency', {
244
+ rootCoordinatorId,
245
+ reason
246
+ });
247
+ // Disable checkpoints and resource cleanup for speed
248
+ const originalCheckpointConfig = this.config.createShutdownCheckpoints;
249
+ const originalCleanupConfig = this.config.enableResourceCleanup;
250
+ this.config.createShutdownCheckpoints = false;
251
+ this.config.enableResourceCleanup = false;
252
+ try {
253
+ return await this.initiateShutdown(rootCoordinatorId, `EMERGENCY: ${reason}`);
254
+ } finally{
255
+ this.config.createShutdownCheckpoints = originalCheckpointConfig;
256
+ this.config.enableResourceCleanup = originalCleanupConfig;
257
+ }
258
+ }
259
+ /**
260
+ * Top-down shutdown notification (root → leaves)
261
+ *
262
+ * Notifies all agents in hierarchy using BFS level-by-level traversal.
263
+ * Target: <100ms per level notification.
264
+ *
265
+ * @param hierarchy - Hierarchy nodes map
266
+ * @param rootId - Root agent to start from
267
+ */ async notifyShutdownTopDown(hierarchy, rootId) {
268
+ const queue = [
269
+ rootId
270
+ ];
271
+ const visited = new Set();
272
+ while(queue.length > 0){
273
+ const levelSize = queue.length;
274
+ const levelStartTime = Date.now();
275
+ const notificationPromises = [];
276
+ // Process entire level in parallel
277
+ for(let i = 0; i < levelSize; i++){
278
+ const agentId = queue.shift();
279
+ if (visited.has(agentId)) continue;
280
+ visited.add(agentId);
281
+ const node = hierarchy.get(agentId);
282
+ if (!node) continue;
283
+ // Notify this agent
284
+ notificationPromises.push(this.notifyAgent(node));
285
+ // Add children to queue for next level
286
+ queue.push(...node.childIds);
287
+ }
288
+ // Wait for level notifications to complete
289
+ await Promise.all(notificationPromises);
290
+ const levelLatency = Date.now() - levelStartTime;
291
+ if (levelLatency > this.config.notificationTimeoutMs) {
292
+ console.warn(`[CascadingShutdown] Level notification latency ${levelLatency}ms exceeds ${this.config.notificationTimeoutMs}ms target`);
293
+ }
294
+ }
295
+ }
296
+ /**
297
+ * Notify single agent of shutdown
298
+ *
299
+ * @param node - Node to notify
300
+ */ async notifyAgent(node) {
301
+ node.shutdownStatus = 'notified';
302
+ node.notifiedAt = Date.now();
303
+ this.emit('agent:notified', {
304
+ agentId: node.agentId,
305
+ level: node.level,
306
+ timestamp: node.notifiedAt
307
+ });
308
+ }
309
+ /**
310
+ * Bottom-up completion aggregation (leaves → root)
311
+ *
312
+ * Aggregates completion from leaf nodes up to root.
313
+ * Children complete before parents (guaranteed bottom-up order).
314
+ *
315
+ * Target: <200ms total aggregation time.
316
+ *
317
+ * @param hierarchy - Hierarchy nodes map
318
+ * @param rootId - Root agent to aggregate to
319
+ * @param reason - Shutdown reason
320
+ * @returns Array of AgentShutdownResult
321
+ */ async aggregateCompletionBottomUp(hierarchy, rootId, reason) {
322
+ const results = [];
323
+ // DFS post-order traversal (children before parent)
324
+ const processNode = async (agentId)=>{
325
+ const node = hierarchy.get(agentId);
326
+ if (!node) return;
327
+ // First, process all children (recursive)
328
+ await Promise.all(node.childIds.map((childId)=>processNode(childId)));
329
+ // Then, shutdown this node (after children complete)
330
+ const result = await this.shutdownAgent(node, reason);
331
+ results.push(result);
332
+ };
333
+ await processNode(rootId);
334
+ return results;
335
+ }
336
+ /**
337
+ * Shutdown single agent with resource cleanup
338
+ *
339
+ * @param node - Node to shutdown
340
+ * @param reason - Shutdown reason
341
+ * @returns AgentShutdownResult
342
+ */ async shutdownAgent(node, reason) {
343
+ const notificationLatency = node.notifiedAt ? Date.now() - node.notifiedAt : 0;
344
+ const startTime = Date.now();
345
+ const result = {
346
+ agentId: node.agentId,
347
+ level: node.level,
348
+ success: false,
349
+ notificationLatencyMs: notificationLatency,
350
+ completionLatencyMs: 0,
351
+ resourcesCleaned: 0,
352
+ resourcesFailed: 0
353
+ };
354
+ try {
355
+ node.shutdownStatus = 'completing';
356
+ // Step 1: Create shutdown checkpoint if enabled
357
+ if (this.config.createShutdownCheckpoints) {
358
+ // Checkpoint creation would integrate with Phase 4 checkpoint manager
359
+ // For now, we track the intention
360
+ node.checkpointId = `shutdown-${node.agentId}-${Date.now()}`;
361
+ result.checkpointId = node.checkpointId;
362
+ }
363
+ // Step 2: Resource cleanup
364
+ if (this.config.enableResourceCleanup && node.resources.length > 0) {
365
+ const cleanupResults = await this.cleanupResources(node);
366
+ result.resourcesCleaned = cleanupResults.filter((r)=>r.cleaned).length;
367
+ result.resourcesFailed = cleanupResults.filter((r)=>!r.cleaned).length;
368
+ }
369
+ // Step 3: Mark as completed
370
+ node.shutdownStatus = 'completed';
371
+ node.completedAt = Date.now();
372
+ result.success = true;
373
+ result.completionLatencyMs = Date.now() - startTime;
374
+ this.emit('agent:shutdown', result);
375
+ } catch (error) {
376
+ result.success = false;
377
+ result.error = error instanceof Error ? error.message : String(error);
378
+ result.completionLatencyMs = Date.now() - startTime;
379
+ this.emit('agent:shutdown-failed', result);
380
+ }
381
+ return result;
382
+ }
383
+ /**
384
+ * Cleanup resources for agent
385
+ *
386
+ * @param node - Node with resources to cleanup
387
+ * @returns Array of cleaned ResourceDescriptor
388
+ */ async cleanupResources(node) {
389
+ const cleanupPromises = node.resources.map(async (resource)=>{
390
+ try {
391
+ const handler = this.resourceCleanupHandlers.get(resource.type);
392
+ if (handler) {
393
+ await handler(resource);
394
+ }
395
+ resource.cleaned = true;
396
+ this.emit('resource:cleaned', {
397
+ agentId: node.agentId,
398
+ resourceType: resource.type,
399
+ resourceId: resource.id
400
+ });
401
+ } catch (error) {
402
+ resource.cleaned = false;
403
+ resource.error = error instanceof Error ? error.message : String(error);
404
+ this.emit('resource:cleanup-failed', {
405
+ agentId: node.agentId,
406
+ resourceType: resource.type,
407
+ resourceId: resource.id,
408
+ error: resource.error
409
+ });
410
+ }
411
+ return resource;
412
+ });
413
+ return Promise.all(cleanupPromises);
414
+ }
415
+ /**
416
+ * Find swarm containing specific agent
417
+ *
418
+ * @param agentId - Agent to search for
419
+ * @returns Swarm ID or undefined if not found
420
+ */ findSwarmByAgent(agentId) {
421
+ const entriesArray = Array.from(this.hierarchies.entries());
422
+ for (const [swarmId, hierarchy] of entriesArray){
423
+ if (hierarchy.has(agentId)) {
424
+ return swarmId;
425
+ }
426
+ }
427
+ return undefined;
428
+ }
429
+ /**
430
+ * Check if shutdown is in progress for swarm
431
+ *
432
+ * @param swarmId - Swarm to check
433
+ * @returns True if shutdown in progress
434
+ */ isShutdownInProgress(swarmId) {
435
+ return this.shutdownInProgress.has(swarmId);
436
+ }
437
+ /**
438
+ * Get shutdown status for agent
439
+ *
440
+ * @param agentId - Agent to query
441
+ * @returns Shutdown status or undefined if not found
442
+ */ getShutdownStatus(agentId) {
443
+ const hierarchiesArray = Array.from(this.hierarchies.values());
444
+ for (const hierarchy of hierarchiesArray){
445
+ const node = hierarchy.get(agentId);
446
+ if (node) {
447
+ return node.shutdownStatus;
448
+ }
449
+ }
450
+ return undefined;
451
+ }
452
+ /**
453
+ * Get shutdown configuration
454
+ */ getConfig() {
455
+ return {
456
+ ...this.config
457
+ };
458
+ }
459
+ /**
460
+ * Unregister hierarchy
461
+ *
462
+ * @param swarmId - Swarm to unregister
463
+ * @returns True if unregistered, false if not found
464
+ */ unregisterHierarchy(swarmId) {
465
+ return this.hierarchies.delete(swarmId);
466
+ }
467
+ /**
468
+ * Cleanup coordinator resources
469
+ */ async cleanup() {
470
+ // Shutdown all registered hierarchies
471
+ const hierarchiesArray = Array.from(this.hierarchies.entries());
472
+ const shutdownPromises = hierarchiesArray.map(async ([swarmId, hierarchy])=>{
473
+ const hierarchyArray = Array.from(hierarchy.values());
474
+ const rootNode = hierarchyArray.find((n)=>n.level === 0);
475
+ if (rootNode) {
476
+ try {
477
+ await this.initiateShutdown(rootNode.agentId, 'Coordinator cleanup', swarmId);
478
+ } catch (error) {
479
+ console.error(`Failed to shutdown swarm ${swarmId}:`, error);
480
+ }
481
+ }
482
+ });
483
+ await Promise.all(shutdownPromises);
484
+ // Clear all state
485
+ this.hierarchies.clear();
486
+ this.shutdownInProgress.clear();
487
+ this.resourceCleanupHandlers.clear();
488
+ this.emit('coordinator:cleanup');
489
+ }
490
+ }
491
+
492
+ //# sourceMappingURL=cascading-shutdown.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../../../../src/coordination/v2/coordinators/cascading-shutdown.ts"],"names":["EventEmitter","CascadingShutdown","hierarchies","Map","hierarchicalDetector","config","shutdownInProgress","Set","resourceCleanupHandlers","maxShutdownTimeMs","createShutdownCheckpoints","enableResourceCleanup","notificationTimeoutMs","completionTimeoutMs","enableEmergencyMode","agentGracePeriodMs","registerHierarchy","swarmId","rootCoordinatorId","nodes","hierarchyNodes","node","set","agentId","level","parentId","childIds","shutdownStatus","resources","sessionId","has","nodesArray2","Array","from","values","parent","get","includes","push","nodesArray","emit","totalAgents","size","maxDepth","Math","max","map","n","registerResourceCleanup","resourceType","handler","initiateShutdown","reason","startTime","Date","now","targetSwarmId","findSwarmByAgent","Error","hierarchy","rootNode","add","hierarchyArray","shutdownResult","success","successfulShutdowns","failedShutdowns","totalLatencyMs","notificationLatencyMs","aggregationLatencyMs","totalResourcesCleaned","agentResults","shutdownAt","notificationStartTime","notifyShutdownTopDown","aggregationStartTime","aggregateCompletionBottomUp","filter","r","length","reduce","sum","resourcesCleaned","console","warn","error","message","String","result","delete","emergencyShutdown","originalCheckpointConfig","originalCleanupConfig","rootId","queue","visited","levelSize","levelStartTime","notificationPromises","i","shift","notifyAgent","Promise","all","levelLatency","notifiedAt","timestamp","results","processNode","childId","shutdownAgent","notificationLatency","completionLatencyMs","resourcesFailed","checkpointId","cleanupResults","cleanupResources","cleaned","completedAt","cleanupPromises","resource","type","resourceId","id","entriesArray","entries","undefined","isShutdownInProgress","getShutdownStatus","hierarchiesArray","getConfig","unregisterHierarchy","cleanup","shutdownPromises","find","clear"],"mappings":"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"}