moflo 4.8.19 → 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.
- package/.claude/guidance/shipped/moflo.md +45 -0
- package/.claude/helpers/statusline.cjs +1 -1
- package/.claude/workflow-state.json +9 -0
- package/package.json +2 -2
- package/src/@claude-flow/cli/dist/src/init/statusline-generator.js +1 -1
- package/src/@claude-flow/cli/dist/src/services/agentic-flow-bridge.js +5 -3
- package/src/@claude-flow/cli/package.json +1 -1
- package/src/@claude-flow/memory/dist/agent-memory-scope.d.ts +131 -0
- package/src/@claude-flow/memory/dist/agent-memory-scope.js +223 -0
- package/src/@claude-flow/memory/dist/agent-memory-scope.test.d.ts +8 -0
- package/src/@claude-flow/memory/dist/agent-memory-scope.test.js +466 -0
- package/src/@claude-flow/memory/dist/agentdb-adapter.d.ts +165 -0
- package/src/@claude-flow/memory/dist/agentdb-adapter.js +806 -0
- package/src/@claude-flow/memory/dist/agentdb-backend.d.ts +212 -0
- package/src/@claude-flow/memory/dist/agentdb-backend.js +842 -0
- package/src/@claude-flow/memory/dist/agentdb-backend.test.d.ts +7 -0
- package/src/@claude-flow/memory/dist/agentdb-backend.test.js +258 -0
- package/src/@claude-flow/memory/dist/application/commands/delete-memory.command.d.ts +65 -0
- package/src/@claude-flow/memory/dist/application/commands/delete-memory.command.js +129 -0
- package/src/@claude-flow/memory/dist/application/commands/store-memory.command.d.ts +48 -0
- package/src/@claude-flow/memory/dist/application/commands/store-memory.command.js +72 -0
- package/src/@claude-flow/memory/dist/application/index.d.ts +12 -0
- package/src/@claude-flow/memory/dist/application/index.js +15 -0
- package/src/@claude-flow/memory/dist/application/queries/search-memory.query.d.ts +72 -0
- package/src/@claude-flow/memory/dist/application/queries/search-memory.query.js +143 -0
- package/src/@claude-flow/memory/dist/application/services/memory-application-service.d.ts +121 -0
- package/src/@claude-flow/memory/dist/application/services/memory-application-service.js +190 -0
- package/src/@claude-flow/memory/dist/auto-memory-bridge.d.ts +226 -0
- package/src/@claude-flow/memory/dist/auto-memory-bridge.js +709 -0
- package/src/@claude-flow/memory/dist/auto-memory-bridge.test.d.ts +8 -0
- package/src/@claude-flow/memory/dist/auto-memory-bridge.test.js +757 -0
- package/src/@claude-flow/memory/dist/benchmark.test.d.ts +2 -0
- package/src/@claude-flow/memory/dist/benchmark.test.js +277 -0
- package/src/@claude-flow/memory/dist/cache-manager.d.ts +134 -0
- package/src/@claude-flow/memory/dist/cache-manager.js +407 -0
- package/src/@claude-flow/memory/dist/controller-registry.d.ts +216 -0
- package/src/@claude-flow/memory/dist/controller-registry.js +893 -0
- package/src/@claude-flow/memory/dist/controller-registry.test.d.ts +14 -0
- package/src/@claude-flow/memory/dist/controller-registry.test.js +593 -0
- package/src/@claude-flow/memory/dist/database-provider.d.ts +87 -0
- package/src/@claude-flow/memory/dist/database-provider.js +372 -0
- package/src/@claude-flow/memory/dist/database-provider.test.d.ts +7 -0
- package/src/@claude-flow/memory/dist/database-provider.test.js +287 -0
- package/src/@claude-flow/memory/dist/domain/entities/memory-entry.d.ts +143 -0
- package/src/@claude-flow/memory/dist/domain/entities/memory-entry.js +226 -0
- package/src/@claude-flow/memory/dist/domain/index.d.ts +11 -0
- package/src/@claude-flow/memory/dist/domain/index.js +12 -0
- package/src/@claude-flow/memory/dist/domain/repositories/memory-repository.interface.d.ts +102 -0
- package/src/@claude-flow/memory/dist/domain/repositories/memory-repository.interface.js +11 -0
- package/src/@claude-flow/memory/dist/domain/services/memory-domain-service.d.ts +105 -0
- package/src/@claude-flow/memory/dist/domain/services/memory-domain-service.js +297 -0
- package/src/@claude-flow/memory/dist/hnsw-index.d.ts +111 -0
- package/src/@claude-flow/memory/dist/hnsw-index.js +781 -0
- package/src/@claude-flow/memory/dist/hnsw-lite.d.ts +23 -0
- package/src/@claude-flow/memory/dist/hnsw-lite.js +168 -0
- package/src/@claude-flow/memory/dist/index.d.ts +204 -0
- package/src/@claude-flow/memory/dist/index.js +358 -0
- package/src/@claude-flow/memory/dist/infrastructure/index.d.ts +17 -0
- package/src/@claude-flow/memory/dist/infrastructure/index.js +16 -0
- package/src/@claude-flow/memory/dist/infrastructure/repositories/hybrid-memory-repository.d.ts +66 -0
- package/src/@claude-flow/memory/dist/infrastructure/repositories/hybrid-memory-repository.js +409 -0
- package/src/@claude-flow/memory/dist/learning-bridge.d.ts +137 -0
- package/src/@claude-flow/memory/dist/learning-bridge.js +335 -0
- package/src/@claude-flow/memory/dist/learning-bridge.test.d.ts +8 -0
- package/src/@claude-flow/memory/dist/learning-bridge.test.js +578 -0
- package/src/@claude-flow/memory/dist/memory-graph.d.ts +100 -0
- package/src/@claude-flow/memory/dist/memory-graph.js +333 -0
- package/src/@claude-flow/memory/dist/memory-graph.test.d.ts +8 -0
- package/src/@claude-flow/memory/dist/memory-graph.test.js +609 -0
- package/src/@claude-flow/memory/dist/migration.d.ts +68 -0
- package/src/@claude-flow/memory/dist/migration.js +513 -0
- package/src/@claude-flow/memory/dist/persistent-sona.d.ts +144 -0
- package/src/@claude-flow/memory/dist/persistent-sona.js +332 -0
- package/src/@claude-flow/memory/dist/query-builder.d.ts +211 -0
- package/src/@claude-flow/memory/dist/query-builder.js +438 -0
- package/src/@claude-flow/memory/dist/rvf-backend.d.ts +51 -0
- package/src/@claude-flow/memory/dist/rvf-backend.js +481 -0
- package/src/@claude-flow/memory/dist/rvf-learning-store.d.ts +139 -0
- package/src/@claude-flow/memory/dist/rvf-learning-store.js +295 -0
- package/src/@claude-flow/memory/dist/rvf-migration.d.ts +45 -0
- package/src/@claude-flow/memory/dist/rvf-migration.js +234 -0
- package/src/@claude-flow/memory/dist/sqljs-backend.d.ts +127 -0
- package/src/@claude-flow/memory/dist/sqljs-backend.js +600 -0
- package/src/@claude-flow/memory/dist/types.d.ts +484 -0
- package/src/@claude-flow/memory/dist/types.js +58 -0
- package/src/@claude-flow/shared/dist/core/config/defaults.d.ts +41 -0
- package/src/@claude-flow/shared/dist/core/config/defaults.js +186 -0
- package/src/@claude-flow/shared/dist/core/config/index.d.ts +8 -0
- package/src/@claude-flow/shared/dist/core/config/index.js +12 -0
- package/src/@claude-flow/shared/dist/core/config/loader.d.ts +45 -0
- package/src/@claude-flow/shared/dist/core/config/loader.js +222 -0
- package/src/@claude-flow/shared/dist/core/config/schema.d.ts +1134 -0
- package/src/@claude-flow/shared/dist/core/config/schema.js +158 -0
- package/src/@claude-flow/shared/dist/core/config/validator.d.ts +92 -0
- package/src/@claude-flow/shared/dist/core/config/validator.js +147 -0
- package/src/@claude-flow/shared/dist/core/event-bus.d.ts +31 -0
- package/src/@claude-flow/shared/dist/core/event-bus.js +197 -0
- package/src/@claude-flow/shared/dist/core/index.d.ts +15 -0
- package/src/@claude-flow/shared/dist/core/index.js +19 -0
- package/src/@claude-flow/shared/dist/core/interfaces/agent.interface.d.ts +200 -0
- package/src/@claude-flow/shared/dist/core/interfaces/agent.interface.js +6 -0
- package/src/@claude-flow/shared/dist/core/interfaces/coordinator.interface.d.ts +310 -0
- package/src/@claude-flow/shared/dist/core/interfaces/coordinator.interface.js +7 -0
- package/src/@claude-flow/shared/dist/core/interfaces/event.interface.d.ts +224 -0
- package/src/@claude-flow/shared/dist/core/interfaces/event.interface.js +46 -0
- package/src/@claude-flow/shared/dist/core/interfaces/index.d.ts +10 -0
- package/src/@claude-flow/shared/dist/core/interfaces/index.js +15 -0
- package/src/@claude-flow/shared/dist/core/interfaces/memory.interface.d.ts +298 -0
- package/src/@claude-flow/shared/dist/core/interfaces/memory.interface.js +7 -0
- package/src/@claude-flow/shared/dist/core/interfaces/task.interface.d.ts +185 -0
- package/src/@claude-flow/shared/dist/core/interfaces/task.interface.js +6 -0
- package/src/@claude-flow/shared/dist/core/orchestrator/event-coordinator.d.ts +35 -0
- package/src/@claude-flow/shared/dist/core/orchestrator/event-coordinator.js +101 -0
- package/src/@claude-flow/shared/dist/core/orchestrator/health-monitor.d.ts +60 -0
- package/src/@claude-flow/shared/dist/core/orchestrator/health-monitor.js +166 -0
- package/src/@claude-flow/shared/dist/core/orchestrator/index.d.ts +46 -0
- package/src/@claude-flow/shared/dist/core/orchestrator/index.js +64 -0
- package/src/@claude-flow/shared/dist/core/orchestrator/lifecycle-manager.d.ts +56 -0
- package/src/@claude-flow/shared/dist/core/orchestrator/lifecycle-manager.js +195 -0
- package/src/@claude-flow/shared/dist/core/orchestrator/session-manager.d.ts +83 -0
- package/src/@claude-flow/shared/dist/core/orchestrator/session-manager.js +193 -0
- package/src/@claude-flow/shared/dist/core/orchestrator/task-manager.d.ts +49 -0
- package/src/@claude-flow/shared/dist/core/orchestrator/task-manager.js +253 -0
- package/src/@claude-flow/shared/dist/events/domain-events.d.ts +282 -0
- package/src/@claude-flow/shared/dist/events/domain-events.js +165 -0
- package/src/@claude-flow/shared/dist/events/event-store.d.ts +126 -0
- package/src/@claude-flow/shared/dist/events/event-store.js +432 -0
- package/src/@claude-flow/shared/dist/events/event-store.test.d.ts +8 -0
- package/src/@claude-flow/shared/dist/events/event-store.test.js +297 -0
- package/src/@claude-flow/shared/dist/events/example-usage.d.ts +10 -0
- package/src/@claude-flow/shared/dist/events/example-usage.js +193 -0
- package/src/@claude-flow/shared/dist/events/index.d.ts +21 -0
- package/src/@claude-flow/shared/dist/events/index.js +22 -0
- package/src/@claude-flow/shared/dist/events/projections.d.ts +177 -0
- package/src/@claude-flow/shared/dist/events/projections.js +421 -0
- package/src/@claude-flow/shared/dist/events/rvf-event-log.d.ts +82 -0
- package/src/@claude-flow/shared/dist/events/rvf-event-log.js +340 -0
- package/src/@claude-flow/shared/dist/events/state-reconstructor.d.ts +101 -0
- package/src/@claude-flow/shared/dist/events/state-reconstructor.js +263 -0
- package/src/@claude-flow/shared/dist/events.d.ts +80 -0
- package/src/@claude-flow/shared/dist/events.js +249 -0
- package/src/@claude-flow/shared/dist/hooks/example-usage.d.ts +42 -0
- package/src/@claude-flow/shared/dist/hooks/example-usage.js +351 -0
- package/src/@claude-flow/shared/dist/hooks/executor.d.ts +100 -0
- package/src/@claude-flow/shared/dist/hooks/executor.js +267 -0
- package/src/@claude-flow/shared/dist/hooks/hooks.test.d.ts +9 -0
- package/src/@claude-flow/shared/dist/hooks/hooks.test.js +322 -0
- package/src/@claude-flow/shared/dist/hooks/index.d.ts +52 -0
- package/src/@claude-flow/shared/dist/hooks/index.js +51 -0
- package/src/@claude-flow/shared/dist/hooks/registry.d.ts +133 -0
- package/src/@claude-flow/shared/dist/hooks/registry.js +277 -0
- package/src/@claude-flow/shared/dist/hooks/safety/bash-safety.d.ts +105 -0
- package/src/@claude-flow/shared/dist/hooks/safety/bash-safety.js +481 -0
- package/src/@claude-flow/shared/dist/hooks/safety/file-organization.d.ts +144 -0
- package/src/@claude-flow/shared/dist/hooks/safety/file-organization.js +328 -0
- package/src/@claude-flow/shared/dist/hooks/safety/git-commit.d.ts +158 -0
- package/src/@claude-flow/shared/dist/hooks/safety/git-commit.js +450 -0
- package/src/@claude-flow/shared/dist/hooks/safety/index.d.ts +17 -0
- package/src/@claude-flow/shared/dist/hooks/safety/index.js +17 -0
- package/src/@claude-flow/shared/dist/hooks/session-hooks.d.ts +234 -0
- package/src/@claude-flow/shared/dist/hooks/session-hooks.js +334 -0
- package/src/@claude-flow/shared/dist/hooks/task-hooks.d.ts +163 -0
- package/src/@claude-flow/shared/dist/hooks/task-hooks.js +326 -0
- package/src/@claude-flow/shared/dist/hooks/types.d.ts +267 -0
- package/src/@claude-flow/shared/dist/hooks/types.js +62 -0
- package/src/@claude-flow/shared/dist/hooks/verify-exports.test.d.ts +9 -0
- package/src/@claude-flow/shared/dist/hooks/verify-exports.test.js +93 -0
- package/src/@claude-flow/shared/dist/index.d.ts +20 -0
- package/src/@claude-flow/shared/dist/index.js +50 -0
- package/src/@claude-flow/shared/dist/mcp/connection-pool.d.ts +98 -0
- package/src/@claude-flow/shared/dist/mcp/connection-pool.js +364 -0
- package/src/@claude-flow/shared/dist/mcp/index.d.ts +69 -0
- package/src/@claude-flow/shared/dist/mcp/index.js +84 -0
- package/src/@claude-flow/shared/dist/mcp/server.d.ts +166 -0
- package/src/@claude-flow/shared/dist/mcp/server.js +593 -0
- package/src/@claude-flow/shared/dist/mcp/session-manager.d.ts +136 -0
- package/src/@claude-flow/shared/dist/mcp/session-manager.js +335 -0
- package/src/@claude-flow/shared/dist/mcp/tool-registry.d.ts +178 -0
- package/src/@claude-flow/shared/dist/mcp/tool-registry.js +439 -0
- package/src/@claude-flow/shared/dist/mcp/transport/http.d.ts +104 -0
- package/src/@claude-flow/shared/dist/mcp/transport/http.js +476 -0
- package/src/@claude-flow/shared/dist/mcp/transport/index.d.ts +102 -0
- package/src/@claude-flow/shared/dist/mcp/transport/index.js +238 -0
- package/src/@claude-flow/shared/dist/mcp/transport/stdio.d.ts +104 -0
- package/src/@claude-flow/shared/dist/mcp/transport/stdio.js +263 -0
- package/src/@claude-flow/shared/dist/mcp/transport/websocket.d.ts +133 -0
- package/src/@claude-flow/shared/dist/mcp/transport/websocket.js +396 -0
- package/src/@claude-flow/shared/dist/mcp/types.d.ts +438 -0
- package/src/@claude-flow/shared/dist/mcp/types.js +54 -0
- package/src/@claude-flow/shared/dist/plugin-interface.d.ts +544 -0
- package/src/@claude-flow/shared/dist/plugin-interface.js +23 -0
- package/src/@claude-flow/shared/dist/plugin-loader.d.ts +139 -0
- package/src/@claude-flow/shared/dist/plugin-loader.js +434 -0
- package/src/@claude-flow/shared/dist/plugin-registry.d.ts +183 -0
- package/src/@claude-flow/shared/dist/plugin-registry.js +457 -0
- package/src/@claude-flow/shared/dist/plugins/index.d.ts +10 -0
- package/src/@claude-flow/shared/dist/plugins/index.js +10 -0
- package/src/@claude-flow/shared/dist/plugins/official/hive-mind-plugin.d.ts +106 -0
- package/src/@claude-flow/shared/dist/plugins/official/hive-mind-plugin.js +241 -0
- package/src/@claude-flow/shared/dist/plugins/official/index.d.ts +10 -0
- package/src/@claude-flow/shared/dist/plugins/official/index.js +10 -0
- package/src/@claude-flow/shared/dist/plugins/official/maestro-plugin.d.ts +121 -0
- package/src/@claude-flow/shared/dist/plugins/official/maestro-plugin.js +355 -0
- package/src/@claude-flow/shared/dist/plugins/types.d.ts +93 -0
- package/src/@claude-flow/shared/dist/plugins/types.js +9 -0
- package/src/@claude-flow/shared/dist/resilience/bulkhead.d.ts +105 -0
- package/src/@claude-flow/shared/dist/resilience/bulkhead.js +206 -0
- package/src/@claude-flow/shared/dist/resilience/circuit-breaker.d.ts +132 -0
- package/src/@claude-flow/shared/dist/resilience/circuit-breaker.js +233 -0
- package/src/@claude-flow/shared/dist/resilience/index.d.ts +19 -0
- package/src/@claude-flow/shared/dist/resilience/index.js +19 -0
- package/src/@claude-flow/shared/dist/resilience/rate-limiter.d.ts +168 -0
- package/src/@claude-flow/shared/dist/resilience/rate-limiter.js +314 -0
- package/src/@claude-flow/shared/dist/resilience/retry.d.ts +91 -0
- package/src/@claude-flow/shared/dist/resilience/retry.js +159 -0
- package/src/@claude-flow/shared/dist/security/index.d.ts +10 -0
- package/src/@claude-flow/shared/dist/security/index.js +12 -0
- package/src/@claude-flow/shared/dist/security/input-validation.d.ts +73 -0
- package/src/@claude-flow/shared/dist/security/input-validation.js +201 -0
- package/src/@claude-flow/shared/dist/security/secure-random.d.ts +92 -0
- package/src/@claude-flow/shared/dist/security/secure-random.js +142 -0
- package/src/@claude-flow/shared/dist/services/index.d.ts +7 -0
- package/src/@claude-flow/shared/dist/services/index.js +7 -0
- package/src/@claude-flow/shared/dist/services/v3-progress.service.d.ts +124 -0
- package/src/@claude-flow/shared/dist/services/v3-progress.service.js +402 -0
- package/src/@claude-flow/shared/dist/types/agent.types.d.ts +137 -0
- package/src/@claude-flow/shared/dist/types/agent.types.js +6 -0
- package/src/@claude-flow/shared/dist/types/index.d.ts +11 -0
- package/src/@claude-flow/shared/dist/types/index.js +17 -0
- package/src/@claude-flow/shared/dist/types/mcp.types.d.ts +266 -0
- package/src/@claude-flow/shared/dist/types/mcp.types.js +7 -0
- package/src/@claude-flow/shared/dist/types/memory.types.d.ts +236 -0
- package/src/@claude-flow/shared/dist/types/memory.types.js +7 -0
- package/src/@claude-flow/shared/dist/types/swarm.types.d.ts +186 -0
- package/src/@claude-flow/shared/dist/types/swarm.types.js +65 -0
- package/src/@claude-flow/shared/dist/types/task.types.d.ts +178 -0
- package/src/@claude-flow/shared/dist/types/task.types.js +32 -0
- package/src/@claude-flow/shared/dist/types.d.ts +197 -0
- package/src/@claude-flow/shared/dist/types.js +21 -0
- package/src/@claude-flow/shared/dist/utils/secure-logger.d.ts +69 -0
- package/src/@claude-flow/shared/dist/utils/secure-logger.js +208 -0
|
@@ -0,0 +1,253 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* V3 Task Manager
|
|
3
|
+
* Decomposed from orchestrator.ts - Task lifecycle management
|
|
4
|
+
* ~200 lines (target achieved)
|
|
5
|
+
*/
|
|
6
|
+
import { SystemEventTypes } from '../interfaces/event.interface.js';
|
|
7
|
+
import { randomBytes } from 'crypto';
|
|
8
|
+
// Secure task ID generation
|
|
9
|
+
function generateSecureTaskId() {
|
|
10
|
+
const timestamp = Date.now().toString(36);
|
|
11
|
+
const random = randomBytes(12).toString('hex');
|
|
12
|
+
return `task_${timestamp}_${random}`;
|
|
13
|
+
}
|
|
14
|
+
/**
|
|
15
|
+
* Priority queue implementation for tasks
|
|
16
|
+
*/
|
|
17
|
+
export class TaskQueue {
|
|
18
|
+
tasks = [];
|
|
19
|
+
async enqueue(task) {
|
|
20
|
+
this.tasks.push(task);
|
|
21
|
+
this.tasks.sort((a, b) => b.priority - a.priority);
|
|
22
|
+
}
|
|
23
|
+
async dequeue() {
|
|
24
|
+
return this.tasks.shift();
|
|
25
|
+
}
|
|
26
|
+
async peek() {
|
|
27
|
+
return this.tasks[0];
|
|
28
|
+
}
|
|
29
|
+
size() {
|
|
30
|
+
return this.tasks.length;
|
|
31
|
+
}
|
|
32
|
+
isEmpty() {
|
|
33
|
+
return this.tasks.length === 0;
|
|
34
|
+
}
|
|
35
|
+
async clear() {
|
|
36
|
+
this.tasks = [];
|
|
37
|
+
}
|
|
38
|
+
async getAll() {
|
|
39
|
+
return [...this.tasks];
|
|
40
|
+
}
|
|
41
|
+
async remove(taskId) {
|
|
42
|
+
const index = this.tasks.findIndex(t => t.id === taskId);
|
|
43
|
+
if (index !== -1) {
|
|
44
|
+
this.tasks.splice(index, 1);
|
|
45
|
+
return true;
|
|
46
|
+
}
|
|
47
|
+
return false;
|
|
48
|
+
}
|
|
49
|
+
async updatePriority(taskId, priority) {
|
|
50
|
+
const task = this.tasks.find(t => t.id === taskId);
|
|
51
|
+
if (task) {
|
|
52
|
+
task.priority = priority;
|
|
53
|
+
this.tasks.sort((a, b) => b.priority - a.priority);
|
|
54
|
+
return true;
|
|
55
|
+
}
|
|
56
|
+
return false;
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
/**
|
|
60
|
+
* Task manager implementation
|
|
61
|
+
*/
|
|
62
|
+
export class TaskManager {
|
|
63
|
+
eventBus;
|
|
64
|
+
tasks = new Map();
|
|
65
|
+
queue;
|
|
66
|
+
metrics = {
|
|
67
|
+
totalTasks: 0,
|
|
68
|
+
completedTasks: 0,
|
|
69
|
+
failedTasks: 0,
|
|
70
|
+
cancelledTasks: 0,
|
|
71
|
+
totalDuration: 0,
|
|
72
|
+
totalWaitTime: 0,
|
|
73
|
+
};
|
|
74
|
+
constructor(eventBus, queue) {
|
|
75
|
+
this.eventBus = eventBus;
|
|
76
|
+
this.queue = queue ?? new TaskQueue();
|
|
77
|
+
}
|
|
78
|
+
async createTask(params) {
|
|
79
|
+
const task = {
|
|
80
|
+
id: generateSecureTaskId(),
|
|
81
|
+
type: params.type,
|
|
82
|
+
description: params.description,
|
|
83
|
+
priority: params.priority ?? 50,
|
|
84
|
+
createdAt: new Date(),
|
|
85
|
+
status: 'pending',
|
|
86
|
+
timeout: params.timeout,
|
|
87
|
+
assignedAgent: params.assignedAgent,
|
|
88
|
+
input: params.input,
|
|
89
|
+
metadata: params.metadata,
|
|
90
|
+
};
|
|
91
|
+
this.tasks.set(task.id, task);
|
|
92
|
+
this.metrics.totalTasks++;
|
|
93
|
+
this.eventBus.emit(SystemEventTypes.TASK_CREATED, { task });
|
|
94
|
+
return task;
|
|
95
|
+
}
|
|
96
|
+
getTask(taskId) {
|
|
97
|
+
return this.tasks.get(taskId);
|
|
98
|
+
}
|
|
99
|
+
getTasks(filter) {
|
|
100
|
+
let tasks = Array.from(this.tasks.values());
|
|
101
|
+
if (filter) {
|
|
102
|
+
if (filter.status) {
|
|
103
|
+
tasks = tasks.filter(t => t.status === filter.status);
|
|
104
|
+
}
|
|
105
|
+
if (filter.type) {
|
|
106
|
+
tasks = tasks.filter(t => t.type === filter.type);
|
|
107
|
+
}
|
|
108
|
+
if (filter.assignedAgent) {
|
|
109
|
+
tasks = tasks.filter(t => t.assignedAgent === filter.assignedAgent);
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
return tasks;
|
|
113
|
+
}
|
|
114
|
+
async assignTask(taskId, agentId) {
|
|
115
|
+
const task = this.tasks.get(taskId);
|
|
116
|
+
if (!task) {
|
|
117
|
+
throw new Error(`Task not found: ${taskId}`);
|
|
118
|
+
}
|
|
119
|
+
task.assignedAgent = agentId;
|
|
120
|
+
task.status = 'assigned';
|
|
121
|
+
this.eventBus.emit(SystemEventTypes.TASK_ASSIGNED, {
|
|
122
|
+
taskId,
|
|
123
|
+
agentId,
|
|
124
|
+
});
|
|
125
|
+
}
|
|
126
|
+
async startTask(taskId) {
|
|
127
|
+
const task = this.tasks.get(taskId);
|
|
128
|
+
if (!task) {
|
|
129
|
+
throw new Error(`Task not found: ${taskId}`);
|
|
130
|
+
}
|
|
131
|
+
task.status = 'running';
|
|
132
|
+
task.startedAt = new Date();
|
|
133
|
+
// Calculate wait time
|
|
134
|
+
const waitTime = task.startedAt.getTime() - task.createdAt.getTime();
|
|
135
|
+
this.metrics.totalWaitTime += waitTime;
|
|
136
|
+
this.eventBus.emit(SystemEventTypes.TASK_STARTED, {
|
|
137
|
+
taskId,
|
|
138
|
+
agentId: task.assignedAgent,
|
|
139
|
+
startTime: task.startedAt,
|
|
140
|
+
});
|
|
141
|
+
}
|
|
142
|
+
async completeTask(taskId, result) {
|
|
143
|
+
const task = this.tasks.get(taskId);
|
|
144
|
+
if (!task) {
|
|
145
|
+
throw new Error(`Task not found: ${taskId}`);
|
|
146
|
+
}
|
|
147
|
+
task.status = 'completed';
|
|
148
|
+
task.completedAt = new Date();
|
|
149
|
+
task.output = result.output;
|
|
150
|
+
this.metrics.completedTasks++;
|
|
151
|
+
this.metrics.totalDuration += result.duration;
|
|
152
|
+
this.eventBus.emit(SystemEventTypes.TASK_COMPLETED, {
|
|
153
|
+
taskId,
|
|
154
|
+
result,
|
|
155
|
+
});
|
|
156
|
+
}
|
|
157
|
+
async failTask(taskId, error) {
|
|
158
|
+
const task = this.tasks.get(taskId);
|
|
159
|
+
if (!task) {
|
|
160
|
+
throw new Error(`Task not found: ${taskId}`);
|
|
161
|
+
}
|
|
162
|
+
task.status = 'failed';
|
|
163
|
+
task.completedAt = new Date();
|
|
164
|
+
task.error = error;
|
|
165
|
+
this.metrics.failedTasks++;
|
|
166
|
+
this.eventBus.emit(SystemEventTypes.TASK_FAILED, {
|
|
167
|
+
taskId,
|
|
168
|
+
error,
|
|
169
|
+
retryable: this.isRetryable(task),
|
|
170
|
+
});
|
|
171
|
+
}
|
|
172
|
+
async cancelTask(taskId, reason) {
|
|
173
|
+
const task = this.tasks.get(taskId);
|
|
174
|
+
if (!task) {
|
|
175
|
+
throw new Error(`Task not found: ${taskId}`);
|
|
176
|
+
}
|
|
177
|
+
task.status = 'cancelled';
|
|
178
|
+
task.completedAt = new Date();
|
|
179
|
+
this.metrics.cancelledTasks++;
|
|
180
|
+
this.eventBus.emit(SystemEventTypes.TASK_CANCELLED, {
|
|
181
|
+
taskId,
|
|
182
|
+
reason: reason ?? 'User requested',
|
|
183
|
+
});
|
|
184
|
+
}
|
|
185
|
+
async retryTask(taskId) {
|
|
186
|
+
const task = this.tasks.get(taskId);
|
|
187
|
+
if (!task) {
|
|
188
|
+
throw new Error(`Task not found: ${taskId}`);
|
|
189
|
+
}
|
|
190
|
+
const retryCount = task.metadata?.retryCount ?? 0;
|
|
191
|
+
const maxRetries = task.metadata?.maxRetries ?? 3;
|
|
192
|
+
if (retryCount >= maxRetries) {
|
|
193
|
+
throw new Error(`Task ${taskId} has exceeded max retries`);
|
|
194
|
+
}
|
|
195
|
+
task.status = 'pending';
|
|
196
|
+
task.assignedAgent = undefined;
|
|
197
|
+
task.startedAt = undefined;
|
|
198
|
+
task.completedAt = undefined;
|
|
199
|
+
task.error = undefined;
|
|
200
|
+
task.metadata = {
|
|
201
|
+
...task.metadata,
|
|
202
|
+
retryCount: retryCount + 1,
|
|
203
|
+
};
|
|
204
|
+
await this.queue.enqueue(task);
|
|
205
|
+
this.eventBus.emit(SystemEventTypes.TASK_RETRY, {
|
|
206
|
+
taskId,
|
|
207
|
+
attempt: retryCount + 1,
|
|
208
|
+
maxAttempts: maxRetries,
|
|
209
|
+
error: task.error,
|
|
210
|
+
});
|
|
211
|
+
}
|
|
212
|
+
getMetrics() {
|
|
213
|
+
const pendingTasks = this.getTasks({ status: 'pending' }).length;
|
|
214
|
+
const runningTasks = this.getTasks({ status: 'running' }).length;
|
|
215
|
+
return {
|
|
216
|
+
totalTasks: this.metrics.totalTasks,
|
|
217
|
+
pendingTasks,
|
|
218
|
+
runningTasks,
|
|
219
|
+
completedTasks: this.metrics.completedTasks,
|
|
220
|
+
failedTasks: this.metrics.failedTasks,
|
|
221
|
+
cancelledTasks: this.metrics.cancelledTasks,
|
|
222
|
+
avgDuration: this.metrics.completedTasks > 0
|
|
223
|
+
? this.metrics.totalDuration / this.metrics.completedTasks
|
|
224
|
+
: 0,
|
|
225
|
+
avgWaitTime: this.metrics.completedTasks > 0
|
|
226
|
+
? this.metrics.totalWaitTime / this.metrics.completedTasks
|
|
227
|
+
: 0,
|
|
228
|
+
};
|
|
229
|
+
}
|
|
230
|
+
async cleanup(olderThan) {
|
|
231
|
+
let cleaned = 0;
|
|
232
|
+
const cutoffTime = olderThan.getTime();
|
|
233
|
+
for (const [taskId, task] of this.tasks.entries()) {
|
|
234
|
+
if (task.completedAt && task.completedAt.getTime() < cutoffTime) {
|
|
235
|
+
this.tasks.delete(taskId);
|
|
236
|
+
cleaned++;
|
|
237
|
+
}
|
|
238
|
+
}
|
|
239
|
+
return cleaned;
|
|
240
|
+
}
|
|
241
|
+
isRetryable(task) {
|
|
242
|
+
const retryCount = task.metadata?.retryCount ?? 0;
|
|
243
|
+
const maxRetries = task.metadata?.maxRetries ?? 3;
|
|
244
|
+
return retryCount < maxRetries;
|
|
245
|
+
}
|
|
246
|
+
/**
|
|
247
|
+
* Get the task queue
|
|
248
|
+
*/
|
|
249
|
+
getQueue() {
|
|
250
|
+
return this.queue;
|
|
251
|
+
}
|
|
252
|
+
}
|
|
253
|
+
//# sourceMappingURL=task-manager.js.map
|
|
@@ -0,0 +1,282 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Domain Events for Event Sourcing (ADR-007)
|
|
3
|
+
*
|
|
4
|
+
* Defines all domain events for the V3 system:
|
|
5
|
+
* - Agent lifecycle events (spawned, started, stopped, failed)
|
|
6
|
+
* - Task execution events (created, started, completed, failed)
|
|
7
|
+
* - Memory operations events (stored, retrieved, deleted)
|
|
8
|
+
* - Swarm coordination events (initialized, scaled, terminated)
|
|
9
|
+
*
|
|
10
|
+
* @module v3/shared/events/domain-events
|
|
11
|
+
*/
|
|
12
|
+
import { AgentId, TaskId } from '../types.js';
|
|
13
|
+
export interface DomainEvent {
|
|
14
|
+
/** Unique event identifier */
|
|
15
|
+
id: string;
|
|
16
|
+
/** Event type discriminator */
|
|
17
|
+
type: string;
|
|
18
|
+
/** Aggregate ID (entity the event belongs to) */
|
|
19
|
+
aggregateId: string;
|
|
20
|
+
/** Aggregate type (agent, task, memory, swarm) */
|
|
21
|
+
aggregateType: 'agent' | 'task' | 'memory' | 'swarm';
|
|
22
|
+
/** Event version for ordering */
|
|
23
|
+
version: number;
|
|
24
|
+
/** Timestamp when event occurred */
|
|
25
|
+
timestamp: number;
|
|
26
|
+
/** Event source (agent or swarm system) */
|
|
27
|
+
source: AgentId | 'swarm';
|
|
28
|
+
/** Event payload data */
|
|
29
|
+
payload: Record<string, unknown>;
|
|
30
|
+
/** Optional metadata */
|
|
31
|
+
metadata?: Record<string, unknown>;
|
|
32
|
+
/** Optional causation ID (event that caused this event) */
|
|
33
|
+
causationId?: string;
|
|
34
|
+
/** Optional correlation ID (groups related events) */
|
|
35
|
+
correlationId?: string;
|
|
36
|
+
}
|
|
37
|
+
export interface AgentSpawnedEvent extends DomainEvent {
|
|
38
|
+
type: 'agent:spawned';
|
|
39
|
+
aggregateType: 'agent';
|
|
40
|
+
payload: {
|
|
41
|
+
agentId: AgentId;
|
|
42
|
+
role: string;
|
|
43
|
+
domain: string;
|
|
44
|
+
capabilities: string[];
|
|
45
|
+
};
|
|
46
|
+
}
|
|
47
|
+
export interface AgentStartedEvent extends DomainEvent {
|
|
48
|
+
type: 'agent:started';
|
|
49
|
+
aggregateType: 'agent';
|
|
50
|
+
payload: {
|
|
51
|
+
agentId: AgentId;
|
|
52
|
+
startedAt: number;
|
|
53
|
+
};
|
|
54
|
+
}
|
|
55
|
+
export interface AgentStoppedEvent extends DomainEvent {
|
|
56
|
+
type: 'agent:stopped';
|
|
57
|
+
aggregateType: 'agent';
|
|
58
|
+
payload: {
|
|
59
|
+
agentId: AgentId;
|
|
60
|
+
reason: string;
|
|
61
|
+
stoppedAt: number;
|
|
62
|
+
};
|
|
63
|
+
}
|
|
64
|
+
export interface AgentFailedEvent extends DomainEvent {
|
|
65
|
+
type: 'agent:failed';
|
|
66
|
+
aggregateType: 'agent';
|
|
67
|
+
payload: {
|
|
68
|
+
agentId: AgentId;
|
|
69
|
+
error: string;
|
|
70
|
+
stack?: string;
|
|
71
|
+
failedAt: number;
|
|
72
|
+
};
|
|
73
|
+
}
|
|
74
|
+
export interface AgentStatusChangedEvent extends DomainEvent {
|
|
75
|
+
type: 'agent:status-changed';
|
|
76
|
+
aggregateType: 'agent';
|
|
77
|
+
payload: {
|
|
78
|
+
agentId: AgentId;
|
|
79
|
+
previousStatus: string;
|
|
80
|
+
newStatus: string;
|
|
81
|
+
};
|
|
82
|
+
}
|
|
83
|
+
export interface AgentTaskAssignedEvent extends DomainEvent {
|
|
84
|
+
type: 'agent:task-assigned';
|
|
85
|
+
aggregateType: 'agent';
|
|
86
|
+
payload: {
|
|
87
|
+
agentId: AgentId;
|
|
88
|
+
taskId: TaskId;
|
|
89
|
+
assignedAt: number;
|
|
90
|
+
};
|
|
91
|
+
}
|
|
92
|
+
export interface AgentTaskCompletedEvent extends DomainEvent {
|
|
93
|
+
type: 'agent:task-completed';
|
|
94
|
+
aggregateType: 'agent';
|
|
95
|
+
payload: {
|
|
96
|
+
agentId: AgentId;
|
|
97
|
+
taskId: TaskId;
|
|
98
|
+
result: unknown;
|
|
99
|
+
completedAt: number;
|
|
100
|
+
duration: number;
|
|
101
|
+
};
|
|
102
|
+
}
|
|
103
|
+
export interface TaskCreatedEvent extends DomainEvent {
|
|
104
|
+
type: 'task:created';
|
|
105
|
+
aggregateType: 'task';
|
|
106
|
+
payload: {
|
|
107
|
+
taskId: TaskId;
|
|
108
|
+
taskType: string;
|
|
109
|
+
title: string;
|
|
110
|
+
description: string;
|
|
111
|
+
priority: string;
|
|
112
|
+
dependencies: TaskId[];
|
|
113
|
+
createdAt: number;
|
|
114
|
+
};
|
|
115
|
+
}
|
|
116
|
+
export interface TaskStartedEvent extends DomainEvent {
|
|
117
|
+
type: 'task:started';
|
|
118
|
+
aggregateType: 'task';
|
|
119
|
+
payload: {
|
|
120
|
+
taskId: TaskId;
|
|
121
|
+
agentId: AgentId;
|
|
122
|
+
startedAt: number;
|
|
123
|
+
};
|
|
124
|
+
}
|
|
125
|
+
export interface TaskCompletedEvent extends DomainEvent {
|
|
126
|
+
type: 'task:completed';
|
|
127
|
+
aggregateType: 'task';
|
|
128
|
+
payload: {
|
|
129
|
+
taskId: TaskId;
|
|
130
|
+
result: unknown;
|
|
131
|
+
completedAt: number;
|
|
132
|
+
duration: number;
|
|
133
|
+
};
|
|
134
|
+
}
|
|
135
|
+
export interface TaskFailedEvent extends DomainEvent {
|
|
136
|
+
type: 'task:failed';
|
|
137
|
+
aggregateType: 'task';
|
|
138
|
+
payload: {
|
|
139
|
+
taskId: TaskId;
|
|
140
|
+
error: string;
|
|
141
|
+
stack?: string;
|
|
142
|
+
failedAt: number;
|
|
143
|
+
retryCount: number;
|
|
144
|
+
};
|
|
145
|
+
}
|
|
146
|
+
export interface TaskBlockedEvent extends DomainEvent {
|
|
147
|
+
type: 'task:blocked';
|
|
148
|
+
aggregateType: 'task';
|
|
149
|
+
payload: {
|
|
150
|
+
taskId: TaskId;
|
|
151
|
+
blockedBy: TaskId[];
|
|
152
|
+
blockedAt: number;
|
|
153
|
+
};
|
|
154
|
+
}
|
|
155
|
+
export interface TaskQueuedEvent extends DomainEvent {
|
|
156
|
+
type: 'task:queued';
|
|
157
|
+
aggregateType: 'task';
|
|
158
|
+
payload: {
|
|
159
|
+
taskId: TaskId;
|
|
160
|
+
priority: string;
|
|
161
|
+
queuedAt: number;
|
|
162
|
+
};
|
|
163
|
+
}
|
|
164
|
+
export interface MemoryStoredEvent extends DomainEvent {
|
|
165
|
+
type: 'memory:stored';
|
|
166
|
+
aggregateType: 'memory';
|
|
167
|
+
payload: {
|
|
168
|
+
memoryId: string;
|
|
169
|
+
namespace: string;
|
|
170
|
+
key: string;
|
|
171
|
+
memoryType: string;
|
|
172
|
+
size: number;
|
|
173
|
+
storedAt: number;
|
|
174
|
+
};
|
|
175
|
+
}
|
|
176
|
+
export interface MemoryRetrievedEvent extends DomainEvent {
|
|
177
|
+
type: 'memory:retrieved';
|
|
178
|
+
aggregateType: 'memory';
|
|
179
|
+
payload: {
|
|
180
|
+
memoryId: string;
|
|
181
|
+
namespace: string;
|
|
182
|
+
key: string;
|
|
183
|
+
retrievedAt: number;
|
|
184
|
+
accessCount: number;
|
|
185
|
+
};
|
|
186
|
+
}
|
|
187
|
+
export interface MemoryDeletedEvent extends DomainEvent {
|
|
188
|
+
type: 'memory:deleted';
|
|
189
|
+
aggregateType: 'memory';
|
|
190
|
+
payload: {
|
|
191
|
+
memoryId: string;
|
|
192
|
+
namespace: string;
|
|
193
|
+
key: string;
|
|
194
|
+
deletedAt: number;
|
|
195
|
+
};
|
|
196
|
+
}
|
|
197
|
+
export interface MemoryExpiredEvent extends DomainEvent {
|
|
198
|
+
type: 'memory:expired';
|
|
199
|
+
aggregateType: 'memory';
|
|
200
|
+
payload: {
|
|
201
|
+
memoryId: string;
|
|
202
|
+
namespace: string;
|
|
203
|
+
key: string;
|
|
204
|
+
expiredAt: number;
|
|
205
|
+
expiresAt: number;
|
|
206
|
+
};
|
|
207
|
+
}
|
|
208
|
+
export interface SwarmInitializedEvent extends DomainEvent {
|
|
209
|
+
type: 'swarm:initialized';
|
|
210
|
+
aggregateType: 'swarm';
|
|
211
|
+
payload: {
|
|
212
|
+
topology: string;
|
|
213
|
+
maxAgents: number;
|
|
214
|
+
config: Record<string, unknown>;
|
|
215
|
+
initializedAt: number;
|
|
216
|
+
};
|
|
217
|
+
}
|
|
218
|
+
export interface SwarmScaledEvent extends DomainEvent {
|
|
219
|
+
type: 'swarm:scaled';
|
|
220
|
+
aggregateType: 'swarm';
|
|
221
|
+
payload: {
|
|
222
|
+
previousAgentCount: number;
|
|
223
|
+
newAgentCount: number;
|
|
224
|
+
scaledAt: number;
|
|
225
|
+
reason: string;
|
|
226
|
+
};
|
|
227
|
+
}
|
|
228
|
+
export interface SwarmTerminatedEvent extends DomainEvent {
|
|
229
|
+
type: 'swarm:terminated';
|
|
230
|
+
aggregateType: 'swarm';
|
|
231
|
+
payload: {
|
|
232
|
+
reason: string;
|
|
233
|
+
terminatedAt: number;
|
|
234
|
+
metrics: Record<string, unknown>;
|
|
235
|
+
};
|
|
236
|
+
}
|
|
237
|
+
export interface SwarmPhaseChangedEvent extends DomainEvent {
|
|
238
|
+
type: 'swarm:phase-changed';
|
|
239
|
+
aggregateType: 'swarm';
|
|
240
|
+
payload: {
|
|
241
|
+
previousPhase: string;
|
|
242
|
+
newPhase: string;
|
|
243
|
+
changedAt: number;
|
|
244
|
+
};
|
|
245
|
+
}
|
|
246
|
+
export interface SwarmMilestoneReachedEvent extends DomainEvent {
|
|
247
|
+
type: 'swarm:milestone-reached';
|
|
248
|
+
aggregateType: 'swarm';
|
|
249
|
+
payload: {
|
|
250
|
+
milestoneId: string;
|
|
251
|
+
name: string;
|
|
252
|
+
reachedAt: number;
|
|
253
|
+
};
|
|
254
|
+
}
|
|
255
|
+
export interface SwarmErrorEvent extends DomainEvent {
|
|
256
|
+
type: 'swarm:error';
|
|
257
|
+
aggregateType: 'swarm';
|
|
258
|
+
payload: {
|
|
259
|
+
error: string;
|
|
260
|
+
stack?: string;
|
|
261
|
+
context: Record<string, unknown>;
|
|
262
|
+
errorAt: number;
|
|
263
|
+
};
|
|
264
|
+
}
|
|
265
|
+
export type AllDomainEvents = AgentSpawnedEvent | AgentStartedEvent | AgentStoppedEvent | AgentFailedEvent | AgentStatusChangedEvent | AgentTaskAssignedEvent | AgentTaskCompletedEvent | TaskCreatedEvent | TaskStartedEvent | TaskCompletedEvent | TaskFailedEvent | TaskBlockedEvent | TaskQueuedEvent | MemoryStoredEvent | MemoryRetrievedEvent | MemoryDeletedEvent | MemoryExpiredEvent | SwarmInitializedEvent | SwarmScaledEvent | SwarmTerminatedEvent | SwarmPhaseChangedEvent | SwarmMilestoneReachedEvent | SwarmErrorEvent;
|
|
266
|
+
export declare function createAgentSpawnedEvent(agentId: AgentId, role: string, domain: string, capabilities: string[]): AgentSpawnedEvent;
|
|
267
|
+
export declare function createAgentStartedEvent(agentId: AgentId): AgentStartedEvent;
|
|
268
|
+
export declare function createAgentStoppedEvent(agentId: AgentId, reason: string): AgentStoppedEvent;
|
|
269
|
+
export declare function createAgentFailedEvent(agentId: AgentId, error: Error): AgentFailedEvent;
|
|
270
|
+
export declare function createAgentTaskAssignedEvent(agentId: AgentId, taskId: TaskId, assignedAt?: number): AgentTaskAssignedEvent;
|
|
271
|
+
export declare function createAgentTaskCompletedEvent(agentId: AgentId, taskId: TaskId, result: unknown, completedAt: number, duration: number): AgentTaskCompletedEvent;
|
|
272
|
+
export declare function createTaskCreatedEvent(taskId: TaskId, taskType: string, title: string, description: string, priority: string, dependencies: TaskId[]): TaskCreatedEvent;
|
|
273
|
+
export declare function createTaskStartedEvent(taskId: TaskId, agentId: AgentId): TaskStartedEvent;
|
|
274
|
+
export declare function createTaskCompletedEvent(taskId: TaskId, result: unknown, duration: number): TaskCompletedEvent;
|
|
275
|
+
export declare function createTaskFailedEvent(taskId: TaskId, error: Error, retryCount: number): TaskFailedEvent;
|
|
276
|
+
export declare function createMemoryStoredEvent(memoryId: string, namespace: string, key: string, memoryType: string, size: number): MemoryStoredEvent;
|
|
277
|
+
export declare function createMemoryRetrievedEvent(memoryId: string, namespace: string, key: string, accessCount: number): MemoryRetrievedEvent;
|
|
278
|
+
export declare function createMemoryDeletedEvent(memoryId: string, namespace: string, key: string): MemoryDeletedEvent;
|
|
279
|
+
export declare function createSwarmInitializedEvent(topology: string, maxAgents: number, config: Record<string, unknown>): SwarmInitializedEvent;
|
|
280
|
+
export declare function createSwarmScaledEvent(previousAgentCount: number, newAgentCount: number, reason: string): SwarmScaledEvent;
|
|
281
|
+
export declare function createSwarmTerminatedEvent(reason: string, metrics: Record<string, unknown>): SwarmTerminatedEvent;
|
|
282
|
+
//# sourceMappingURL=domain-events.d.ts.map
|
|
@@ -0,0 +1,165 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Domain Events for Event Sourcing (ADR-007)
|
|
3
|
+
*
|
|
4
|
+
* Defines all domain events for the V3 system:
|
|
5
|
+
* - Agent lifecycle events (spawned, started, stopped, failed)
|
|
6
|
+
* - Task execution events (created, started, completed, failed)
|
|
7
|
+
* - Memory operations events (stored, retrieved, deleted)
|
|
8
|
+
* - Swarm coordination events (initialized, scaled, terminated)
|
|
9
|
+
*
|
|
10
|
+
* @module v3/shared/events/domain-events
|
|
11
|
+
*/
|
|
12
|
+
// =============================================================================
|
|
13
|
+
// Event Factory Functions
|
|
14
|
+
// =============================================================================
|
|
15
|
+
let eventCounter = 0;
|
|
16
|
+
function createDomainEvent(type, aggregateId, aggregateType, payload, metadata, causationId, correlationId) {
|
|
17
|
+
return {
|
|
18
|
+
id: `evt-${Date.now()}-${++eventCounter}`,
|
|
19
|
+
type,
|
|
20
|
+
aggregateId,
|
|
21
|
+
aggregateType,
|
|
22
|
+
version: 1, // Version will be set by event store
|
|
23
|
+
timestamp: Date.now(),
|
|
24
|
+
source: 'swarm', // Default to swarm, can be overridden
|
|
25
|
+
payload,
|
|
26
|
+
metadata,
|
|
27
|
+
causationId,
|
|
28
|
+
correlationId,
|
|
29
|
+
};
|
|
30
|
+
}
|
|
31
|
+
// Agent Event Factories
|
|
32
|
+
export function createAgentSpawnedEvent(agentId, role, domain, capabilities) {
|
|
33
|
+
return createDomainEvent('agent:spawned', agentId, 'agent', {
|
|
34
|
+
agentId,
|
|
35
|
+
role,
|
|
36
|
+
domain,
|
|
37
|
+
capabilities,
|
|
38
|
+
});
|
|
39
|
+
}
|
|
40
|
+
export function createAgentStartedEvent(agentId) {
|
|
41
|
+
return createDomainEvent('agent:started', agentId, 'agent', {
|
|
42
|
+
agentId,
|
|
43
|
+
startedAt: Date.now(),
|
|
44
|
+
});
|
|
45
|
+
}
|
|
46
|
+
export function createAgentStoppedEvent(agentId, reason) {
|
|
47
|
+
return createDomainEvent('agent:stopped', agentId, 'agent', {
|
|
48
|
+
agentId,
|
|
49
|
+
reason,
|
|
50
|
+
stoppedAt: Date.now(),
|
|
51
|
+
});
|
|
52
|
+
}
|
|
53
|
+
export function createAgentFailedEvent(agentId, error) {
|
|
54
|
+
return createDomainEvent('agent:failed', agentId, 'agent', {
|
|
55
|
+
agentId,
|
|
56
|
+
error: error.message,
|
|
57
|
+
stack: error.stack,
|
|
58
|
+
failedAt: Date.now(),
|
|
59
|
+
});
|
|
60
|
+
}
|
|
61
|
+
export function createAgentTaskAssignedEvent(agentId, taskId, assignedAt) {
|
|
62
|
+
return createDomainEvent('agent:task-assigned', agentId, 'agent', {
|
|
63
|
+
agentId,
|
|
64
|
+
taskId,
|
|
65
|
+
assignedAt: assignedAt ?? Date.now(),
|
|
66
|
+
});
|
|
67
|
+
}
|
|
68
|
+
export function createAgentTaskCompletedEvent(agentId, taskId, result, completedAt, duration) {
|
|
69
|
+
return createDomainEvent('agent:task-completed', agentId, 'agent', {
|
|
70
|
+
agentId,
|
|
71
|
+
taskId,
|
|
72
|
+
result,
|
|
73
|
+
completedAt,
|
|
74
|
+
duration,
|
|
75
|
+
});
|
|
76
|
+
}
|
|
77
|
+
// Task Event Factories
|
|
78
|
+
export function createTaskCreatedEvent(taskId, taskType, title, description, priority, dependencies) {
|
|
79
|
+
return createDomainEvent('task:created', taskId, 'task', {
|
|
80
|
+
taskId,
|
|
81
|
+
taskType,
|
|
82
|
+
title,
|
|
83
|
+
description,
|
|
84
|
+
priority,
|
|
85
|
+
dependencies,
|
|
86
|
+
createdAt: Date.now(),
|
|
87
|
+
});
|
|
88
|
+
}
|
|
89
|
+
export function createTaskStartedEvent(taskId, agentId) {
|
|
90
|
+
return createDomainEvent('task:started', taskId, 'task', {
|
|
91
|
+
taskId,
|
|
92
|
+
agentId,
|
|
93
|
+
startedAt: Date.now(),
|
|
94
|
+
});
|
|
95
|
+
}
|
|
96
|
+
export function createTaskCompletedEvent(taskId, result, duration) {
|
|
97
|
+
return createDomainEvent('task:completed', taskId, 'task', {
|
|
98
|
+
taskId,
|
|
99
|
+
result,
|
|
100
|
+
completedAt: Date.now(),
|
|
101
|
+
duration,
|
|
102
|
+
});
|
|
103
|
+
}
|
|
104
|
+
export function createTaskFailedEvent(taskId, error, retryCount) {
|
|
105
|
+
return createDomainEvent('task:failed', taskId, 'task', {
|
|
106
|
+
taskId,
|
|
107
|
+
error: error.message,
|
|
108
|
+
stack: error.stack,
|
|
109
|
+
failedAt: Date.now(),
|
|
110
|
+
retryCount,
|
|
111
|
+
});
|
|
112
|
+
}
|
|
113
|
+
// Memory Event Factories
|
|
114
|
+
export function createMemoryStoredEvent(memoryId, namespace, key, memoryType, size) {
|
|
115
|
+
return createDomainEvent('memory:stored', memoryId, 'memory', {
|
|
116
|
+
memoryId,
|
|
117
|
+
namespace,
|
|
118
|
+
key,
|
|
119
|
+
memoryType,
|
|
120
|
+
size,
|
|
121
|
+
storedAt: Date.now(),
|
|
122
|
+
});
|
|
123
|
+
}
|
|
124
|
+
export function createMemoryRetrievedEvent(memoryId, namespace, key, accessCount) {
|
|
125
|
+
return createDomainEvent('memory:retrieved', memoryId, 'memory', {
|
|
126
|
+
memoryId,
|
|
127
|
+
namespace,
|
|
128
|
+
key,
|
|
129
|
+
retrievedAt: Date.now(),
|
|
130
|
+
accessCount,
|
|
131
|
+
});
|
|
132
|
+
}
|
|
133
|
+
export function createMemoryDeletedEvent(memoryId, namespace, key) {
|
|
134
|
+
return createDomainEvent('memory:deleted', memoryId, 'memory', {
|
|
135
|
+
memoryId,
|
|
136
|
+
namespace,
|
|
137
|
+
key,
|
|
138
|
+
deletedAt: Date.now(),
|
|
139
|
+
});
|
|
140
|
+
}
|
|
141
|
+
// Swarm Event Factories
|
|
142
|
+
export function createSwarmInitializedEvent(topology, maxAgents, config) {
|
|
143
|
+
return createDomainEvent('swarm:initialized', 'swarm', 'swarm', {
|
|
144
|
+
topology,
|
|
145
|
+
maxAgents,
|
|
146
|
+
config,
|
|
147
|
+
initializedAt: Date.now(),
|
|
148
|
+
});
|
|
149
|
+
}
|
|
150
|
+
export function createSwarmScaledEvent(previousAgentCount, newAgentCount, reason) {
|
|
151
|
+
return createDomainEvent('swarm:scaled', 'swarm', 'swarm', {
|
|
152
|
+
previousAgentCount,
|
|
153
|
+
newAgentCount,
|
|
154
|
+
scaledAt: Date.now(),
|
|
155
|
+
reason,
|
|
156
|
+
});
|
|
157
|
+
}
|
|
158
|
+
export function createSwarmTerminatedEvent(reason, metrics) {
|
|
159
|
+
return createDomainEvent('swarm:terminated', 'swarm', 'swarm', {
|
|
160
|
+
reason,
|
|
161
|
+
terminatedAt: Date.now(),
|
|
162
|
+
metrics,
|
|
163
|
+
});
|
|
164
|
+
}
|
|
165
|
+
//# sourceMappingURL=domain-events.js.map
|