moflo 4.8.17 → 4.8.20

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/guidance/shipped/moflo.md +45 -0
  2. package/.claude/helpers/statusline.cjs +1 -1
  3. package/.claude/workflow-state.json +9 -0
  4. package/bin/generate-code-map.mjs +91 -12
  5. package/package.json +2 -2
  6. package/src/@claude-flow/cli/bin/cli.js +5 -0
  7. package/src/@claude-flow/cli/dist/src/init/moflo-init.js +9 -0
  8. package/src/@claude-flow/cli/dist/src/init/statusline-generator.js +1 -1
  9. package/src/@claude-flow/cli/dist/src/services/agentic-flow-bridge.js +8 -0
  10. package/src/@claude-flow/cli/package.json +1 -1
  11. package/src/@claude-flow/memory/dist/agent-memory-scope.d.ts +131 -0
  12. package/src/@claude-flow/memory/dist/agent-memory-scope.js +223 -0
  13. package/src/@claude-flow/memory/dist/agent-memory-scope.test.d.ts +8 -0
  14. package/src/@claude-flow/memory/dist/agent-memory-scope.test.js +466 -0
  15. package/src/@claude-flow/memory/dist/agentdb-adapter.d.ts +165 -0
  16. package/src/@claude-flow/memory/dist/agentdb-adapter.js +806 -0
  17. package/src/@claude-flow/memory/dist/agentdb-backend.d.ts +212 -0
  18. package/src/@claude-flow/memory/dist/agentdb-backend.js +842 -0
  19. package/src/@claude-flow/memory/dist/agentdb-backend.test.d.ts +7 -0
  20. package/src/@claude-flow/memory/dist/agentdb-backend.test.js +258 -0
  21. package/src/@claude-flow/memory/dist/application/commands/delete-memory.command.d.ts +65 -0
  22. package/src/@claude-flow/memory/dist/application/commands/delete-memory.command.js +129 -0
  23. package/src/@claude-flow/memory/dist/application/commands/store-memory.command.d.ts +48 -0
  24. package/src/@claude-flow/memory/dist/application/commands/store-memory.command.js +72 -0
  25. package/src/@claude-flow/memory/dist/application/index.d.ts +12 -0
  26. package/src/@claude-flow/memory/dist/application/index.js +15 -0
  27. package/src/@claude-flow/memory/dist/application/queries/search-memory.query.d.ts +72 -0
  28. package/src/@claude-flow/memory/dist/application/queries/search-memory.query.js +143 -0
  29. package/src/@claude-flow/memory/dist/application/services/memory-application-service.d.ts +121 -0
  30. package/src/@claude-flow/memory/dist/application/services/memory-application-service.js +190 -0
  31. package/src/@claude-flow/memory/dist/auto-memory-bridge.d.ts +226 -0
  32. package/src/@claude-flow/memory/dist/auto-memory-bridge.js +709 -0
  33. package/src/@claude-flow/memory/dist/auto-memory-bridge.test.d.ts +8 -0
  34. package/src/@claude-flow/memory/dist/auto-memory-bridge.test.js +757 -0
  35. package/src/@claude-flow/memory/dist/benchmark.test.d.ts +2 -0
  36. package/src/@claude-flow/memory/dist/benchmark.test.js +277 -0
  37. package/src/@claude-flow/memory/dist/cache-manager.d.ts +134 -0
  38. package/src/@claude-flow/memory/dist/cache-manager.js +407 -0
  39. package/src/@claude-flow/memory/dist/controller-registry.d.ts +216 -0
  40. package/src/@claude-flow/memory/dist/controller-registry.js +893 -0
  41. package/src/@claude-flow/memory/dist/controller-registry.test.d.ts +14 -0
  42. package/src/@claude-flow/memory/dist/controller-registry.test.js +593 -0
  43. package/src/@claude-flow/memory/dist/database-provider.d.ts +87 -0
  44. package/src/@claude-flow/memory/dist/database-provider.js +372 -0
  45. package/src/@claude-flow/memory/dist/database-provider.test.d.ts +7 -0
  46. package/src/@claude-flow/memory/dist/database-provider.test.js +287 -0
  47. package/src/@claude-flow/memory/dist/domain/entities/memory-entry.d.ts +143 -0
  48. package/src/@claude-flow/memory/dist/domain/entities/memory-entry.js +226 -0
  49. package/src/@claude-flow/memory/dist/domain/index.d.ts +11 -0
  50. package/src/@claude-flow/memory/dist/domain/index.js +12 -0
  51. package/src/@claude-flow/memory/dist/domain/repositories/memory-repository.interface.d.ts +102 -0
  52. package/src/@claude-flow/memory/dist/domain/repositories/memory-repository.interface.js +11 -0
  53. package/src/@claude-flow/memory/dist/domain/services/memory-domain-service.d.ts +105 -0
  54. package/src/@claude-flow/memory/dist/domain/services/memory-domain-service.js +297 -0
  55. package/src/@claude-flow/memory/dist/hnsw-index.d.ts +111 -0
  56. package/src/@claude-flow/memory/dist/hnsw-index.js +781 -0
  57. package/src/@claude-flow/memory/dist/hnsw-lite.d.ts +23 -0
  58. package/src/@claude-flow/memory/dist/hnsw-lite.js +168 -0
  59. package/src/@claude-flow/memory/dist/index.d.ts +204 -0
  60. package/src/@claude-flow/memory/dist/index.js +358 -0
  61. package/src/@claude-flow/memory/dist/infrastructure/index.d.ts +17 -0
  62. package/src/@claude-flow/memory/dist/infrastructure/index.js +16 -0
  63. package/src/@claude-flow/memory/dist/infrastructure/repositories/hybrid-memory-repository.d.ts +66 -0
  64. package/src/@claude-flow/memory/dist/infrastructure/repositories/hybrid-memory-repository.js +409 -0
  65. package/src/@claude-flow/memory/dist/learning-bridge.d.ts +137 -0
  66. package/src/@claude-flow/memory/dist/learning-bridge.js +335 -0
  67. package/src/@claude-flow/memory/dist/learning-bridge.test.d.ts +8 -0
  68. package/src/@claude-flow/memory/dist/learning-bridge.test.js +578 -0
  69. package/src/@claude-flow/memory/dist/memory-graph.d.ts +100 -0
  70. package/src/@claude-flow/memory/dist/memory-graph.js +333 -0
  71. package/src/@claude-flow/memory/dist/memory-graph.test.d.ts +8 -0
  72. package/src/@claude-flow/memory/dist/memory-graph.test.js +609 -0
  73. package/src/@claude-flow/memory/dist/migration.d.ts +68 -0
  74. package/src/@claude-flow/memory/dist/migration.js +513 -0
  75. package/src/@claude-flow/memory/dist/persistent-sona.d.ts +144 -0
  76. package/src/@claude-flow/memory/dist/persistent-sona.js +332 -0
  77. package/src/@claude-flow/memory/dist/query-builder.d.ts +211 -0
  78. package/src/@claude-flow/memory/dist/query-builder.js +438 -0
  79. package/src/@claude-flow/memory/dist/rvf-backend.d.ts +51 -0
  80. package/src/@claude-flow/memory/dist/rvf-backend.js +481 -0
  81. package/src/@claude-flow/memory/dist/rvf-learning-store.d.ts +139 -0
  82. package/src/@claude-flow/memory/dist/rvf-learning-store.js +295 -0
  83. package/src/@claude-flow/memory/dist/rvf-migration.d.ts +45 -0
  84. package/src/@claude-flow/memory/dist/rvf-migration.js +234 -0
  85. package/src/@claude-flow/memory/dist/sqljs-backend.d.ts +127 -0
  86. package/src/@claude-flow/memory/dist/sqljs-backend.js +600 -0
  87. package/src/@claude-flow/memory/dist/types.d.ts +484 -0
  88. package/src/@claude-flow/memory/dist/types.js +58 -0
  89. package/src/@claude-flow/shared/dist/core/config/defaults.d.ts +41 -0
  90. package/src/@claude-flow/shared/dist/core/config/defaults.js +186 -0
  91. package/src/@claude-flow/shared/dist/core/config/index.d.ts +8 -0
  92. package/src/@claude-flow/shared/dist/core/config/index.js +12 -0
  93. package/src/@claude-flow/shared/dist/core/config/loader.d.ts +45 -0
  94. package/src/@claude-flow/shared/dist/core/config/loader.js +222 -0
  95. package/src/@claude-flow/shared/dist/core/config/schema.d.ts +1134 -0
  96. package/src/@claude-flow/shared/dist/core/config/schema.js +158 -0
  97. package/src/@claude-flow/shared/dist/core/config/validator.d.ts +92 -0
  98. package/src/@claude-flow/shared/dist/core/config/validator.js +147 -0
  99. package/src/@claude-flow/shared/dist/core/event-bus.d.ts +31 -0
  100. package/src/@claude-flow/shared/dist/core/event-bus.js +197 -0
  101. package/src/@claude-flow/shared/dist/core/index.d.ts +15 -0
  102. package/src/@claude-flow/shared/dist/core/index.js +19 -0
  103. package/src/@claude-flow/shared/dist/core/interfaces/agent.interface.d.ts +200 -0
  104. package/src/@claude-flow/shared/dist/core/interfaces/agent.interface.js +6 -0
  105. package/src/@claude-flow/shared/dist/core/interfaces/coordinator.interface.d.ts +310 -0
  106. package/src/@claude-flow/shared/dist/core/interfaces/coordinator.interface.js +7 -0
  107. package/src/@claude-flow/shared/dist/core/interfaces/event.interface.d.ts +224 -0
  108. package/src/@claude-flow/shared/dist/core/interfaces/event.interface.js +46 -0
  109. package/src/@claude-flow/shared/dist/core/interfaces/index.d.ts +10 -0
  110. package/src/@claude-flow/shared/dist/core/interfaces/index.js +15 -0
  111. package/src/@claude-flow/shared/dist/core/interfaces/memory.interface.d.ts +298 -0
  112. package/src/@claude-flow/shared/dist/core/interfaces/memory.interface.js +7 -0
  113. package/src/@claude-flow/shared/dist/core/interfaces/task.interface.d.ts +185 -0
  114. package/src/@claude-flow/shared/dist/core/interfaces/task.interface.js +6 -0
  115. package/src/@claude-flow/shared/dist/core/orchestrator/event-coordinator.d.ts +35 -0
  116. package/src/@claude-flow/shared/dist/core/orchestrator/event-coordinator.js +101 -0
  117. package/src/@claude-flow/shared/dist/core/orchestrator/health-monitor.d.ts +60 -0
  118. package/src/@claude-flow/shared/dist/core/orchestrator/health-monitor.js +166 -0
  119. package/src/@claude-flow/shared/dist/core/orchestrator/index.d.ts +46 -0
  120. package/src/@claude-flow/shared/dist/core/orchestrator/index.js +64 -0
  121. package/src/@claude-flow/shared/dist/core/orchestrator/lifecycle-manager.d.ts +56 -0
  122. package/src/@claude-flow/shared/dist/core/orchestrator/lifecycle-manager.js +195 -0
  123. package/src/@claude-flow/shared/dist/core/orchestrator/session-manager.d.ts +83 -0
  124. package/src/@claude-flow/shared/dist/core/orchestrator/session-manager.js +193 -0
  125. package/src/@claude-flow/shared/dist/core/orchestrator/task-manager.d.ts +49 -0
  126. package/src/@claude-flow/shared/dist/core/orchestrator/task-manager.js +253 -0
  127. package/src/@claude-flow/shared/dist/events/domain-events.d.ts +282 -0
  128. package/src/@claude-flow/shared/dist/events/domain-events.js +165 -0
  129. package/src/@claude-flow/shared/dist/events/event-store.d.ts +126 -0
  130. package/src/@claude-flow/shared/dist/events/event-store.js +432 -0
  131. package/src/@claude-flow/shared/dist/events/event-store.test.d.ts +8 -0
  132. package/src/@claude-flow/shared/dist/events/event-store.test.js +297 -0
  133. package/src/@claude-flow/shared/dist/events/example-usage.d.ts +10 -0
  134. package/src/@claude-flow/shared/dist/events/example-usage.js +193 -0
  135. package/src/@claude-flow/shared/dist/events/index.d.ts +21 -0
  136. package/src/@claude-flow/shared/dist/events/index.js +22 -0
  137. package/src/@claude-flow/shared/dist/events/projections.d.ts +177 -0
  138. package/src/@claude-flow/shared/dist/events/projections.js +421 -0
  139. package/src/@claude-flow/shared/dist/events/rvf-event-log.d.ts +82 -0
  140. package/src/@claude-flow/shared/dist/events/rvf-event-log.js +340 -0
  141. package/src/@claude-flow/shared/dist/events/state-reconstructor.d.ts +101 -0
  142. package/src/@claude-flow/shared/dist/events/state-reconstructor.js +263 -0
  143. package/src/@claude-flow/shared/dist/events.d.ts +80 -0
  144. package/src/@claude-flow/shared/dist/events.js +249 -0
  145. package/src/@claude-flow/shared/dist/hooks/example-usage.d.ts +42 -0
  146. package/src/@claude-flow/shared/dist/hooks/example-usage.js +351 -0
  147. package/src/@claude-flow/shared/dist/hooks/executor.d.ts +100 -0
  148. package/src/@claude-flow/shared/dist/hooks/executor.js +267 -0
  149. package/src/@claude-flow/shared/dist/hooks/hooks.test.d.ts +9 -0
  150. package/src/@claude-flow/shared/dist/hooks/hooks.test.js +322 -0
  151. package/src/@claude-flow/shared/dist/hooks/index.d.ts +52 -0
  152. package/src/@claude-flow/shared/dist/hooks/index.js +51 -0
  153. package/src/@claude-flow/shared/dist/hooks/registry.d.ts +133 -0
  154. package/src/@claude-flow/shared/dist/hooks/registry.js +277 -0
  155. package/src/@claude-flow/shared/dist/hooks/safety/bash-safety.d.ts +105 -0
  156. package/src/@claude-flow/shared/dist/hooks/safety/bash-safety.js +481 -0
  157. package/src/@claude-flow/shared/dist/hooks/safety/file-organization.d.ts +144 -0
  158. package/src/@claude-flow/shared/dist/hooks/safety/file-organization.js +328 -0
  159. package/src/@claude-flow/shared/dist/hooks/safety/git-commit.d.ts +158 -0
  160. package/src/@claude-flow/shared/dist/hooks/safety/git-commit.js +450 -0
  161. package/src/@claude-flow/shared/dist/hooks/safety/index.d.ts +17 -0
  162. package/src/@claude-flow/shared/dist/hooks/safety/index.js +17 -0
  163. package/src/@claude-flow/shared/dist/hooks/session-hooks.d.ts +234 -0
  164. package/src/@claude-flow/shared/dist/hooks/session-hooks.js +334 -0
  165. package/src/@claude-flow/shared/dist/hooks/task-hooks.d.ts +163 -0
  166. package/src/@claude-flow/shared/dist/hooks/task-hooks.js +326 -0
  167. package/src/@claude-flow/shared/dist/hooks/types.d.ts +267 -0
  168. package/src/@claude-flow/shared/dist/hooks/types.js +62 -0
  169. package/src/@claude-flow/shared/dist/hooks/verify-exports.test.d.ts +9 -0
  170. package/src/@claude-flow/shared/dist/hooks/verify-exports.test.js +93 -0
  171. package/src/@claude-flow/shared/dist/index.d.ts +20 -0
  172. package/src/@claude-flow/shared/dist/index.js +50 -0
  173. package/src/@claude-flow/shared/dist/mcp/connection-pool.d.ts +98 -0
  174. package/src/@claude-flow/shared/dist/mcp/connection-pool.js +364 -0
  175. package/src/@claude-flow/shared/dist/mcp/index.d.ts +69 -0
  176. package/src/@claude-flow/shared/dist/mcp/index.js +84 -0
  177. package/src/@claude-flow/shared/dist/mcp/server.d.ts +166 -0
  178. package/src/@claude-flow/shared/dist/mcp/server.js +593 -0
  179. package/src/@claude-flow/shared/dist/mcp/session-manager.d.ts +136 -0
  180. package/src/@claude-flow/shared/dist/mcp/session-manager.js +335 -0
  181. package/src/@claude-flow/shared/dist/mcp/tool-registry.d.ts +178 -0
  182. package/src/@claude-flow/shared/dist/mcp/tool-registry.js +439 -0
  183. package/src/@claude-flow/shared/dist/mcp/transport/http.d.ts +104 -0
  184. package/src/@claude-flow/shared/dist/mcp/transport/http.js +476 -0
  185. package/src/@claude-flow/shared/dist/mcp/transport/index.d.ts +102 -0
  186. package/src/@claude-flow/shared/dist/mcp/transport/index.js +238 -0
  187. package/src/@claude-flow/shared/dist/mcp/transport/stdio.d.ts +104 -0
  188. package/src/@claude-flow/shared/dist/mcp/transport/stdio.js +263 -0
  189. package/src/@claude-flow/shared/dist/mcp/transport/websocket.d.ts +133 -0
  190. package/src/@claude-flow/shared/dist/mcp/transport/websocket.js +396 -0
  191. package/src/@claude-flow/shared/dist/mcp/types.d.ts +438 -0
  192. package/src/@claude-flow/shared/dist/mcp/types.js +54 -0
  193. package/src/@claude-flow/shared/dist/plugin-interface.d.ts +544 -0
  194. package/src/@claude-flow/shared/dist/plugin-interface.js +23 -0
  195. package/src/@claude-flow/shared/dist/plugin-loader.d.ts +139 -0
  196. package/src/@claude-flow/shared/dist/plugin-loader.js +434 -0
  197. package/src/@claude-flow/shared/dist/plugin-registry.d.ts +183 -0
  198. package/src/@claude-flow/shared/dist/plugin-registry.js +457 -0
  199. package/src/@claude-flow/shared/dist/plugins/index.d.ts +10 -0
  200. package/src/@claude-flow/shared/dist/plugins/index.js +10 -0
  201. package/src/@claude-flow/shared/dist/plugins/official/hive-mind-plugin.d.ts +106 -0
  202. package/src/@claude-flow/shared/dist/plugins/official/hive-mind-plugin.js +241 -0
  203. package/src/@claude-flow/shared/dist/plugins/official/index.d.ts +10 -0
  204. package/src/@claude-flow/shared/dist/plugins/official/index.js +10 -0
  205. package/src/@claude-flow/shared/dist/plugins/official/maestro-plugin.d.ts +121 -0
  206. package/src/@claude-flow/shared/dist/plugins/official/maestro-plugin.js +355 -0
  207. package/src/@claude-flow/shared/dist/plugins/types.d.ts +93 -0
  208. package/src/@claude-flow/shared/dist/plugins/types.js +9 -0
  209. package/src/@claude-flow/shared/dist/resilience/bulkhead.d.ts +105 -0
  210. package/src/@claude-flow/shared/dist/resilience/bulkhead.js +206 -0
  211. package/src/@claude-flow/shared/dist/resilience/circuit-breaker.d.ts +132 -0
  212. package/src/@claude-flow/shared/dist/resilience/circuit-breaker.js +233 -0
  213. package/src/@claude-flow/shared/dist/resilience/index.d.ts +19 -0
  214. package/src/@claude-flow/shared/dist/resilience/index.js +19 -0
  215. package/src/@claude-flow/shared/dist/resilience/rate-limiter.d.ts +168 -0
  216. package/src/@claude-flow/shared/dist/resilience/rate-limiter.js +314 -0
  217. package/src/@claude-flow/shared/dist/resilience/retry.d.ts +91 -0
  218. package/src/@claude-flow/shared/dist/resilience/retry.js +159 -0
  219. package/src/@claude-flow/shared/dist/security/index.d.ts +10 -0
  220. package/src/@claude-flow/shared/dist/security/index.js +12 -0
  221. package/src/@claude-flow/shared/dist/security/input-validation.d.ts +73 -0
  222. package/src/@claude-flow/shared/dist/security/input-validation.js +201 -0
  223. package/src/@claude-flow/shared/dist/security/secure-random.d.ts +92 -0
  224. package/src/@claude-flow/shared/dist/security/secure-random.js +142 -0
  225. package/src/@claude-flow/shared/dist/services/index.d.ts +7 -0
  226. package/src/@claude-flow/shared/dist/services/index.js +7 -0
  227. package/src/@claude-flow/shared/dist/services/v3-progress.service.d.ts +124 -0
  228. package/src/@claude-flow/shared/dist/services/v3-progress.service.js +402 -0
  229. package/src/@claude-flow/shared/dist/types/agent.types.d.ts +137 -0
  230. package/src/@claude-flow/shared/dist/types/agent.types.js +6 -0
  231. package/src/@claude-flow/shared/dist/types/index.d.ts +11 -0
  232. package/src/@claude-flow/shared/dist/types/index.js +17 -0
  233. package/src/@claude-flow/shared/dist/types/mcp.types.d.ts +266 -0
  234. package/src/@claude-flow/shared/dist/types/mcp.types.js +7 -0
  235. package/src/@claude-flow/shared/dist/types/memory.types.d.ts +236 -0
  236. package/src/@claude-flow/shared/dist/types/memory.types.js +7 -0
  237. package/src/@claude-flow/shared/dist/types/swarm.types.d.ts +186 -0
  238. package/src/@claude-flow/shared/dist/types/swarm.types.js +65 -0
  239. package/src/@claude-flow/shared/dist/types/task.types.d.ts +178 -0
  240. package/src/@claude-flow/shared/dist/types/task.types.js +32 -0
  241. package/src/@claude-flow/shared/dist/types.d.ts +197 -0
  242. package/src/@claude-flow/shared/dist/types.js +21 -0
  243. package/src/@claude-flow/shared/dist/utils/secure-logger.d.ts +69 -0
  244. package/src/@claude-flow/shared/dist/utils/secure-logger.js +208 -0
