@sparkleideas/shared 3.0.0-alpha.7

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 (96) hide show
  1. package/README.md +323 -0
  2. package/__tests__/hooks/bash-safety.test.ts +289 -0
  3. package/__tests__/hooks/file-organization.test.ts +335 -0
  4. package/__tests__/hooks/git-commit.test.ts +336 -0
  5. package/__tests__/hooks/index.ts +23 -0
  6. package/__tests__/hooks/session-hooks.test.ts +357 -0
  7. package/__tests__/hooks/task-hooks.test.ts +193 -0
  8. package/docs/EVENTS_IMPLEMENTATION_SUMMARY.md +388 -0
  9. package/docs/EVENTS_QUICK_REFERENCE.md +470 -0
  10. package/docs/EVENTS_README.md +352 -0
  11. package/package.json +39 -0
  12. package/src/core/config/defaults.ts +207 -0
  13. package/src/core/config/index.ts +15 -0
  14. package/src/core/config/loader.ts +271 -0
  15. package/src/core/config/schema.ts +188 -0
  16. package/src/core/config/validator.ts +209 -0
  17. package/src/core/event-bus.ts +236 -0
  18. package/src/core/index.ts +22 -0
  19. package/src/core/interfaces/agent.interface.ts +251 -0
  20. package/src/core/interfaces/coordinator.interface.ts +363 -0
  21. package/src/core/interfaces/event.interface.ts +267 -0
  22. package/src/core/interfaces/index.ts +19 -0
  23. package/src/core/interfaces/memory.interface.ts +332 -0
  24. package/src/core/interfaces/task.interface.ts +223 -0
  25. package/src/core/orchestrator/event-coordinator.ts +122 -0
  26. package/src/core/orchestrator/health-monitor.ts +214 -0
  27. package/src/core/orchestrator/index.ts +89 -0
  28. package/src/core/orchestrator/lifecycle-manager.ts +263 -0
  29. package/src/core/orchestrator/session-manager.ts +279 -0
  30. package/src/core/orchestrator/task-manager.ts +317 -0
  31. package/src/events/domain-events.ts +584 -0
  32. package/src/events/event-store.test.ts +387 -0
  33. package/src/events/event-store.ts +588 -0
  34. package/src/events/example-usage.ts +293 -0
  35. package/src/events/index.ts +90 -0
  36. package/src/events/projections.ts +561 -0
  37. package/src/events/state-reconstructor.ts +349 -0
  38. package/src/events.ts +367 -0
  39. package/src/hooks/INTEGRATION.md +658 -0
  40. package/src/hooks/README.md +532 -0
  41. package/src/hooks/example-usage.ts +499 -0
  42. package/src/hooks/executor.ts +379 -0
  43. package/src/hooks/hooks.test.ts +421 -0
  44. package/src/hooks/index.ts +131 -0
  45. package/src/hooks/registry.ts +333 -0
  46. package/src/hooks/safety/bash-safety.ts +604 -0
  47. package/src/hooks/safety/file-organization.ts +473 -0
  48. package/src/hooks/safety/git-commit.ts +623 -0
  49. package/src/hooks/safety/index.ts +46 -0
  50. package/src/hooks/session-hooks.ts +559 -0
  51. package/src/hooks/task-hooks.ts +513 -0
  52. package/src/hooks/types.ts +357 -0
  53. package/src/hooks/verify-exports.test.ts +125 -0
  54. package/src/index.ts +195 -0
  55. package/src/mcp/connection-pool.ts +438 -0
  56. package/src/mcp/index.ts +183 -0
  57. package/src/mcp/server.ts +774 -0
  58. package/src/mcp/session-manager.ts +428 -0
  59. package/src/mcp/tool-registry.ts +566 -0
  60. package/src/mcp/transport/http.ts +557 -0
  61. package/src/mcp/transport/index.ts +294 -0
  62. package/src/mcp/transport/stdio.ts +324 -0
  63. package/src/mcp/transport/websocket.ts +484 -0
  64. package/src/mcp/types.ts +565 -0
  65. package/src/plugin-interface.ts +663 -0
  66. package/src/plugin-loader.ts +638 -0
  67. package/src/plugin-registry.ts +604 -0
  68. package/src/plugins/index.ts +34 -0
  69. package/src/plugins/official/hive-mind-plugin.ts +330 -0
  70. package/src/plugins/official/index.ts +24 -0
  71. package/src/plugins/official/maestro-plugin.ts +508 -0
  72. package/src/plugins/types.ts +108 -0
  73. package/src/resilience/bulkhead.ts +277 -0
  74. package/src/resilience/circuit-breaker.ts +326 -0
  75. package/src/resilience/index.ts +26 -0
  76. package/src/resilience/rate-limiter.ts +420 -0
  77. package/src/resilience/retry.ts +224 -0
  78. package/src/security/index.ts +39 -0
  79. package/src/security/input-validation.ts +265 -0
  80. package/src/security/secure-random.ts +159 -0
  81. package/src/services/index.ts +16 -0
  82. package/src/services/v3-progress.service.ts +505 -0
  83. package/src/types/agent.types.ts +144 -0
  84. package/src/types/index.ts +22 -0
  85. package/src/types/mcp.types.ts +300 -0
  86. package/src/types/memory.types.ts +263 -0
  87. package/src/types/swarm.types.ts +255 -0
  88. package/src/types/task.types.ts +205 -0
  89. package/src/types.ts +367 -0
  90. package/src/utils/secure-logger.d.ts +69 -0
  91. package/src/utils/secure-logger.d.ts.map +1 -0
  92. package/src/utils/secure-logger.js +208 -0
  93. package/src/utils/secure-logger.js.map +1 -0
  94. package/src/utils/secure-logger.ts +257 -0
  95. package/tmp.json +0 -0
  96. package/tsconfig.json +9 -0
