@claude-flow/swarm 3.0.0-alpha.1

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 (190) hide show
  1. package/.agentic-flow/intelligence.json +16 -0
  2. package/MIGRATION.md +472 -0
  3. package/README.md +634 -0
  4. package/__tests__/consensus.test.ts +577 -0
  5. package/__tests__/coordinator.test.ts +501 -0
  6. package/__tests__/queen-coordinator.test.ts +1335 -0
  7. package/__tests__/topology.test.ts +621 -0
  8. package/dist/agent-pool.d.ts +52 -0
  9. package/dist/agent-pool.d.ts.map +1 -0
  10. package/dist/agent-pool.js +365 -0
  11. package/dist/agent-pool.js.map +1 -0
  12. package/dist/application/commands/create-task.command.d.ts +64 -0
  13. package/dist/application/commands/create-task.command.d.ts.map +1 -0
  14. package/dist/application/commands/create-task.command.js +77 -0
  15. package/dist/application/commands/create-task.command.js.map +1 -0
  16. package/dist/application/commands/spawn-agent.command.d.ts +63 -0
  17. package/dist/application/commands/spawn-agent.command.d.ts.map +1 -0
  18. package/dist/application/commands/spawn-agent.command.js +74 -0
  19. package/dist/application/commands/spawn-agent.command.js.map +1 -0
  20. package/dist/application/index.d.ts +9 -0
  21. package/dist/application/index.d.ts.map +1 -0
  22. package/dist/application/index.js +11 -0
  23. package/dist/application/index.js.map +1 -0
  24. package/dist/application/services/swarm-application-service.d.ts +112 -0
  25. package/dist/application/services/swarm-application-service.d.ts.map +1 -0
  26. package/dist/application/services/swarm-application-service.js +153 -0
  27. package/dist/application/services/swarm-application-service.js.map +1 -0
  28. package/dist/attention-coordinator.d.ts +212 -0
  29. package/dist/attention-coordinator.d.ts.map +1 -0
  30. package/dist/attention-coordinator.js +667 -0
  31. package/dist/attention-coordinator.js.map +1 -0
  32. package/dist/consensus/byzantine.d.ts +63 -0
  33. package/dist/consensus/byzantine.d.ts.map +1 -0
  34. package/dist/consensus/byzantine.js +316 -0
  35. package/dist/consensus/byzantine.js.map +1 -0
  36. package/dist/consensus/gossip.d.ts +69 -0
  37. package/dist/consensus/gossip.d.ts.map +1 -0
  38. package/dist/consensus/gossip.js +378 -0
  39. package/dist/consensus/gossip.js.map +1 -0
  40. package/dist/consensus/index.d.ts +49 -0
  41. package/dist/consensus/index.d.ts.map +1 -0
  42. package/dist/consensus/index.js +203 -0
  43. package/dist/consensus/index.js.map +1 -0
  44. package/dist/consensus/raft.d.ts +62 -0
  45. package/dist/consensus/raft.d.ts.map +1 -0
  46. package/dist/consensus/raft.js +324 -0
  47. package/dist/consensus/raft.js.map +1 -0
  48. package/dist/coordination/agent-registry.d.ts +68 -0
  49. package/dist/coordination/agent-registry.d.ts.map +1 -0
  50. package/dist/coordination/agent-registry.js +412 -0
  51. package/dist/coordination/agent-registry.js.map +1 -0
  52. package/dist/coordination/index.d.ts +8 -0
  53. package/dist/coordination/index.d.ts.map +1 -0
  54. package/dist/coordination/index.js +8 -0
  55. package/dist/coordination/index.js.map +1 -0
  56. package/dist/coordination/swarm-hub.d.ts +150 -0
  57. package/dist/coordination/swarm-hub.d.ts.map +1 -0
  58. package/dist/coordination/swarm-hub.js +617 -0
  59. package/dist/coordination/swarm-hub.js.map +1 -0
  60. package/dist/coordination/task-orchestrator.d.ts +96 -0
  61. package/dist/coordination/task-orchestrator.d.ts.map +1 -0
  62. package/dist/coordination/task-orchestrator.js +412 -0
  63. package/dist/coordination/task-orchestrator.js.map +1 -0
  64. package/dist/domain/entities/agent.d.ts +151 -0
  65. package/dist/domain/entities/agent.d.ts.map +1 -0
  66. package/dist/domain/entities/agent.js +280 -0
  67. package/dist/domain/entities/agent.js.map +1 -0
  68. package/dist/domain/entities/task.d.ts +133 -0
  69. package/dist/domain/entities/task.d.ts.map +1 -0
  70. package/dist/domain/entities/task.js +261 -0
  71. package/dist/domain/entities/task.js.map +1 -0
  72. package/dist/domain/index.d.ts +11 -0
  73. package/dist/domain/index.d.ts.map +1 -0
  74. package/dist/domain/index.js +11 -0
  75. package/dist/domain/index.js.map +1 -0
  76. package/dist/domain/repositories/agent-repository.interface.d.ts +57 -0
  77. package/dist/domain/repositories/agent-repository.interface.d.ts.map +1 -0
  78. package/dist/domain/repositories/agent-repository.interface.js +9 -0
  79. package/dist/domain/repositories/agent-repository.interface.js.map +1 -0
  80. package/dist/domain/repositories/task-repository.interface.d.ts +61 -0
  81. package/dist/domain/repositories/task-repository.interface.d.ts.map +1 -0
  82. package/dist/domain/repositories/task-repository.interface.js +9 -0
  83. package/dist/domain/repositories/task-repository.interface.js.map +1 -0
  84. package/dist/domain/services/coordination-service.d.ts +84 -0
  85. package/dist/domain/services/coordination-service.d.ts.map +1 -0
  86. package/dist/domain/services/coordination-service.js +231 -0
  87. package/dist/domain/services/coordination-service.js.map +1 -0
  88. package/dist/federation-hub.d.ts +284 -0
  89. package/dist/federation-hub.d.ts.map +1 -0
  90. package/dist/federation-hub.js +692 -0
  91. package/dist/federation-hub.js.map +1 -0
  92. package/dist/index.d.ts +107 -0
  93. package/dist/index.d.ts.map +1 -0
  94. package/dist/index.js +142 -0
  95. package/dist/index.js.map +1 -0
  96. package/dist/message-bus.d.ts +48 -0
  97. package/dist/message-bus.d.ts.map +1 -0
  98. package/dist/message-bus.js +499 -0
  99. package/dist/message-bus.js.map +1 -0
  100. package/dist/queen-coordinator.d.ts +576 -0
  101. package/dist/queen-coordinator.d.ts.map +1 -0
  102. package/dist/queen-coordinator.js +1307 -0
  103. package/dist/queen-coordinator.js.map +1 -0
  104. package/dist/shared/events.d.ts +63 -0
  105. package/dist/shared/events.d.ts.map +1 -0
  106. package/dist/shared/events.js +203 -0
  107. package/dist/shared/events.js.map +1 -0
  108. package/dist/shared/types.d.ts +212 -0
  109. package/dist/shared/types.d.ts.map +1 -0
  110. package/dist/shared/types.js +22 -0
  111. package/dist/shared/types.js.map +1 -0
  112. package/dist/topology-manager.d.ts +62 -0
  113. package/dist/topology-manager.d.ts.map +1 -0
  114. package/dist/topology-manager.js +538 -0
  115. package/dist/topology-manager.js.map +1 -0
  116. package/dist/types.d.ts +353 -0
  117. package/dist/types.d.ts.map +1 -0
  118. package/dist/types.js +43 -0
  119. package/dist/types.js.map +1 -0
  120. package/dist/unified-coordinator.d.ts +260 -0
  121. package/dist/unified-coordinator.d.ts.map +1 -0
  122. package/dist/unified-coordinator.js +1460 -0
  123. package/dist/unified-coordinator.js.map +1 -0
  124. package/dist/workers/index.d.ts +29 -0
  125. package/dist/workers/index.d.ts.map +1 -0
  126. package/dist/workers/index.js +49 -0
  127. package/dist/workers/index.js.map +1 -0
  128. package/dist/workers/worker-dispatch.d.ts +234 -0
  129. package/dist/workers/worker-dispatch.d.ts.map +1 -0
  130. package/dist/workers/worker-dispatch.js +842 -0
  131. package/dist/workers/worker-dispatch.js.map +1 -0
  132. package/package.json +33 -0
  133. package/src/agent-pool.ts +476 -0
  134. package/src/application/commands/create-task.command.ts +124 -0
  135. package/src/application/commands/spawn-agent.command.ts +122 -0
  136. package/src/application/index.ts +30 -0
  137. package/src/application/services/swarm-application-service.ts +200 -0
  138. package/src/attention-coordinator.ts +1000 -0
  139. package/src/consensus/byzantine.ts +431 -0
  140. package/src/consensus/gossip.ts +513 -0
  141. package/src/consensus/index.ts +267 -0
  142. package/src/consensus/raft.ts +443 -0
  143. package/src/coordination/agent-registry.ts +544 -0
  144. package/src/coordination/index.ts +23 -0
  145. package/src/coordination/swarm-hub.ts +776 -0
  146. package/src/coordination/task-orchestrator.ts +605 -0
  147. package/src/domain/entities/agent.d.ts +151 -0
  148. package/src/domain/entities/agent.d.ts.map +1 -0
  149. package/src/domain/entities/agent.js +280 -0
  150. package/src/domain/entities/agent.js.map +1 -0
  151. package/src/domain/entities/agent.ts +370 -0
  152. package/src/domain/entities/task.d.ts +133 -0
  153. package/src/domain/entities/task.d.ts.map +1 -0
  154. package/src/domain/entities/task.js +261 -0
  155. package/src/domain/entities/task.js.map +1 -0
  156. package/src/domain/entities/task.ts +319 -0
  157. package/src/domain/index.ts +41 -0
  158. package/src/domain/repositories/agent-repository.interface.d.ts +57 -0
  159. package/src/domain/repositories/agent-repository.interface.d.ts.map +1 -0
  160. package/src/domain/repositories/agent-repository.interface.js +9 -0
  161. package/src/domain/repositories/agent-repository.interface.js.map +1 -0
  162. package/src/domain/repositories/agent-repository.interface.ts +69 -0
  163. package/src/domain/repositories/task-repository.interface.d.ts +61 -0
  164. package/src/domain/repositories/task-repository.interface.d.ts.map +1 -0
  165. package/src/domain/repositories/task-repository.interface.js +9 -0
  166. package/src/domain/repositories/task-repository.interface.js.map +1 -0
  167. package/src/domain/repositories/task-repository.interface.ts +75 -0
  168. package/src/domain/services/coordination-service.ts +320 -0
  169. package/src/federation-hub.d.ts +284 -0
  170. package/src/federation-hub.d.ts.map +1 -0
  171. package/src/federation-hub.js +692 -0
  172. package/src/federation-hub.js.map +1 -0
  173. package/src/federation-hub.ts +979 -0
  174. package/src/index.ts +348 -0
  175. package/src/message-bus.ts +607 -0
  176. package/src/queen-coordinator.ts +2024 -0
  177. package/src/shared/events.ts +285 -0
  178. package/src/shared/types.ts +389 -0
  179. package/src/topology-manager.ts +656 -0
  180. package/src/types.ts +545 -0
  181. package/src/unified-coordinator.ts +1844 -0
  182. package/src/workers/index.ts +65 -0
  183. package/src/workers/worker-dispatch.d.ts +234 -0
  184. package/src/workers/worker-dispatch.d.ts.map +1 -0
  185. package/src/workers/worker-dispatch.js +842 -0
  186. package/src/workers/worker-dispatch.js.map +1 -0
  187. package/src/workers/worker-dispatch.ts +1072 -0
  188. package/tsconfig.json +9 -0
  189. package/tsconfig.tsbuildinfo +1 -0
  190. package/vitest.config.ts +20 -0