@@ -0,0 +1,355 @@
1
+ /**
2
+ * Maestro Plugin - Official Plugin (ADR-004)
3
+ *
4
+ * Implements orchestration patterns for complex multi-agent workflows.
5
+ * Part of the official plugin collection.
6
+ *
7
+ * @module v3/shared/plugins/official/maestro
8
+ */
9
+ import { HookEvent, HookPriority } from '../../hooks/index.js';
10
+ /**
11
+ * Maestro Plugin Implementation
12
+ */
13
+ export class MaestroPlugin {
14
+ id = 'maestro';
15
+ name = 'Maestro Workflow Orchestrator';
16
+ version = '1.0.0';
17
+ description = 'Complex multi-agent workflow orchestration with adaptive strategies';
18
+ context;
19
+ config;
20
+ workflows = new Map();
21
+ activeWorkflows = 0;
22
+ constructor(config) {
23
+ this.config = {
24
+ enabled: true,
25
+ orchestrationMode: 'adaptive',
26
+ maxConcurrentWorkflows: 5,
27
+ workflowTimeout: 600000, // 10 minutes
28
+ autoRecovery: true,
29
+ checkpointInterval: 30000, // 30 seconds
30
+ ...config,
31
+ };
32
+ }
33
+ async initialize(context) {
34
+ this.context = context;
35
+ // Register hooks for workflow monitoring
36
+ context.hooks?.register(HookEvent.PostTaskComplete, async (ctx) => {
37
+ // Update workflow progress on task completion
38
+ for (const workflow of this.workflows.values()) {
39
+ if (workflow.status === 'running' && ctx.task) {
40
+ this.updateWorkflowProgress(workflow, ctx.task);
41
+ }
42
+ }
43
+ return { success: true, continueChain: true };
44
+ }, HookPriority.High, { name: 'maestro-task-complete' });
45
+ context.hooks?.register(HookEvent.OnError, async (ctx) => {
46
+ // Handle workflow errors with recovery
47
+ if (this.config.autoRecovery && ctx.error) {
48
+ for (const workflow of this.workflows.values()) {
49
+ if (workflow.status === 'running') {
50
+ this.handleWorkflowError(workflow, ctx.error);
51
+ }
52
+ }
53
+ }
54
+ return { success: true, continueChain: true };
55
+ }, HookPriority.High, { name: 'maestro-error-handler' });
56
+ }
57
+ async shutdown() {
58
+ // Checkpoint all running workflows
59
+ for (const workflow of this.workflows.values()) {
60
+ if (workflow.status === 'running') {
61
+ this.checkpointWorkflow(workflow);
62
+ }
63
+ }
64
+ this.workflows.clear();
65
+ this.context = undefined;
66
+ }
67
+ // ============================================================================
68
+ // Workflow Management
69
+ // ============================================================================
70
+ /**
71
+ * Create a new workflow
72
+ */
73
+ createWorkflow(name, description, steps) {
74
+ const workflow = {
75
+ id: `workflow-${Date.now()}`,
76
+ name,
77
+ description,
78
+ steps: steps.map((step, index) => ({
79
+ ...step,
80
+ id: `step-${index}`,
81
+ status: 'pending',
82
+ })),
83
+ status: 'created',
84
+ progress: 0,
85
+ createdAt: new Date(),
86
+ checkpoints: new Map(),
87
+ };
88
+ this.workflows.set(workflow.id, workflow);
89
+ return workflow;
90
+ }
91
+ /**
92
+ * Execute a workflow
93
+ */
94
+ async executeWorkflow(workflowId) {
95
+ const workflow = this.workflows.get(workflowId);
96
+ if (!workflow) {
97
+ throw new Error(`Workflow not found: ${workflowId}`);
98
+ }
99
+ if (this.activeWorkflows >= this.config.maxConcurrentWorkflows) {
100
+ throw new Error('Maximum concurrent workflows reached');
101
+ }
102
+ const startTime = Date.now();
103
+ workflow.status = 'running';
104
+ workflow.startedAt = new Date();
105
+ this.activeWorkflows++;
106
+ const errors = [];
107
+ const outputs = {};
108
+ try {
109
+ switch (this.config.orchestrationMode) {
110
+ case 'sequential':
111
+ await this.executeSequential(workflow, outputs, errors);
112
+ break;
113
+ case 'parallel':
114
+ await this.executeParallel(workflow, outputs, errors);
115
+ break;
116
+ case 'adaptive':
117
+ await this.executeAdaptive(workflow, outputs, errors);
118
+ break;
119
+ }
120
+ workflow.status = errors.length === 0 ? 'completed' : 'failed';
121
+ workflow.completedAt = new Date();
122
+ }
123
+ catch (error) {
124
+ workflow.status = 'failed';
125
+ errors.push({
126
+ stepId: 'workflow',
127
+ error: error instanceof Error ? error.message : String(error),
128
+ });
129
+ }
130
+ finally {
131
+ this.activeWorkflows--;
132
+ }
133
+ return {
134
+ workflowId,
135
+ success: workflow.status === 'completed',
136
+ stepsCompleted: workflow.steps.filter((s) => s.status === 'completed').length,
137
+ stepsTotal: workflow.steps.length,
138
+ outputs,
139
+ errors,
140
+ duration: Date.now() - startTime,
141
+ };
142
+ }
143
+ /**
144
+ * Pause a workflow
145
+ */
146
+ pauseWorkflow(workflowId) {
147
+ const workflow = this.workflows.get(workflowId);
148
+ if (!workflow || workflow.status !== 'running')
149
+ return false;
150
+ this.checkpointWorkflow(workflow);
151
+ workflow.status = 'paused';
152
+ return true;
153
+ }
154
+ /**
155
+ * Resume a paused workflow
156
+ */
157
+ async resumeWorkflow(workflowId) {
158
+ const workflow = this.workflows.get(workflowId);
159
+ if (!workflow || workflow.status !== 'paused') {
160
+ throw new Error('Workflow cannot be resumed');
161
+ }
162
+ // Restore from checkpoint and continue
163
+ return this.executeWorkflow(workflowId);
164
+ }
165
+ /**
166
+ * Get workflow status
167
+ */
168
+ getWorkflow(workflowId) {
169
+ return this.workflows.get(workflowId);
170
+ }
171
+ /**
172
+ * List all workflows
173
+ */
174
+ listWorkflows() {
175
+ return Array.from(this.workflows.values());
176
+ }
177
+ // ============================================================================
178
+ // Execution Strategies
179
+ // ============================================================================
180
+ async executeSequential(workflow, outputs, errors) {
181
+ for (const step of workflow.steps) {
182
+ if (step.status !== 'pending')
183
+ continue;
184
+ // Check dependencies
185
+ const depsComplete = step.dependencies.every((depId) => {
186
+ const dep = workflow.steps.find((s) => s.id === depId);
187
+ return dep?.status === 'completed';
188
+ });
189
+ if (!depsComplete) {
190
+ step.status = 'skipped';
191
+ continue;
192
+ }
193
+ workflow.currentStep = step.id;
194
+ const result = await this.executeStep(step, outputs);
195
+ if (!result.success) {
196
+ errors.push({ stepId: step.id, error: result.error ?? 'Unknown error' });
197
+ break;
198
+ }
199
+ outputs[step.id] = result.output;
200
+ this.updateProgress(workflow);
201
+ }
202
+ }
203
+ async executeParallel(workflow, outputs, errors) {
204
+ const layers = this.buildExecutionLayers(workflow.steps);
205
+ for (const layer of layers) {
206
+ const results = await Promise.all(layer.map((step) => this.executeStep(step, outputs)));
207
+ for (let i = 0; i < results.length; i++) {
208
+ const result = results[i];
209
+ const step = layer[i];
210
+ if (!result.success) {
211
+ errors.push({ stepId: step.id, error: result.error ?? 'Unknown error' });
212
+ }
213
+ else {
214
+ outputs[step.id] = result.output;
215
+ }
216
+ }
217
+ this.updateProgress(workflow);
218
+ }
219
+ }
220
+ async executeAdaptive(workflow, outputs, errors) {
221
+ // Adaptive: start parallel, switch to sequential on errors
222
+ const completedIds = new Set();
223
+ const pendingSteps = [...workflow.steps];
224
+ let consecutiveErrors = 0;
225
+ const maxConsecutiveErrors = 2;
226
+ while (pendingSteps.length > 0) {
227
+ // Find steps that can run (all dependencies complete)
228
+ const runnableSteps = pendingSteps.filter((step) => step.dependencies.every((depId) => completedIds.has(depId)));
229
+ if (runnableSteps.length === 0) {
230
+ // No runnable steps but pending remain - circular dependency
231
+ for (const step of pendingSteps) {
232
+ step.status = 'skipped';
233
+ }
234
+ break;
235
+ }
236
+ // Decide batch size based on error rate
237
+ const batchSize = consecutiveErrors >= maxConsecutiveErrors ? 1 : runnableSteps.length;
238
+ const batch = runnableSteps.slice(0, batchSize);
239
+ const results = await Promise.all(batch.map((step) => this.executeStep(step, outputs)));
240
+ for (let i = 0; i < results.length; i++) {
241
+ const result = results[i];
242
+ const step = batch[i];
243
+ const stepIndex = pendingSteps.indexOf(step);
244
+ if (stepIndex > -1) {
245
+ pendingSteps.splice(stepIndex, 1);
246
+ }
247
+ if (!result.success) {
248
+ errors.push({ stepId: step.id, error: result.error ?? 'Unknown error' });
249
+ consecutiveErrors++;
250
+ }
251
+ else {
252
+ outputs[step.id] = result.output;
253
+ completedIds.add(step.id);
254
+ consecutiveErrors = 0;
255
+ }
256
+ }
257
+ this.updateProgress(workflow);
258
+ }
259
+ }
260
+ // ============================================================================
261
+ // Helpers
262
+ // ============================================================================
263
+ async executeStep(step, outputs) {
264
+ step.status = 'running';
265
+ step.startedAt = new Date();
266
+ try {
267
+ // Resolve input references from previous outputs
268
+ const resolvedInput = this.resolveInputReferences(step.input, outputs);
269
+ // Execute step processing with minimal overhead
270
+ // Actual task execution delegated to agents via MCP integration
271
+ await new Promise((resolve) => setTimeout(resolve, 10));
272
+ step.output = { ...resolvedInput, processed: true };
273
+ step.status = 'completed';
274
+ step.completedAt = new Date();
275
+ return { success: true, output: step.output };
276
+ }
277
+ catch (error) {
278
+ step.status = 'failed';
279
+ step.error = error instanceof Error ? error.message : String(error);
280
+ step.completedAt = new Date();
281
+ return { success: false, error: step.error };
282
+ }
283
+ }
284
+ buildExecutionLayers(steps) {
285
+ const layers = [];
286
+ const completed = new Set();
287
+ while (completed.size < steps.length) {
288
+ const layer = [];
289
+ for (const step of steps) {
290
+ if (completed.has(step.id))
291
+ continue;
292
+ const depsComplete = step.dependencies.every((depId) => completed.has(depId));
293
+ if (depsComplete) {
294
+ layer.push(step);
295
+ }
296
+ }
297
+ if (layer.length === 0)
298
+ break; // No more runnable steps
299
+ layers.push(layer);
300
+ layer.forEach((step) => completed.add(step.id));
301
+ }
302
+ return layers;
303
+ }
304
+ resolveInputReferences(input, outputs) {
305
+ const resolved = {};
306
+ for (const [key, value] of Object.entries(input)) {
307
+ if (typeof value === 'string' && value.startsWith('$')) {
308
+ const ref = value.slice(1);
309
+ resolved[key] = outputs[ref];
310
+ }
311
+ else {
312
+ resolved[key] = value;
313
+ }
314
+ }
315
+ return resolved;
316
+ }
317
+ updateProgress(workflow) {
318
+ const completed = workflow.steps.filter((s) => s.status === 'completed').length;
319
+ workflow.progress = (completed / workflow.steps.length) * 100;
320
+ }
321
+ updateWorkflowProgress(workflow, taskData) {
322
+ // Match task to workflow step and update
323
+ const taskId = taskData.id;
324
+ const step = workflow.steps.find((s) => s.id === taskId);
325
+ if (step && step.status === 'running') {
326
+ step.status = 'completed';
327
+ step.output = taskData.metadata;
328
+ step.completedAt = new Date();
329
+ this.updateProgress(workflow);
330
+ }
331
+ }
332
+ handleWorkflowError(workflow, errorData) {
333
+ const stepId = errorData.context ?? '';
334
+ const step = workflow.steps.find((s) => s.id === stepId);
335
+ if (step && step.status === 'running') {
336
+ step.status = 'failed';
337
+ step.error = errorData.error?.message ?? 'Unknown error';
338
+ step.completedAt = new Date();
339
+ }
340
+ }
341
+ checkpointWorkflow(workflow) {
342
+ workflow.checkpoints.set(`checkpoint-${Date.now()}`, {
343
+ progress: workflow.progress,
344
+ currentStep: workflow.currentStep,
345
+ stepStatuses: workflow.steps.map((s) => ({ id: s.id, status: s.status })),
346
+ });
347
+ }
348
+ }
349
+ /**
350
+ * Factory function
351
+ */
352
+ export function createMaestroPlugin(config) {
353
+ return new MaestroPlugin(config);
354
+ }
355
+ //# sourceMappingURL=maestro-plugin.js.map
@@ -0,0 +1,93 @@
1
+ /**
2
+ * Plugin Types - ADR-004 Implementation
3
+ *
4
+ * Type definitions for the plugin system.
5
+ *
6
+ * @module v3/shared/plugins/types
7
+ */
8
+ import type { HookRegistry } from '../hooks/index.js';
9
+ /**
10
+ * Plugin configuration base
11
+ */
12
+ export interface PluginConfig {
13
+ enabled: boolean;
14
+ [key: string]: unknown;
15
+ }
16
+ /**
17
+ * Plugin context provided during initialization
18
+ */
19
+ export interface PluginContext {
20
+ hooks?: HookRegistry;
21
+ services?: Record<string, unknown>;
22
+ config?: Record<string, unknown>;
23
+ }
24
+ /**
25
+ * Plugin lifecycle events
26
+ */
27
+ export type PluginEvent = 'initialized' | 'shutdown' | 'error';
28
+ /**
29
+ * Plugin event handler
30
+ */
31
+ export type PluginEventHandler = (event: PluginEvent, data?: unknown) => void;
32
+ /**
33
+ * Claude Flow Plugin Interface
34
+ *
35
+ * All plugins must implement this interface.
36
+ */
37
+ export interface ClaudeFlowPlugin {
38
+ /** Unique plugin identifier */
39
+ readonly id: string;
40
+ /** Human-readable name */
41
+ readonly name: string;
42
+ /** Plugin version */
43
+ readonly version: string;
44
+ /** Plugin description */
45
+ readonly description: string;
46
+ /** Dependencies on other plugins */
47
+ readonly dependencies?: string[];
48
+ /**
49
+ * Initialize the plugin
50
+ * @param context Plugin context with hooks and services
51
+ */
52
+ initialize(context: PluginContext): Promise<void>;
53
+ /**
54
+ * Shutdown the plugin
55
+ */
56
+ shutdown(): Promise<void>;
57
+ /**
58
+ * Optional event handler
59
+ */
60
+ onEvent?: PluginEventHandler;
61
+ }
62
+ /**
63
+ * Plugin metadata
64
+ */
65
+ export interface PluginMetadata {
66
+ id: string;
67
+ name: string;
68
+ version: string;
69
+ description: string;
70
+ author?: string;
71
+ license?: string;
72
+ homepage?: string;
73
+ dependencies?: string[];
74
+ }
75
+ /**
76
+ * Plugin registry
77
+ */
78
+ export interface IPluginRegistry {
79
+ register(plugin: ClaudeFlowPlugin): void;
80
+ unregister(pluginId: string): void;
81
+ get(pluginId: string): ClaudeFlowPlugin | undefined;
82
+ getAll(): ClaudeFlowPlugin[];
83
+ isRegistered(pluginId: string): boolean;
84
+ }
85
+ /**
86
+ * Plugin loader interface
87
+ */
88
+ export interface IPluginLoader {
89
+ loadFromPath(path: string): Promise<ClaudeFlowPlugin>;
90
+ loadFromPackage(packageName: string): Promise<ClaudeFlowPlugin>;
91
+ loadBuiltin(pluginId: string): Promise<ClaudeFlowPlugin>;
92
+ }
93
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1,9 @@
1
+ /**
2
+ * Plugin Types - ADR-004 Implementation
3
+ *
4
+ * Type definitions for the plugin system.
5
+ *
6
+ * @module v3/shared/plugins/types
7
+ */
8
+ export {};
9
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1,105 @@
1
+ /**
2
+ * Bulkhead Pattern
3
+ *
4
+ * Isolates failures by limiting concurrent executions.
5
+ *
6
+ * @module v3/shared/resilience/bulkhead
7
+ */
8
+ import { EventEmitter } from 'events';
9
+ /**
10
+ * Bulkhead options
11
+ */
12
+ export interface BulkheadOptions {
13
+ /** Name for identification */
14
+ name: string;
15
+ /** Maximum concurrent executions */
16
+ maxConcurrent: number;
17
+ /** Maximum queue size */
18
+ maxQueue: number;
19
+ /** Timeout for queued items in ms */
20
+ queueTimeout: number;
21
+ /** Callback when rejected */
22
+ onRejected?: (reason: 'full' | 'timeout') => void;
23
+ }
24
+ /**
25
+ * Bulkhead statistics
26
+ */
27
+ export interface BulkheadStats {
28
+ active: number;
29
+ queued: number;
30
+ maxConcurrent: number;
31
+ maxQueue: number;
32
+ completed: number;
33
+ rejected: number;
34
+ timedOut: number;
35
+ }
36
+ /**
37
+ * Bulkhead
38
+ *
39
+ * Limits concurrent executions to prevent resource exhaustion.
40
+ *
41
+ * @example
42
+ * const bulkhead = new Bulkhead({
43
+ * name: 'database',
44
+ * maxConcurrent: 10,
45
+ * maxQueue: 50,
46
+ * });
47
+ *
48
+ * try {
49
+ * const result = await bulkhead.execute(() => dbQuery());
50
+ * } catch (error) {
51
+ * if (error.message.includes('Bulkhead full')) {
52
+ * // Handle capacity exceeded
53
+ * }
54
+ * }
55
+ */
56
+ export declare class Bulkhead extends EventEmitter {
57
+ private readonly options;
58
+ private active;
59
+ private readonly queue;
60
+ private completed;
61
+ private rejected;
62
+ private timedOut;
63
+ constructor(options: BulkheadOptions);
64
+ /**
65
+ * Execute a function within the bulkhead
66
+ */
67
+ execute<T>(fn: () => Promise<T>): Promise<T>;
68
+ /**
69
+ * Get current statistics
70
+ */
71
+ getStats(): BulkheadStats;
72
+ /**
73
+ * Check if there's capacity available
74
+ */
75
+ hasCapacity(): boolean;
76
+ /**
77
+ * Get available capacity (concurrent + queue)
78
+ */
79
+ availableCapacity(): number;
80
+ /**
81
+ * Reset statistics
82
+ */
83
+ resetStats(): void;
84
+ /**
85
+ * Run function immediately
86
+ */
87
+ private runNow;
88
+ /**
89
+ * Add function to queue
90
+ */
91
+ private addToQueue;
92
+ /**
93
+ * Process next item in queue
94
+ */
95
+ private processQueue;
96
+ }
97
+ /**
98
+ * Create a semaphore for limiting concurrent access
99
+ */
100
+ export declare function createSemaphore(maxConcurrent: number): {
101
+ acquire: () => Promise<void>;
102
+ release: () => void;
103
+ available: () => number;
104
+ };
105
+ //# sourceMappingURL=bulkhead.d.ts.map