@@ -0,0 +1,255 @@
1
+ /**
2
+ * V3 Swarm Types
3
+ * Modernized type system for swarm coordination
4
+ */
5
+
6
+ import type { ISwarmConfig, ISwarmState, SwarmTopology, CoordinationStatus } from '../core/interfaces/coordinator.interface.js';
7
+ import type { IAgent } from '../core/interfaces/agent.interface.js';
8
+
9
+ /**
10
+ * Swarm initialization options
11
+ */
12
+ export interface SwarmInitOptions extends ISwarmConfig {
13
+ name?: string;
14
+ description?: string;
15
+ initialAgents?: string[];
16
+ warmup?: boolean;
17
+ warmupTasks?: number;
18
+ }
19
+
20
+ /**
21
+ * Swarm initialization result
22
+ */
23
+ export interface SwarmInitResult {
24
+ state: ISwarmState;
25
+ agents: IAgent[];
26
+ startupTime: number;
27
+ ready: boolean;
28
+ }
29
+
30
+ /**
31
+ * Swarm scaling options
32
+ */
33
+ export interface SwarmScaleOptions {
34
+ targetSize: number;
35
+ agentType?: string;
36
+ timeout?: number;
37
+ graceful?: boolean;
38
+ }
39
+
40
+ /**
41
+ * Swarm scaling result
42
+ */
43
+ export interface SwarmScaleResult {
44
+ previousSize: number;
45
+ currentSize: number;
46
+ agentsAdded: string[];
47
+ agentsRemoved: string[];
48
+ duration: number;
49
+ success: boolean;
50
+ }
51
+
52
+ /**
53
+ * Swarm coordination message
54
+ */
55
+ export interface SwarmMessage<T = unknown> {
56
+ id: string;
57
+ type: string;
58
+ source: string;
59
+ target?: string | 'broadcast';
60
+ payload: T;
61
+ timestamp: Date;
62
+ correlationId?: string;
63
+ replyTo?: string;
64
+ ttl?: number;
65
+ }
66
+
67
+ /**
68
+ * Swarm consensus request
69
+ */
70
+ export interface ConsensusRequest<T = unknown> {
71
+ topic: string;
72
+ options: T[];
73
+ requiredVotes: number | 'majority' | 'all';
74
+ timeout: number;
75
+ voters?: string[];
76
+ }
77
+
78
+ /**
79
+ * Swarm consensus response
80
+ */
81
+ export interface ConsensusResponse<T = unknown> {
82
+ topic: string;
83
+ decision: T | null;
84
+ votes: Map<string, T>;
85
+ consensus: boolean;
86
+ votingDuration: number;
87
+ participatingAgents: string[];
88
+ }
89
+
90
+ /**
91
+ * Distributed lock state
92
+ */
93
+ export interface DistributedLock {
94
+ resourceId: string;
95
+ holderId: string;
96
+ acquiredAt: Date;
97
+ expiresAt: Date;
98
+ renewCount: number;
99
+ }
100
+
101
+ /**
102
+ * Lock acquisition result
103
+ */
104
+ export interface LockAcquisitionResult {
105
+ acquired: boolean;
106
+ lock?: DistributedLock;
107
+ waitTime?: number;
108
+ error?: Error;
109
+ }
110
+
111
+ /**
112
+ * Deadlock detection result
113
+ */
114
+ export interface DeadlockDetectionResult {
115
+ detected: boolean;
116
+ agents: string[];
117
+ resources: string[];
118
+ cycle?: string[][];
119
+ suggestedResolution?: string;
120
+ }
121
+
122
+ /**
123
+ * Swarm metrics
124
+ */
125
+ export interface SwarmMetrics {
126
+ topology: SwarmTopology;
127
+ status: CoordinationStatus;
128
+ agentCount: number;
129
+ activeAgentCount: number;
130
+ taskCount: number;
131
+ completedTasks: number;
132
+ failedTasks: number;
133
+ throughput: number;
134
+ avgLatencyMs: number;
135
+ p95LatencyMs: number;
136
+ p99LatencyMs: number;
137
+ successRate: number;
138
+ resourceUtilization: number;
139
+ messagesSent: number;
140
+ messagesReceived: number;
141
+ consensusRounds: number;
142
+ locksAcquired: number;
143
+ deadlocksDetected: number;
144
+ uptime: number;
145
+ timestamp: Date;
146
+ }
147
+
148
+ /**
149
+ * Swarm event payloads
150
+ */
151
+ export interface SwarmEventPayloads {
152
+ 'swarm:initialized': {
153
+ state: ISwarmState;
154
+ config: ISwarmConfig;
155
+ };
156
+ 'swarm:scaled': {
157
+ result: SwarmScaleResult;
158
+ };
159
+ 'swarm:topology:changed': {
160
+ previousTopology: SwarmTopology;
161
+ currentTopology: SwarmTopology;
162
+ };
163
+ 'swarm:status:changed': {
164
+ previousStatus: CoordinationStatus;
165
+ currentStatus: CoordinationStatus;
166
+ };
167
+ 'swarm:message:sent': {
168
+ message: SwarmMessage;
169
+ };
170
+ 'swarm:message:received': {
171
+ message: SwarmMessage;
172
+ };
173
+ 'swarm:consensus:started': {
174
+ request: ConsensusRequest;
175
+ };
176
+ 'swarm:consensus:completed': {
177
+ response: ConsensusResponse;
178
+ };
179
+ 'swarm:lock:acquired': {
180
+ lock: DistributedLock;
181
+ };
182
+ 'swarm:lock:released': {
183
+ resourceId: string;
184
+ holderId: string;
185
+ duration: number;
186
+ };
187
+ 'swarm:deadlock:detected': {
188
+ result: DeadlockDetectionResult;
189
+ };
190
+ 'swarm:shutdown': {
191
+ reason: string;
192
+ graceful: boolean;
193
+ };
194
+ }
195
+
196
+ /**
197
+ * Topology configuration presets
198
+ */
199
+ export const TopologyPresets: Record<SwarmTopology, Partial<ISwarmConfig>> = {
200
+ hierarchical: {
201
+ topology: 'hierarchical',
202
+ coordination: {
203
+ consensusRequired: false,
204
+ timeoutMs: 5000,
205
+ retryPolicy: { maxRetries: 3, backoffMs: 1000 }
206
+ }
207
+ },
208
+ mesh: {
209
+ topology: 'mesh',
210
+ coordination: {
211
+ consensusRequired: true,
212
+ timeoutMs: 10000,
213
+ retryPolicy: { maxRetries: 5, backoffMs: 500 }
214
+ }
215
+ },
216
+ ring: {
217
+ topology: 'ring',
218
+ coordination: {
219
+ consensusRequired: true,
220
+ timeoutMs: 8000,
221
+ retryPolicy: { maxRetries: 4, backoffMs: 750 }
222
+ }
223
+ },
224
+ star: {
225
+ topology: 'star',
226
+ coordination: {
227
+ consensusRequired: false,
228
+ timeoutMs: 3000,
229
+ retryPolicy: { maxRetries: 2, backoffMs: 500 }
230
+ }
231
+ },
232
+ adaptive: {
233
+ topology: 'adaptive',
234
+ autoScale: {
235
+ enabled: true,
236
+ minAgents: 1,
237
+ maxAgents: 20,
238
+ scaleUpThreshold: 0.8,
239
+ scaleDownThreshold: 0.3
240
+ },
241
+ coordination: {
242
+ consensusRequired: true,
243
+ timeoutMs: 10000,
244
+ retryPolicy: { maxRetries: 5, backoffMs: 500 }
245
+ }
246
+ },
247
+ 'hierarchical-mesh': {
248
+ topology: 'hierarchical-mesh',
249
+ coordination: {
250
+ consensusRequired: true,
251
+ timeoutMs: 8000,
252
+ retryPolicy: { maxRetries: 4, backoffMs: 750 }
253
+ }
254
+ }
255
+ };
@@ -0,0 +1,205 @@
1
+ /**
2
+ * V3 Task Types
3
+ * Modernized type system with strict TypeScript
4
+ */
5
+
6
+ import type { ITask, ITaskResult, TaskStatus, TaskPriority } from '../core/interfaces/task.interface.js';
7
+
8
+ /**
9
+ * Task creation input
10
+ */
11
+ export interface TaskInput {
12
+ type: string;
13
+ description: string;
14
+ priority?: number | TaskPriority;
15
+ timeout?: number;
16
+ assignedAgent?: string;
17
+ input?: Record<string, unknown>;
18
+ metadata?: TaskMetadata;
19
+ }
20
+
21
+ /**
22
+ * Task metadata for additional context
23
+ */
24
+ export interface TaskMetadata {
25
+ requiredCapabilities?: string[];
26
+ retryCount?: number;
27
+ maxRetries?: number;
28
+ critical?: boolean;
29
+ parentTaskId?: string;
30
+ childTaskIds?: string[];
31
+ tags?: string[];
32
+ deadline?: Date;
33
+ estimatedDuration?: number;
34
+ source?: string;
35
+ [key: string]: unknown;
36
+ }
37
+
38
+ /**
39
+ * Task execution context
40
+ */
41
+ export interface TaskExecutionContext {
42
+ task: ITask;
43
+ agentId: string;
44
+ startTime: Date;
45
+ timeout: number;
46
+ attempt: number;
47
+ maxAttempts: number;
48
+ }
49
+
50
+ /**
51
+ * Task execution result - extended
52
+ */
53
+ export interface TaskExecutionResult extends ITaskResult {
54
+ context: TaskExecutionContext;
55
+ logs?: string[];
56
+ artifacts?: TaskArtifact[];
57
+ }
58
+
59
+ /**
60
+ * Task artifact - file or data produced by task
61
+ */
62
+ export interface TaskArtifact {
63
+ id: string;
64
+ name: string;
65
+ type: 'file' | 'data' | 'log' | 'metric';
66
+ path?: string;
67
+ data?: unknown;
68
+ size?: number;
69
+ createdAt: Date;
70
+ }
71
+
72
+ /**
73
+ * Task queue configuration
74
+ */
75
+ export interface TaskQueueConfig {
76
+ maxSize: number;
77
+ priorityLevels: number;
78
+ defaultTimeout: number;
79
+ batchSize: number;
80
+ processingInterval: number;
81
+ }
82
+
83
+ /**
84
+ * Task assignment strategy configuration
85
+ */
86
+ export interface TaskAssignmentConfig {
87
+ strategy: 'round-robin' | 'least-loaded' | 'capability-match' | 'priority-based' | 'custom';
88
+ loadBalancing: boolean;
89
+ stickyAssignment: boolean;
90
+ capabilityWeight: number;
91
+ loadWeight: number;
92
+ priorityWeight: number;
93
+ }
94
+
95
+ /**
96
+ * Task retry policy
97
+ */
98
+ export interface TaskRetryPolicy {
99
+ maxRetries: number;
100
+ backoffMs: number;
101
+ backoffMultiplier: number;
102
+ maxBackoffMs: number;
103
+ retryableErrors?: string[];
104
+ nonRetryableErrors?: string[];
105
+ }
106
+
107
+ /**
108
+ * Task filter for queries
109
+ */
110
+ export interface TaskFilter {
111
+ status?: TaskStatus | TaskStatus[];
112
+ type?: string | string[];
113
+ assignedAgent?: string;
114
+ priority?: number | { min?: number; max?: number };
115
+ createdAfter?: Date;
116
+ createdBefore?: Date;
117
+ tags?: string[];
118
+ hasParent?: boolean;
119
+ parentTaskId?: string;
120
+ }
121
+
122
+ /**
123
+ * Task sort options
124
+ */
125
+ export interface TaskSortOptions {
126
+ field: 'priority' | 'createdAt' | 'startedAt' | 'completedAt' | 'status';
127
+ direction: 'asc' | 'desc';
128
+ }
129
+
130
+ /**
131
+ * Task query options
132
+ */
133
+ export interface TaskQueryOptions {
134
+ filter?: TaskFilter;
135
+ sort?: TaskSortOptions;
136
+ limit?: number;
137
+ offset?: number;
138
+ }
139
+
140
+ /**
141
+ * Task event payloads
142
+ */
143
+ export interface TaskEventPayloads {
144
+ 'task:created': {
145
+ task: ITask;
146
+ };
147
+ 'task:assigned': {
148
+ taskId: string;
149
+ agentId: string;
150
+ };
151
+ 'task:started': {
152
+ taskId: string;
153
+ agentId: string;
154
+ startTime: Date;
155
+ };
156
+ 'task:completed': {
157
+ taskId: string;
158
+ result: ITaskResult;
159
+ };
160
+ 'task:failed': {
161
+ taskId: string;
162
+ error: Error;
163
+ retryable: boolean;
164
+ };
165
+ 'task:cancelled': {
166
+ taskId: string;
167
+ reason: string;
168
+ };
169
+ 'task:timeout': {
170
+ taskId: string;
171
+ timeoutMs: number;
172
+ };
173
+ 'task:retry': {
174
+ taskId: string;
175
+ attempt: number;
176
+ maxAttempts: number;
177
+ error: Error;
178
+ };
179
+ }
180
+
181
+ /**
182
+ * Priority value conversion
183
+ */
184
+ export function priorityToNumber(priority: number | TaskPriority): number {
185
+ if (typeof priority === 'number') {
186
+ return Math.max(0, Math.min(100, priority));
187
+ }
188
+ switch (priority) {
189
+ case 'critical': return 100;
190
+ case 'high': return 75;
191
+ case 'medium': return 50;
192
+ case 'low': return 25;
193
+ default: return 50;
194
+ }
195
+ }
196
+
197
+ /**
198
+ * Priority number to label
199
+ */
200
+ export function numberToPriority(value: number): TaskPriority {
201
+ if (value >= 90) return 'critical';
202
+ if (value >= 70) return 'high';
203
+ if (value >= 40) return 'medium';
204
+ return 'low';
205
+ }