@@ -0,0 +1,96 @@
1
+ /**
2
+ * V3 Task Orchestrator
3
+ * Manages task decomposition, dependency resolution, and parallel execution
4
+ *
5
+ * Based on ADR-003 (Single Coordination Engine) and ADR-001 (agentic-flow integration)
6
+ */
7
+ import { TaskId, TaskType, TaskStatus, TaskPriority, TaskDefinition, TaskResult, AgentId, AgentDomain, PhaseId } from '../shared/types';
8
+ import { IEventBus } from '../shared/events';
9
+ import { IAgentRegistry } from './agent-registry';
10
+ export interface ITaskOrchestrator {
11
+ createTask(spec: TaskSpec): TaskDefinition;
12
+ createBatchTasks(specs: TaskSpec[]): TaskDefinition[];
13
+ queueTask(taskId: TaskId): void;
14
+ assignTask(taskId: TaskId, agentId: AgentId): void;
15
+ startTask(taskId: TaskId): void;
16
+ completeTask(taskId: TaskId, result: TaskResult): void;
17
+ failTask(taskId: TaskId, error: Error): void;
18
+ cancelTask(taskId: TaskId): void;
19
+ addDependency(taskId: TaskId, dependsOn: TaskId): void;
20
+ removeDependency(taskId: TaskId, dependsOn: TaskId): void;
21
+ getDependencies(taskId: TaskId): TaskId[];
22
+ getDependents(taskId: TaskId): TaskId[];
23
+ isBlocked(taskId: TaskId): boolean;
24
+ getBlockingTasks(taskId: TaskId): TaskId[];
25
+ getTask(taskId: TaskId): TaskDefinition | undefined;
26
+ getAllTasks(): TaskDefinition[];
27
+ getTasksByStatus(status: TaskStatus): TaskDefinition[];
28
+ getTasksByAgent(agentId: AgentId): TaskDefinition[];
29
+ getTasksByDomain(domain: AgentDomain): TaskDefinition[];
30
+ getTasksByPhase(phase: PhaseId): TaskDefinition[];
31
+ getNextTask(agentId?: AgentId): TaskDefinition | undefined;
32
+ getPriorityQueue(): TaskDefinition[];
33
+ getTaskMetrics(): TaskOrchestratorMetrics;
34
+ }
35
+ export interface TaskSpec {
36
+ type: TaskType;
37
+ title: string;
38
+ description: string;
39
+ priority?: TaskPriority;
40
+ dependencies?: TaskId[];
41
+ domain: AgentDomain;
42
+ phase: PhaseId;
43
+ estimatedDuration?: number;
44
+ tags?: string[];
45
+ }
46
+ export interface TaskOrchestratorMetrics {
47
+ totalTasks: number;
48
+ tasksByStatus: Record<TaskStatus, number>;
49
+ tasksByPriority: Record<TaskPriority, number>;
50
+ tasksByDomain: Record<AgentDomain, number>;
51
+ averageQueueTime: number;
52
+ averageExecutionTime: number;
53
+ throughput: number;
54
+ }
55
+ export declare class TaskOrchestrator implements ITaskOrchestrator {
56
+ private tasks;
57
+ private dependencyGraph;
58
+ private dependentGraph;
59
+ private taskCounter;
60
+ private eventBus;
61
+ private agentRegistry;
62
+ constructor(eventBus: IEventBus, agentRegistry: IAgentRegistry);
63
+ createTask(spec: TaskSpec): TaskDefinition;
64
+ createBatchTasks(specs: TaskSpec[]): TaskDefinition[];
65
+ queueTask(taskId: TaskId): void;
66
+ assignTask(taskId: TaskId, agentId: AgentId): void;
67
+ startTask(taskId: TaskId): void;
68
+ completeTask(taskId: TaskId, result: TaskResult): void;
69
+ failTask(taskId: TaskId, error: Error): void;
70
+ cancelTask(taskId: TaskId): void;
71
+ addDependency(taskId: TaskId, dependsOn: TaskId): void;
72
+ removeDependency(taskId: TaskId, dependsOn: TaskId): void;
73
+ getDependencies(taskId: TaskId): TaskId[];
74
+ getDependents(taskId: TaskId): TaskId[];
75
+ isBlocked(taskId: TaskId): boolean;
76
+ getBlockingTasks(taskId: TaskId): TaskId[];
77
+ getTask(taskId: TaskId): TaskDefinition | undefined;
78
+ getAllTasks(): TaskDefinition[];
79
+ getTasksByStatus(status: TaskStatus): TaskDefinition[];
80
+ getTasksByAgent(agentId: AgentId): TaskDefinition[];
81
+ getTasksByDomain(domain: AgentDomain): TaskDefinition[];
82
+ getTasksByPhase(phase: PhaseId): TaskDefinition[];
83
+ getNextTask(agentId?: AgentId): TaskDefinition | undefined;
84
+ getPriorityQueue(): TaskDefinition[];
85
+ getTaskMetrics(): TaskOrchestratorMetrics;
86
+ private getTaskOrThrow;
87
+ private updateTaskStatus;
88
+ private updateBlockedStatus;
89
+ private unblockDependentTasks;
90
+ private wouldCreateCycle;
91
+ private handleAgentTaskCompleted;
92
+ private createDefaultMetrics;
93
+ private getQueuePosition;
94
+ }
95
+ export declare function createTaskOrchestrator(eventBus: IEventBus, agentRegistry: IAgentRegistry): ITaskOrchestrator;
96
+ //# sourceMappingURL=task-orchestrator.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"task-orchestrator.d.ts","sourceRoot":"","sources":["../../src/coordination/task-orchestrator.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EACL,MAAM,EACN,QAAQ,EACR,UAAU,EACV,YAAY,EACZ,cAAc,EAEd,UAAU,EAEV,OAAO,EACP,WAAW,EACX,OAAO,EAER,MAAM,iBAAiB,CAAC;AACzB,OAAO,EACL,SAAS,EAQV,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAMlD,MAAM,WAAW,iBAAiB;IAEhC,UAAU,CAAC,IAAI,EAAE,QAAQ,GAAG,cAAc,CAAC;IAC3C,gBAAgB,CAAC,KAAK,EAAE,QAAQ,EAAE,GAAG,cAAc,EAAE,CAAC;IAGtD,SAAS,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IAChC,UAAU,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,GAAG,IAAI,CAAC;IACnD,SAAS,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IAChC,YAAY,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,UAAU,GAAG,IAAI,CAAC;IACvD,QAAQ,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,GAAG,IAAI,CAAC;IAC7C,UAAU,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IAGjC,aAAa,CAAC,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACvD,gBAAgB,CAAC,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1D,eAAe,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC;IAC1C,aAAa,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC;IACxC,SAAS,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC;IACnC,gBAAgB,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC;IAG3C,OAAO,CAAC,MAAM,EAAE,MAAM,GAAG,cAAc,GAAG,SAAS,CAAC;IACpD,WAAW,IAAI,cAAc,EAAE,CAAC;IAChC,gBAAgB,CAAC,MAAM,EAAE,UAAU,GAAG,cAAc,EAAE,CAAC;IACvD,eAAe,CAAC,OAAO,EAAE,OAAO,GAAG,cAAc,EAAE,CAAC;IACpD,gBAAgB,CAAC,MAAM,EAAE,WAAW,GAAG,cAAc,EAAE,CAAC;IACxD,eAAe,CAAC,KAAK,EAAE,OAAO,GAAG,cAAc,EAAE,CAAC;IAGlD,WAAW,CAAC,OAAO,CAAC,EAAE,OAAO,GAAG,cAAc,GAAG,SAAS,CAAC;IAC3D,gBAAgB,IAAI,cAAc,EAAE,CAAC;IAGrC,cAAc,IAAI,uBAAuB,CAAC;CAC3C;AAED,MAAM,WAAW,QAAQ;IACvB,IAAI,EAAE,QAAQ,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,EAAE,YAAY,CAAC;IACxB,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;IACxB,MAAM,EAAE,WAAW,CAAC;IACpB,KAAK,EAAE,OAAO,CAAC;IACf,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;CACjB;AAED,MAAM,WAAW,uBAAuB;IACtC,UAAU,EAAE,MAAM,CAAC;IACnB,aAAa,EAAE,MAAM,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC;IAC1C,eAAe,EAAE,MAAM,CAAC,YAAY,EAAE,MAAM,CAAC,CAAC;IAC9C,aAAa,EAAE,MAAM,CAAC,WAAW,EAAE,MAAM,CAAC,CAAC;IAC3C,gBAAgB,EAAE,MAAM,CAAC;IACzB,oBAAoB,EAAE,MAAM,CAAC;IAC7B,UAAU,EAAE,MAAM,CAAC;CACpB;AAMD,qBAAa,gBAAiB,YAAW,iBAAiB;IACxD,OAAO,CAAC,KAAK,CAA0C;IACvD,OAAO,CAAC,eAAe,CAAuC;IAC9D,OAAO,CAAC,cAAc,CAAuC;IAC7D,OAAO,CAAC,WAAW,CAAa;IAChC,OAAO,CAAC,QAAQ,CAAY;IAC5B,OAAO,CAAC,aAAa,CAAiB;gBAE1B,QAAQ,EAAE,SAAS,EAAE,aAAa,EAAE,cAAc;IAW9D,UAAU,CAAC,IAAI,EAAE,QAAQ,GAAG,cAAc;IA6C1C,gBAAgB,CAAC,KAAK,EAAE,QAAQ,EAAE,GAAG,cAAc,EAAE;IAQrD,SAAS,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI;IAY/B,UAAU,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,GAAG,IAAI;IAmBlD,SAAS,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI;IAc/B,YAAY,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,UAAU,GAAG,IAAI;IAqBtD,QAAQ,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,GAAG,IAAI;IAsB5C,UAAU,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI;IAkBhC,aAAa,CAAC,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,IAAI;IAetD,gBAAgB,CAAC,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,IAAI;IAczD,eAAe,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,EAAE;IAIzC,aAAa,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,EAAE;IAIvC,SAAS,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO;IAKlC,gBAAgB,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,EAAE;IAgB1C,OAAO,CAAC,MAAM,EAAE,MAAM,GAAG,cAAc,GAAG,SAAS;IAInD,WAAW,IAAI,cAAc,EAAE;IAI/B,gBAAgB,CAAC,MAAM,EAAE,UAAU,GAAG,cAAc,EAAE;IAItD,eAAe,CAAC,OAAO,EAAE,OAAO,GAAG,cAAc,EAAE;IAInD,gBAAgB,CAAC,MAAM,EAAE,WAAW,GAAG,cAAc,EAAE;IAIvD,eAAe,CAAC,KAAK,EAAE,OAAO,GAAG,cAAc,EAAE;IAQjD,WAAW,CAAC,OAAO,CAAC,EAAE,OAAO,GAAG,cAAc,GAAG,SAAS;IA+B1D,gBAAgB,IAAI,cAAc,EAAE;IAkBpC,cAAc,IAAI,uBAAuB;IAiEzC,OAAO,CAAC,cAAc;IAQtB,OAAO,CAAC,gBAAgB;IAYxB,OAAO,CAAC,mBAAmB;IAiB3B,OAAO,CAAC,qBAAqB;IAQ7B,OAAO,CAAC,gBAAgB;IA0BxB,OAAO,CAAC,wBAAwB;IAkBhC,OAAO,CAAC,oBAAoB;IAU5B,OAAO,CAAC,gBAAgB;CAgBzB;AAMD,wBAAgB,sBAAsB,CACpC,QAAQ,EAAE,SAAS,EACnB,aAAa,EAAE,cAAc,GAC5B,iBAAiB,CAEnB"}
@@ -0,0 +1,412 @@
1
+ /**
2
+ * V3 Task Orchestrator
3
+ * Manages task decomposition, dependency resolution, and parallel execution
4
+ *
5
+ * Based on ADR-003 (Single Coordination Engine) and ADR-001 (agentic-flow integration)
6
+ */
7
+ import { taskCreatedEvent, taskQueuedEvent, taskAssignedEvent, taskStartedEvent, taskCompletedEvent, taskFailedEvent, taskBlockedEvent } from '../shared/events';
8
+ // =============================================================================
9
+ // Task Orchestrator Implementation
10
+ // =============================================================================
11
+ export class TaskOrchestrator {
12
+ tasks = new Map();
13
+ dependencyGraph = new Map();
14
+ dependentGraph = new Map();
15
+ taskCounter = 0;
16
+ eventBus;
17
+ agentRegistry;
18
+ constructor(eventBus, agentRegistry) {
19
+ this.eventBus = eventBus;
20
+ this.agentRegistry = agentRegistry;
21
+ this.eventBus.subscribe('agent:task-completed', this.handleAgentTaskCompleted.bind(this));
22
+ }
23
+ // ==========================================================================
24
+ // Task Creation
25
+ // ==========================================================================
26
+ createTask(spec) {
27
+ const taskId = `task-${Date.now()}-${++this.taskCounter}`;
28
+ const task = {
29
+ id: taskId,
30
+ type: spec.type,
31
+ title: spec.title,
32
+ description: spec.description,
33
+ assignedAgent: null,
34
+ status: 'pending',
35
+ priority: spec.priority ?? 'medium',
36
+ dependencies: spec.dependencies ?? [],
37
+ blockedBy: [],
38
+ metadata: {
39
+ domain: spec.domain,
40
+ phase: spec.phase,
41
+ estimatedDuration: spec.estimatedDuration ?? 0,
42
+ actualDuration: null,
43
+ retryCount: 0,
44
+ maxRetries: 3,
45
+ artifacts: [],
46
+ tags: spec.tags ?? []
47
+ },
48
+ createdAt: Date.now(),
49
+ updatedAt: Date.now(),
50
+ completedAt: null
51
+ };
52
+ this.tasks.set(taskId, task);
53
+ this.dependencyGraph.set(taskId, new Set(task.dependencies));
54
+ this.dependentGraph.set(taskId, new Set());
55
+ for (const depId of task.dependencies) {
56
+ if (this.dependentGraph.has(depId)) {
57
+ this.dependentGraph.get(depId).add(taskId);
58
+ }
59
+ }
60
+ this.updateBlockedStatus(taskId);
61
+ this.eventBus.emitSync(taskCreatedEvent(taskId, { type: spec.type, title: spec.title }));
62
+ return task;
63
+ }
64
+ createBatchTasks(specs) {
65
+ return specs.map(spec => this.createTask(spec));
66
+ }
67
+ // ==========================================================================
68
+ // Task Lifecycle
69
+ // ==========================================================================
70
+ queueTask(taskId) {
71
+ const task = this.getTaskOrThrow(taskId);
72
+ if (this.isBlocked(taskId)) {
73
+ this.updateTaskStatus(taskId, 'blocked');
74
+ return;
75
+ }
76
+ this.updateTaskStatus(taskId, 'queued');
77
+ this.eventBus.emitSync(taskQueuedEvent(taskId, this.getQueuePosition(taskId)));
78
+ }
79
+ assignTask(taskId, agentId) {
80
+ const task = this.getTaskOrThrow(taskId);
81
+ if (task.status !== 'queued') {
82
+ throw new Error(`Task ${taskId} is not queued (status: ${task.status})`);
83
+ }
84
+ if (this.isBlocked(taskId)) {
85
+ throw new Error(`Task ${taskId} is blocked by dependencies`);
86
+ }
87
+ task.assignedAgent = agentId;
88
+ this.updateTaskStatus(taskId, 'assigned');
89
+ this.agentRegistry.assignTask(agentId, taskId);
90
+ this.eventBus.emitSync(taskAssignedEvent(taskId, agentId));
91
+ }
92
+ startTask(taskId) {
93
+ const task = this.getTaskOrThrow(taskId);
94
+ if (task.status !== 'assigned') {
95
+ throw new Error(`Task ${taskId} is not assigned (status: ${task.status})`);
96
+ }
97
+ this.updateTaskStatus(taskId, 'in-progress');
98
+ if (task.assignedAgent) {
99
+ this.eventBus.emitSync(taskStartedEvent(taskId, task.assignedAgent));
100
+ }
101
+ }
102
+ completeTask(taskId, result) {
103
+ const task = this.getTaskOrThrow(taskId);
104
+ if (task.status !== 'in-progress') {
105
+ throw new Error(`Task ${taskId} is not in progress (status: ${task.status})`);
106
+ }
107
+ task.metadata.actualDuration = result.duration;
108
+ task.completedAt = Date.now();
109
+ this.updateTaskStatus(taskId, 'completed');
110
+ if (task.assignedAgent) {
111
+ this.agentRegistry.completeTask(task.assignedAgent, taskId);
112
+ }
113
+ this.eventBus.emitSync(taskCompletedEvent(taskId, result));
114
+ this.unblockDependentTasks(taskId);
115
+ }
116
+ failTask(taskId, error) {
117
+ const task = this.getTaskOrThrow(taskId);
118
+ task.metadata.retryCount++;
119
+ if (task.metadata.retryCount < task.metadata.maxRetries) {
120
+ this.updateTaskStatus(taskId, 'queued');
121
+ task.assignedAgent = null;
122
+ }
123
+ else {
124
+ this.updateTaskStatus(taskId, 'failed');
125
+ if (task.assignedAgent) {
126
+ const agentState = this.agentRegistry.getState(task.assignedAgent);
127
+ if (agentState) {
128
+ agentState.metrics.tasksFailed++;
129
+ }
130
+ }
131
+ }
132
+ this.eventBus.emitSync(taskFailedEvent(taskId, error));
133
+ }
134
+ cancelTask(taskId) {
135
+ const task = this.getTaskOrThrow(taskId);
136
+ if (task.status === 'completed' || task.status === 'failed') {
137
+ throw new Error(`Cannot cancel ${task.status} task ${taskId}`);
138
+ }
139
+ if (task.assignedAgent) {
140
+ this.agentRegistry.updateStatus(task.assignedAgent, 'idle');
141
+ }
142
+ this.updateTaskStatus(taskId, 'cancelled');
143
+ }
144
+ // ==========================================================================
145
+ // Dependency Management
146
+ // ==========================================================================
147
+ addDependency(taskId, dependsOn) {
148
+ const task = this.getTaskOrThrow(taskId);
149
+ this.getTaskOrThrow(dependsOn);
150
+ if (this.wouldCreateCycle(taskId, dependsOn)) {
151
+ throw new Error(`Adding dependency ${dependsOn} to ${taskId} would create a cycle`);
152
+ }
153
+ task.dependencies.push(dependsOn);
154
+ this.dependencyGraph.get(taskId).add(dependsOn);
155
+ this.dependentGraph.get(dependsOn).add(taskId);
156
+ this.updateBlockedStatus(taskId);
157
+ }
158
+ removeDependency(taskId, dependsOn) {
159
+ const task = this.getTaskOrThrow(taskId);
160
+ const index = task.dependencies.indexOf(dependsOn);
161
+ if (index > -1) {
162
+ task.dependencies.splice(index, 1);
163
+ }
164
+ this.dependencyGraph.get(taskId)?.delete(dependsOn);
165
+ this.dependentGraph.get(dependsOn)?.delete(taskId);
166
+ this.updateBlockedStatus(taskId);
167
+ }
168
+ getDependencies(taskId) {
169
+ return Array.from(this.dependencyGraph.get(taskId) ?? []);
170
+ }
171
+ getDependents(taskId) {
172
+ return Array.from(this.dependentGraph.get(taskId) ?? []);
173
+ }
174
+ isBlocked(taskId) {
175
+ const blockingTasks = this.getBlockingTasks(taskId);
176
+ return blockingTasks.length > 0;
177
+ }
178
+ getBlockingTasks(taskId) {
179
+ const dependencies = this.dependencyGraph.get(taskId);
180
+ if (!dependencies) {
181
+ return [];
182
+ }
183
+ return Array.from(dependencies).filter(depId => {
184
+ const depTask = this.tasks.get(depId);
185
+ return depTask && depTask.status !== 'completed';
186
+ });
187
+ }
188
+ // ==========================================================================
189
+ // Queries
190
+ // ==========================================================================
191
+ getTask(taskId) {
192
+ return this.tasks.get(taskId);
193
+ }
194
+ getAllTasks() {
195
+ return Array.from(this.tasks.values());
196
+ }
197
+ getTasksByStatus(status) {
198
+ return this.getAllTasks().filter(t => t.status === status);
199
+ }
200
+ getTasksByAgent(agentId) {
201
+ return this.getAllTasks().filter(t => t.assignedAgent === agentId);
202
+ }
203
+ getTasksByDomain(domain) {
204
+ return this.getAllTasks().filter(t => t.metadata.domain === domain);
205
+ }
206
+ getTasksByPhase(phase) {
207
+ return this.getAllTasks().filter(t => t.metadata.phase === phase);
208
+ }
209
+ // ==========================================================================
210
+ // Queue Management
211
+ // ==========================================================================
212
+ getNextTask(agentId) {
213
+ const queuedTasks = this.getTasksByStatus('queued')
214
+ .filter(t => !this.isBlocked(t.id))
215
+ .sort((a, b) => {
216
+ const priorityOrder = {
217
+ 'critical': 0,
218
+ 'high': 1,
219
+ 'medium': 2,
220
+ 'low': 3
221
+ };
222
+ const priorityDiff = priorityOrder[a.priority] - priorityOrder[b.priority];
223
+ if (priorityDiff !== 0)
224
+ return priorityDiff;
225
+ return a.createdAt - b.createdAt;
226
+ });
227
+ if (!agentId) {
228
+ return queuedTasks[0];
229
+ }
230
+ const agentDef = this.agentRegistry.getDefinition(agentId);
231
+ if (!agentDef) {
232
+ return queuedTasks[0];
233
+ }
234
+ const supportedTypes = agentDef.capabilities.flatMap(c => c.supportedTaskTypes);
235
+ return queuedTasks.find(t => supportedTypes.includes(t.type));
236
+ }
237
+ getPriorityQueue() {
238
+ return this.getTasksByStatus('queued')
239
+ .filter(t => !this.isBlocked(t.id))
240
+ .sort((a, b) => {
241
+ const priorityOrder = {
242
+ 'critical': 0,
243
+ 'high': 1,
244
+ 'medium': 2,
245
+ 'low': 3
246
+ };
247
+ return priorityOrder[a.priority] - priorityOrder[b.priority];
248
+ });
249
+ }
250
+ // ==========================================================================
251
+ // Metrics
252
+ // ==========================================================================
253
+ getTaskMetrics() {
254
+ const allTasks = this.getAllTasks();
255
+ const tasksByStatus = {
256
+ 'pending': 0,
257
+ 'queued': 0,
258
+ 'assigned': 0,
259
+ 'in-progress': 0,
260
+ 'blocked': 0,
261
+ 'completed': 0,
262
+ 'failed': 0,
263
+ 'cancelled': 0
264
+ };
265
+ const tasksByPriority = {
266
+ 'critical': 0,
267
+ 'high': 0,
268
+ 'medium': 0,
269
+ 'low': 0
270
+ };
271
+ const tasksByDomain = {
272
+ 'security': 0,
273
+ 'core': 0,
274
+ 'integration': 0,
275
+ 'quality': 0,
276
+ 'performance': 0,
277
+ 'deployment': 0
278
+ };
279
+ let totalQueueTime = 0;
280
+ let totalExecutionTime = 0;
281
+ let completedCount = 0;
282
+ for (const task of allTasks) {
283
+ tasksByStatus[task.status]++;
284
+ tasksByPriority[task.priority]++;
285
+ tasksByDomain[task.metadata.domain]++;
286
+ if (task.status === 'completed' && task.metadata.actualDuration) {
287
+ totalExecutionTime += task.metadata.actualDuration;
288
+ completedCount++;
289
+ }
290
+ }
291
+ const now = Date.now();
292
+ const firstTask = allTasks[0];
293
+ const runtimeMs = firstTask ? now - firstTask.createdAt : 1;
294
+ const throughput = completedCount / (runtimeMs / 1000 / 60);
295
+ return {
296
+ totalTasks: allTasks.length,
297
+ tasksByStatus,
298
+ tasksByPriority,
299
+ tasksByDomain,
300
+ averageQueueTime: totalQueueTime / (completedCount || 1),
301
+ averageExecutionTime: totalExecutionTime / (completedCount || 1),
302
+ throughput
303
+ };
304
+ }
305
+ // ==========================================================================
306
+ // Private Helpers
307
+ // ==========================================================================
308
+ getTaskOrThrow(taskId) {
309
+ const task = this.tasks.get(taskId);
310
+ if (!task) {
311
+ throw new Error(`Task ${taskId} not found`);
312
+ }
313
+ return task;
314
+ }
315
+ updateTaskStatus(taskId, status) {
316
+ const task = this.getTaskOrThrow(taskId);
317
+ task.status = status;
318
+ task.updatedAt = Date.now();
319
+ if (status === 'blocked') {
320
+ task.blockedBy = this.getBlockingTasks(taskId);
321
+ }
322
+ else {
323
+ task.blockedBy = [];
324
+ }
325
+ }
326
+ updateBlockedStatus(taskId) {
327
+ const task = this.tasks.get(taskId);
328
+ if (!task || task.status === 'completed' || task.status === 'failed') {
329
+ return;
330
+ }
331
+ const isBlocked = this.isBlocked(taskId);
332
+ if (isBlocked && task.status !== 'blocked') {
333
+ this.updateTaskStatus(taskId, 'blocked');
334
+ const blockingTasks = this.getBlockingTasks(taskId);
335
+ this.eventBus.emitSync(taskBlockedEvent(taskId, 'Blocked by dependencies', blockingTasks[0]));
336
+ }
337
+ else if (!isBlocked && task.status === 'blocked') {
338
+ this.updateTaskStatus(taskId, 'queued');
339
+ }
340
+ }
341
+ unblockDependentTasks(taskId) {
342
+ const dependents = this.getDependents(taskId);
343
+ for (const dependentId of dependents) {
344
+ this.updateBlockedStatus(dependentId);
345
+ }
346
+ }
347
+ wouldCreateCycle(taskId, newDependency) {
348
+ const visited = new Set();
349
+ const stack = [newDependency];
350
+ while (stack.length > 0) {
351
+ const current = stack.pop();
352
+ if (current === taskId) {
353
+ return true;
354
+ }
355
+ if (visited.has(current)) {
356
+ continue;
357
+ }
358
+ visited.add(current);
359
+ const deps = this.dependencyGraph.get(current);
360
+ if (deps) {
361
+ stack.push(...deps);
362
+ }
363
+ }
364
+ return false;
365
+ }
366
+ handleAgentTaskCompleted(event) {
367
+ const payload = event.payload;
368
+ if (payload.taskId && this.tasks.has(payload.taskId)) {
369
+ const task = this.tasks.get(payload.taskId);
370
+ if (task.status === 'in-progress') {
371
+ this.completeTask(payload.taskId, {
372
+ taskId: payload.taskId,
373
+ success: true,
374
+ output: payload.result,
375
+ error: null,
376
+ duration: Date.now() - task.updatedAt,
377
+ metrics: this.createDefaultMetrics()
378
+ });
379
+ }
380
+ }
381
+ }
382
+ createDefaultMetrics() {
383
+ return {
384
+ linesOfCode: 0,
385
+ testsWritten: 0,
386
+ testsPassed: 0,
387
+ coveragePercent: 0,
388
+ performanceImpact: 0
389
+ };
390
+ }
391
+ getQueuePosition(taskId) {
392
+ const priorityOrder = {
393
+ critical: 5,
394
+ high: 4,
395
+ normal: 3,
396
+ low: 2,
397
+ background: 1,
398
+ };
399
+ const queuedTasks = Array.from(this.tasks.values())
400
+ .filter(t => t.status === 'queued')
401
+ .sort((a, b) => (priorityOrder[b.priority] || 0) - (priorityOrder[a.priority] || 0));
402
+ const position = queuedTasks.findIndex(t => t.id === taskId);
403
+ return position >= 0 ? position + 1 : queuedTasks.length + 1;
404
+ }
405
+ }
406
+ // =============================================================================
407
+ // Factory Function
408
+ // =============================================================================
409
+ export function createTaskOrchestrator(eventBus, agentRegistry) {
410
+ return new TaskOrchestrator(eventBus, agentRegistry);
411
+ }
412
+ //# sourceMappingURL=task-orchestrator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"task-orchestrator.js","sourceRoot":"","sources":["../../src/coordination/task-orchestrator.ts"],"names":[],"mappings":"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"}