165 lines
4.9 KiB
JavaScript
165 lines
4.9 KiB
JavaScript
/**
|
|
* Domain Events for Event Sourcing (ADR-007)
|
|
*
|
|
* Defines all domain events for the V3 system:
|
|
* - Agent lifecycle events (spawned, started, stopped, failed)
|
|
* - Task execution events (created, started, completed, failed)
|
|
* - Memory operations events (stored, retrieved, deleted)
|
|
* - Swarm coordination events (initialized, scaled, terminated)
|
|
*
|
|
* @module v3/shared/events/domain-events
|
|
*/
|
|
// =============================================================================
|
|
// Event Factory Functions
|
|
// =============================================================================
|
|
let eventCounter = 0;
|
|
function createDomainEvent(type, aggregateId, aggregateType, payload, metadata, causationId, correlationId) {
|
|
return {
|
|
id: `evt-${Date.now()}-${++eventCounter}`,
|
|
type,
|
|
aggregateId,
|
|
aggregateType,
|
|
version: 1, // Version will be set by event store
|
|
timestamp: Date.now(),
|
|
source: 'swarm', // Default to swarm, can be overridden
|
|
payload,
|
|
metadata,
|
|
causationId,
|
|
correlationId,
|
|
};
|
|
}
|
|
// Agent Event Factories
|
|
export function createAgentSpawnedEvent(agentId, role, domain, capabilities) {
|
|
return createDomainEvent('agent:spawned', agentId, 'agent', {
|
|
agentId,
|
|
role,
|
|
domain,
|
|
capabilities,
|
|
});
|
|
}
|
|
export function createAgentStartedEvent(agentId) {
|
|
return createDomainEvent('agent:started', agentId, 'agent', {
|
|
agentId,
|
|
startedAt: Date.now(),
|
|
});
|
|
}
|
|
export function createAgentStoppedEvent(agentId, reason) {
|
|
return createDomainEvent('agent:stopped', agentId, 'agent', {
|
|
agentId,
|
|
reason,
|
|
stoppedAt: Date.now(),
|
|
});
|
|
}
|
|
export function createAgentFailedEvent(agentId, error) {
|
|
return createDomainEvent('agent:failed', agentId, 'agent', {
|
|
agentId,
|
|
error: error.message,
|
|
stack: error.stack,
|
|
failedAt: Date.now(),
|
|
});
|
|
}
|
|
export function createAgentTaskAssignedEvent(agentId, taskId, assignedAt) {
|
|
return createDomainEvent('agent:task-assigned', agentId, 'agent', {
|
|
agentId,
|
|
taskId,
|
|
assignedAt: assignedAt ?? Date.now(),
|
|
});
|
|
}
|
|
export function createAgentTaskCompletedEvent(agentId, taskId, result, completedAt, duration) {
|
|
return createDomainEvent('agent:task-completed', agentId, 'agent', {
|
|
agentId,
|
|
taskId,
|
|
result,
|
|
completedAt,
|
|
duration,
|
|
});
|
|
}
|
|
// Task Event Factories
|
|
export function createTaskCreatedEvent(taskId, taskType, title, description, priority, dependencies) {
|
|
return createDomainEvent('task:created', taskId, 'task', {
|
|
taskId,
|
|
taskType,
|
|
title,
|
|
description,
|
|
priority,
|
|
dependencies,
|
|
createdAt: Date.now(),
|
|
});
|
|
}
|
|
export function createTaskStartedEvent(taskId, agentId) {
|
|
return createDomainEvent('task:started', taskId, 'task', {
|
|
taskId,
|
|
agentId,
|
|
startedAt: Date.now(),
|
|
});
|
|
}
|
|
export function createTaskCompletedEvent(taskId, result, duration) {
|
|
return createDomainEvent('task:completed', taskId, 'task', {
|
|
taskId,
|
|
result,
|
|
completedAt: Date.now(),
|
|
duration,
|
|
});
|
|
}
|
|
export function createTaskFailedEvent(taskId, error, retryCount) {
|
|
return createDomainEvent('task:failed', taskId, 'task', {
|
|
taskId,
|
|
error: error.message,
|
|
stack: error.stack,
|
|
failedAt: Date.now(),
|
|
retryCount,
|
|
});
|
|
}
|
|
// Memory Event Factories
|
|
export function createMemoryStoredEvent(memoryId, namespace, key, memoryType, size) {
|
|
return createDomainEvent('memory:stored', memoryId, 'memory', {
|
|
memoryId,
|
|
namespace,
|
|
key,
|
|
memoryType,
|
|
size,
|
|
storedAt: Date.now(),
|
|
});
|
|
}
|
|
export function createMemoryRetrievedEvent(memoryId, namespace, key, accessCount) {
|
|
return createDomainEvent('memory:retrieved', memoryId, 'memory', {
|
|
memoryId,
|
|
namespace,
|
|
key,
|
|
retrievedAt: Date.now(),
|
|
accessCount,
|
|
});
|
|
}
|
|
export function createMemoryDeletedEvent(memoryId, namespace, key) {
|
|
return createDomainEvent('memory:deleted', memoryId, 'memory', {
|
|
memoryId,
|
|
namespace,
|
|
key,
|
|
deletedAt: Date.now(),
|
|
});
|
|
}
|
|
// Swarm Event Factories
|
|
export function createSwarmInitializedEvent(topology, maxAgents, config) {
|
|
return createDomainEvent('swarm:initialized', 'swarm', 'swarm', {
|
|
topology,
|
|
maxAgents,
|
|
config,
|
|
initializedAt: Date.now(),
|
|
});
|
|
}
|
|
export function createSwarmScaledEvent(previousAgentCount, newAgentCount, reason) {
|
|
return createDomainEvent('swarm:scaled', 'swarm', 'swarm', {
|
|
previousAgentCount,
|
|
newAgentCount,
|
|
scaledAt: Date.now(),
|
|
reason,
|
|
});
|
|
}
|
|
export function createSwarmTerminatedEvent(reason, metrics) {
|
|
return createDomainEvent('swarm:terminated', 'swarm', 'swarm', {
|
|
reason,
|
|
terminatedAt: Date.now(),
|
|
metrics,
|
|
});
|
|
}
|
|
//# sourceMappingURL=domain-events.js.map
|