claude-flow-novice 2.0.3 → 2.0.4
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/dist/src/cli/commands/guidance.js +487 -668
- package/dist/src/cli/commands/index-validate.js +18 -29
- package/dist/src/cli/commands/mcp-troubleshoot.js +230 -282
- package/dist/src/cli/commands/neural-goal-init.js +92 -125
- package/dist/src/cli/commands/swarm-exec.js +317 -393
- package/dist/src/cli/commands/swarm.js +1 -1
- package/dist/src/cli/commands/validate-framework.js +983 -1100
- package/dist/src/cli/commands/validate.js +144 -223
- package/dist/src/cli/simple-commands/__tests__/agent.test.js +265 -277
- package/dist/src/cli/simple-commands/__tests__/memory.test.js +6 -7
- package/dist/src/cli/simple-commands/__tests__/swarm.test.js +373 -356
- package/dist/src/cli/simple-commands/__tests__/task.test.js +6 -7
- package/dist/src/cli/simple-commands/agent.js +157 -193
- package/dist/src/cli/simple-commands/analysis.js +336 -446
- package/dist/src/cli/simple-commands/automation-executor.js +1095 -1339
- package/dist/src/cli/simple-commands/automation.js +481 -469
- package/dist/src/cli/simple-commands/batch-manager.js +261 -313
- package/dist/src/cli/simple-commands/claude-telemetry.js +241 -267
- package/dist/src/cli/simple-commands/claude-track.js +68 -90
- package/dist/src/cli/simple-commands/concurrent-display.js +266 -320
- package/dist/src/cli/simple-commands/config.js +245 -290
- package/dist/src/cli/simple-commands/coordination.js +182 -234
- package/dist/src/cli/simple-commands/enhanced-ui-views.js +812 -615
- package/dist/src/cli/simple-commands/enhanced-webui-complete.js +922 -981
- package/dist/src/cli/simple-commands/fix-hook-variables.js +274 -294
- package/dist/src/cli/simple-commands/github/gh-coordinator.js +378 -457
- package/dist/src/cli/simple-commands/github/github-api.js +535 -574
- package/dist/src/cli/simple-commands/github/init.js +276 -303
- package/dist/src/cli/simple-commands/github.js +222 -247
- package/dist/src/cli/simple-commands/goal.js +51 -63
- package/dist/src/cli/simple-commands/hive-mind/auto-save-middleware.js +208 -278
- package/dist/src/cli/simple-commands/hive-mind/communication.js +601 -696
- package/dist/src/cli/simple-commands/hive-mind/core.js +907 -979
- package/dist/src/cli/simple-commands/hive-mind/db-optimizer.js +406 -655
- package/dist/src/cli/simple-commands/hive-mind/mcp-wrapper.js +1125 -1245
- package/dist/src/cli/simple-commands/hive-mind/memory.js +854 -1090
- package/dist/src/cli/simple-commands/hive-mind/performance-optimizer.js +459 -574
- package/dist/src/cli/simple-commands/hive-mind/performance-test.js +263 -347
- package/dist/src/cli/simple-commands/hive-mind/queen.js +727 -768
- package/dist/src/cli/simple-commands/hive-mind/session-manager.js +745 -1049
- package/dist/src/cli/simple-commands/hive-mind-optimize.js +227 -283
- package/dist/src/cli/simple-commands/hive-mind-wizard.js +174 -217
- package/dist/src/cli/simple-commands/hive-mind.js +1842 -2283
- package/dist/src/cli/simple-commands/hive.js +90 -79
- package/dist/src/cli/simple-commands/hook-safety.js +431 -521
- package/dist/src/cli/simple-commands/hooks/session-start-soul.js +203 -254
- package/dist/src/cli/simple-commands/hooks.js +1064 -1204
- package/dist/src/cli/simple-commands/init/agent-copier.js +294 -319
- package/dist/src/cli/simple-commands/init/batch-init.js +496 -562
- package/dist/src/cli/simple-commands/init/claude-commands/claude-flow-commands.js +13 -19
- package/dist/src/cli/simple-commands/init/claude-commands/optimized-claude-flow-commands.js +13 -19
- package/dist/src/cli/simple-commands/init/claude-commands/optimized-slash-commands.js +61 -88
- package/dist/src/cli/simple-commands/init/claude-commands/optimized-sparc-commands.js +125 -150
- package/dist/src/cli/simple-commands/init/claude-commands/slash-commands.js +42 -49
- package/dist/src/cli/simple-commands/init/claude-commands/sparc-commands.js +43 -61
- package/dist/src/cli/simple-commands/init/copy-revised-templates.js +141 -147
- package/dist/src/cli/simple-commands/init/executable-wrapper.js +31 -44
- package/dist/src/cli/simple-commands/init/gitignore-updater.js +64 -90
- package/dist/src/cli/simple-commands/init/help.js +104 -107
- package/dist/src/cli/simple-commands/init/hive-mind-init.js +509 -528
- package/dist/src/cli/simple-commands/init/index.js +1510 -1759
- package/dist/src/cli/simple-commands/init/performance-monitor.js +234 -317
- package/dist/src/cli/simple-commands/init/rollback/backup-manager.js +441 -504
- package/dist/src/cli/simple-commands/init/rollback/index.js +289 -364
- package/dist/src/cli/simple-commands/init/rollback/recovery-manager.js +652 -728
- package/dist/src/cli/simple-commands/init/rollback/rollback-executor.js +416 -481
- package/dist/src/cli/simple-commands/init/rollback/state-tracker.js +369 -448
- package/dist/src/cli/simple-commands/init/sparc/roo-readme.js +1 -2
- package/dist/src/cli/simple-commands/init/sparc/roomodes-config.js +122 -99
- package/dist/src/cli/simple-commands/init/sparc/workflows.js +32 -37
- package/dist/src/cli/simple-commands/init/sparc-structure.js +55 -62
- package/dist/src/cli/simple-commands/init/template-copier.js +421 -533
- package/dist/src/cli/simple-commands/init/templates/coordination-md.js +3 -6
- package/dist/src/cli/simple-commands/init/templates/enhanced-templates.js +344 -318
- package/dist/src/cli/simple-commands/init/templates/github-safe-enhanced.js +173 -218
- package/dist/src/cli/simple-commands/init/templates/github-safe.js +65 -75
- package/dist/src/cli/simple-commands/init/templates/memory-bank-md.js +3 -6
- package/dist/src/cli/simple-commands/init/templates/readme-files.js +2 -4
- package/dist/src/cli/simple-commands/init/templates/safe-hook-patterns.js +187 -230
- package/dist/src/cli/simple-commands/init/templates/sparc-modes.js +53 -80
- package/dist/src/cli/simple-commands/init/templates/verification-claude-md.js +101 -85
- package/dist/src/cli/simple-commands/init/validation/config-validator.js +283 -330
- package/dist/src/cli/simple-commands/init/validation/health-checker.js +495 -561
- package/dist/src/cli/simple-commands/init/validation/index.js +302 -358
- package/dist/src/cli/simple-commands/init/validation/mode-validator.js +308 -359
- package/dist/src/cli/simple-commands/init/validation/post-init-validator.js +389 -366
- package/dist/src/cli/simple-commands/init/validation/pre-init-validator.js +270 -268
- package/dist/src/cli/simple-commands/init/validation/test-runner.js +427 -447
- package/dist/src/cli/simple-commands/init.js +1 -2
- package/dist/src/cli/simple-commands/mcp-health.js +131 -158
- package/dist/src/cli/simple-commands/mcp-integration-layer.js +533 -634
- package/dist/src/cli/simple-commands/mcp.js +345 -400
- package/dist/src/cli/simple-commands/memory-consolidation.js +426 -537
- package/dist/src/cli/simple-commands/memory.js +247 -311
- package/dist/src/cli/simple-commands/migrate-hooks.js +39 -46
- package/dist/src/cli/simple-commands/monitor.js +294 -363
- package/dist/src/cli/simple-commands/neural.js +51 -65
- package/dist/src/cli/simple-commands/pair-autofix-only.js +538 -662
- package/dist/src/cli/simple-commands/pair-basic.js +528 -656
- package/dist/src/cli/simple-commands/pair-old.js +430 -543
- package/dist/src/cli/simple-commands/pair-working.js +615 -751
- package/dist/src/cli/simple-commands/pair.js +615 -751
- package/dist/src/cli/simple-commands/performance-hooks.js +83 -111
- package/dist/src/cli/simple-commands/performance-metrics.js +348 -433
- package/dist/src/cli/simple-commands/process-ui-enhanced.js +708 -787
- package/dist/src/cli/simple-commands/process-ui.js +230 -254
- package/dist/src/cli/simple-commands/realtime-update-system.js +525 -611
- package/dist/src/cli/simple-commands/sparc/architecture.js +1704 -1530
- package/dist/src/cli/simple-commands/sparc/commands.js +438 -516
- package/dist/src/cli/simple-commands/sparc/completion.js +1224 -1481
- package/dist/src/cli/simple-commands/sparc/coordinator.js +913 -978
- package/dist/src/cli/simple-commands/sparc/index.js +241 -298
- package/dist/src/cli/simple-commands/sparc/phase-base.js +314 -390
- package/dist/src/cli/simple-commands/sparc/pseudocode.js +965 -869
- package/dist/src/cli/simple-commands/sparc/refinement.js +980 -1273
- package/dist/src/cli/simple-commands/sparc/specification.js +559 -645
- package/dist/src/cli/simple-commands/sparc-modes/architect.js +1 -1
- package/dist/src/cli/simple-commands/sparc-modes/ask.js +1 -1
- package/dist/src/cli/simple-commands/sparc-modes/code.js +1 -1
- package/dist/src/cli/simple-commands/sparc-modes/debug.js +1 -1
- package/dist/src/cli/simple-commands/sparc-modes/devops.js +1 -1
- package/dist/src/cli/simple-commands/sparc-modes/docs-writer.js +1 -1
- package/dist/src/cli/simple-commands/sparc-modes/generic.js +1 -1
- package/dist/src/cli/simple-commands/sparc-modes/index.js +47 -55
- package/dist/src/cli/simple-commands/sparc-modes/integration.js +1 -1
- package/dist/src/cli/simple-commands/sparc-modes/mcp.js +1 -1
- package/dist/src/cli/simple-commands/sparc-modes/monitoring.js +1 -1
- package/dist/src/cli/simple-commands/sparc-modes/optimization.js +1 -1
- package/dist/src/cli/simple-commands/sparc-modes/security-review.js +1 -1
- package/dist/src/cli/simple-commands/sparc-modes/sparc-orchestrator.js +1 -1
- package/dist/src/cli/simple-commands/sparc-modes/spec-pseudocode.js +1 -1
- package/dist/src/cli/simple-commands/sparc-modes/supabase-admin.js +1 -1
- package/dist/src/cli/simple-commands/sparc-modes/swarm.js +101 -87
- package/dist/src/cli/simple-commands/sparc-modes/tdd.js +1 -1
- package/dist/src/cli/simple-commands/sparc-modes/tutorial.js +1 -1
- package/dist/src/cli/simple-commands/sparc.js +465 -493
- package/dist/src/cli/simple-commands/start-ui.js +108 -132
- package/dist/src/cli/simple-commands/start-wrapper.js +240 -268
- package/dist/src/cli/simple-commands/start.js +1 -1
- package/dist/src/cli/simple-commands/status.js +254 -275
- package/dist/src/cli/simple-commands/stream-chain-clean.js +128 -171
- package/dist/src/cli/simple-commands/stream-chain-fixed.js +61 -82
- package/dist/src/cli/simple-commands/stream-chain-real.js +267 -331
- package/dist/src/cli/simple-commands/stream-chain-working.js +211 -263
- package/dist/src/cli/simple-commands/stream-chain.js +260 -318
- package/dist/src/cli/simple-commands/stream-processor.js +290 -315
- package/dist/src/cli/simple-commands/swarm-executor.js +189 -222
- package/dist/src/cli/simple-commands/swarm-metrics-integration.js +208 -300
- package/dist/src/cli/simple-commands/swarm-ui.js +623 -703
- package/dist/src/cli/simple-commands/swarm-webui-integration.js +258 -286
- package/dist/src/cli/simple-commands/swarm.js +887 -1082
- package/dist/src/cli/simple-commands/task.js +161 -206
- package/dist/src/cli/simple-commands/timestamp-fix.js +59 -89
- package/dist/src/cli/simple-commands/token-tracker.js +258 -316
- package/dist/src/cli/simple-commands/tool-execution-framework.js +433 -519
- package/dist/src/cli/simple-commands/train-and-stream.js +275 -331
- package/dist/src/cli/simple-commands/training-pipeline.js +619 -725
- package/dist/src/cli/simple-commands/training.js +170 -227
- package/dist/src/cli/simple-commands/verification-hooks.js +261 -284
- package/dist/src/cli/simple-commands/verification-integration.js +389 -417
- package/dist/src/cli/simple-commands/verification-training-integration.js +486 -606
- package/dist/src/cli/simple-commands/verification.js +493 -513
- package/dist/src/cli/simple-commands/web-server.js +766 -836
- package/dist/src/cli/simple-commands/webui-validator.js +106 -124
- package/dist/src/coordination/event-bus/demo-wasm-integration.js +212 -251
- package/dist/src/coordination/event-bus/qe-event-bus.js +608 -748
- package/dist/src/coordination/event-bus/qe-event-bus.test.js +379 -454
- package/dist/src/coordination/iteration-tracker.js +363 -454
- package/dist/src/enterprise/analytics-manager.js +1135 -0
- package/dist/src/enterprise/audit-manager.js +1115 -0
- package/dist/src/enterprise/cloud-manager.js +891 -0
- package/dist/src/enterprise/deployment-manager.js +966 -0
- package/dist/src/enterprise/index.js +6 -0
- package/dist/src/enterprise/project-manager.js +584 -0
- package/dist/src/enterprise/security-manager.js +991 -0
- package/dist/src/index.js +1 -1
- package/dist/src/mcp/DEPRECATED.js +46 -60
- package/dist/src/mcp/fixes/mcp-error-fixes.js +115 -134
- package/dist/src/mcp/implementations/agent-tracker.js +114 -128
- package/dist/src/mcp/implementations/daa-tools.js +292 -350
- package/dist/src/mcp/implementations/workflow-tools.js +329 -361
- package/dist/src/mcp/mcp-config-manager.js +1183 -1331
- package/dist/src/mcp/mcp-server-novice-simplified.js +11 -17
- package/dist/src/mcp/mcp-server-novice.js +11 -17
- package/dist/src/mcp/mcp-server-sdk.js +11 -17
- package/dist/src/mcp/mcp-server.js +1620 -1484
- package/dist/src/mcp/ruv-swarm-wrapper.js +209 -239
- package/dist/src/memory/advanced-serializer.js +609 -589
- package/dist/src/memory/enhanced-examples.js +220 -305
- package/dist/src/memory/enhanced-memory.js +295 -336
- package/dist/src/memory/enhanced-session-serializer.js +408 -492
- package/dist/src/memory/fallback-memory-system.js +900 -1021
- package/dist/src/memory/fallback-store.js +93 -131
- package/dist/src/memory/high-performance-serialization.js +592 -730
- package/dist/src/memory/in-memory-store.js +161 -213
- package/dist/src/memory/index.js +123 -157
- package/dist/src/memory/lock-free-structures.js +578 -764
- package/dist/src/memory/memory-mapped-persistence.js +585 -766
- package/dist/src/memory/memory-pressure-manager.js +569 -707
- package/dist/src/memory/migration.js +358 -445
- package/dist/src/memory/shared-memory.js +641 -768
- package/dist/src/memory/sqlite-store.js +245 -325
- package/dist/src/memory/sqlite-wrapper.js +122 -151
- package/dist/src/memory/swarm-memory.js +470 -603
- package/dist/src/memory/test-example.js +126 -134
- package/dist/src/memory/ultra-fast-memory-store.js +622 -821
- package/dist/src/memory/unified-memory-manager.js +356 -437
- package/dist/src/migration/index.js +92 -0
- package/dist/src/migration/logger.js +121 -0
- package/dist/src/migration/migration-analyzer.js +268 -0
- package/dist/src/migration/migration-runner.js +522 -0
- package/dist/src/migration/migration-validator.js +285 -0
- package/dist/src/migration/progress-reporter.js +150 -0
- package/dist/src/migration/rollback-manager.js +321 -0
- package/dist/src/migration/tests/migration-system.test.js +7 -0
- package/dist/src/migration/types.js +3 -0
- package/dist/src/swarm/CodeRefactoringSwarm.js +777 -952
- package/dist/src/swarm/__tests__/integration.test.js +227 -0
- package/dist/src/swarm/__tests__/prompt-copier.test.js +344 -0
- package/dist/src/swarm/advanced-orchestrator.js +1095 -0
- package/dist/src/swarm/claude-code-interface.js +961 -0
- package/dist/src/swarm/claude-flow-executor.js +229 -0
- package/dist/src/swarm/consensus-coordinator.js +475 -0
- package/dist/src/swarm/coordinator.js +2993 -0
- package/dist/src/swarm/direct-executor.js +1180 -0
- package/dist/src/swarm/error-recovery/advanced-error-detection.js +691 -0
- package/dist/src/swarm/error-recovery/automated-recovery-workflows.js +998 -0
- package/dist/src/swarm/error-recovery/error-recovery-coordinator.js +1197 -0
- package/dist/src/swarm/error-recovery/recovery-monitoring.js +772 -0
- package/dist/src/swarm/error-recovery/resilience-architecture.js +714 -0
- package/dist/src/swarm/error-recovery/self-healing-mechanisms.js +1319 -0
- package/dist/src/swarm/error-recovery/test-error-recovery-effectiveness.js +808 -0
- package/dist/src/swarm/executor-v2.js +322 -0
- package/dist/src/swarm/executor.js +815 -0
- package/dist/src/swarm/hive-mind-integration.js +703 -0
- package/dist/src/swarm/index.js +41 -0
- package/dist/src/swarm/json-output-aggregator.js +267 -0
- package/dist/src/swarm/large-scale-coordinator.js +542 -0
- package/dist/src/swarm/mcp-integration-wrapper.js +628 -0
- package/dist/src/swarm/memory.js +1117 -0
- package/dist/src/swarm/optimizations/__tests__/optimization.test.js +348 -0
- package/dist/src/swarm/optimizations/async-file-manager.js +285 -0
- package/dist/src/swarm/optimizations/circular-buffer.js +162 -0
- package/dist/src/swarm/optimizations/connection-pool.js +244 -0
- package/dist/src/swarm/optimizations/index.js +28 -0
- package/dist/src/swarm/optimizations/optimized-executor.js +320 -0
- package/dist/src/swarm/optimizations/ttl-map.js +234 -0
- package/dist/src/swarm/prompt-cli.js +200 -0
- package/dist/src/swarm/prompt-copier-enhanced.js +202 -0
- package/dist/src/swarm/prompt-copier.js +381 -0
- package/dist/src/swarm/prompt-manager.js +295 -0
- package/dist/src/swarm/prompt-utils.js +310 -0
- package/dist/src/swarm/result-aggregator.js +718 -0
- package/dist/src/swarm/sparc-executor.js +1568 -0
- package/dist/src/swarm/strategies/auto.js +758 -0
- package/dist/src/swarm/strategies/base.js +128 -0
- package/dist/src/swarm/strategies/research.js +914 -0
- package/dist/src/swarm/strategies/strategy-metrics-patch.js +2 -0
- package/dist/src/swarm/types.js +52 -0
- package/dist/src/swarm/workers/copy-worker.js +56 -0
- package/dist/src/utils/__tests__/github-cli-safety-wrapper.test.js +332 -400
- package/dist/src/utils/github-cli-safe.js +56 -64
- package/dist/src/utils/github-cli-safety-wrapper.js +451 -546
- package/dist/src/utils/npx-isolated-cache.js +104 -119
- package/dist/src/utils/preference-manager.js +622 -652
- package/dist/src/utils/timezone-utils.js +86 -105
- package/dist/src/validators/epic-config-schema.js +214 -0
- package/dist/src/validators/index.js +10 -0
- package/dist/src/validators/swarm-init-validator.js +259 -0
- package/dist/src/validators/todowrite-batching-validator.js +215 -0
- package/dist/src/validators/todowrite-integration.js +187 -0
- package/package.json +2 -2
|
@@ -0,0 +1,691 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Advanced Error Detection System
|
|
3
|
+
* Provides predictive error detection, real-time monitoring, and early warning capabilities
|
|
4
|
+
*/ function _define_property(obj, key, value) {
|
|
5
|
+
if (key in obj) {
|
|
6
|
+
Object.defineProperty(obj, key, {
|
|
7
|
+
value: value,
|
|
8
|
+
enumerable: true,
|
|
9
|
+
configurable: true,
|
|
10
|
+
writable: true
|
|
11
|
+
});
|
|
12
|
+
} else {
|
|
13
|
+
obj[key] = value;
|
|
14
|
+
}
|
|
15
|
+
return obj;
|
|
16
|
+
}
|
|
17
|
+
import { EventEmitter } from "node:events";
|
|
18
|
+
import { createClient } from "redis";
|
|
19
|
+
export class AdvancedErrorDetection extends EventEmitter {
|
|
20
|
+
async start() {
|
|
21
|
+
if (this.isRunning) {
|
|
22
|
+
return;
|
|
23
|
+
}
|
|
24
|
+
try {
|
|
25
|
+
await this.redis.connect();
|
|
26
|
+
this.logger.info('Advanced error detection started', {
|
|
27
|
+
redis: `${this.config.redis.host}:${this.config.redis.port}`,
|
|
28
|
+
monitoring: `${this.config.monitoring.intervalMs}ms`
|
|
29
|
+
});
|
|
30
|
+
this.isRunning = true;
|
|
31
|
+
this.startMonitoring();
|
|
32
|
+
this.startAnomalyDetection();
|
|
33
|
+
this.emit('started');
|
|
34
|
+
} catch (error) {
|
|
35
|
+
this.logger.error('Failed to start advanced error detection', {
|
|
36
|
+
error
|
|
37
|
+
});
|
|
38
|
+
throw error;
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
async stop() {
|
|
42
|
+
if (!this.isRunning) {
|
|
43
|
+
return;
|
|
44
|
+
}
|
|
45
|
+
this.isRunning = false;
|
|
46
|
+
if (this.monitoringTimer) {
|
|
47
|
+
clearInterval(this.monitoringTimer);
|
|
48
|
+
}
|
|
49
|
+
await this.redis.disconnect();
|
|
50
|
+
this.emit('stopped');
|
|
51
|
+
this.logger.info('Advanced error detection stopped');
|
|
52
|
+
}
|
|
53
|
+
initializeErrorPatterns() {
|
|
54
|
+
this.config.patterns.forEach((pattern)=>{
|
|
55
|
+
this.errorPatterns.set(pattern.id, pattern);
|
|
56
|
+
});
|
|
57
|
+
// Add default patterns if not provided
|
|
58
|
+
if (this.config.patterns.length === 0) {
|
|
59
|
+
this.addDefaultErrorPatterns();
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
addDefaultErrorPatterns() {
|
|
63
|
+
const defaultPatterns = [
|
|
64
|
+
{
|
|
65
|
+
id: 'memory-leak',
|
|
66
|
+
name: 'Memory Leak Detection',
|
|
67
|
+
description: 'Detects gradual memory increase over time',
|
|
68
|
+
pattern: 'memory_increase_trend',
|
|
69
|
+
severity: 'high',
|
|
70
|
+
category: 'memory',
|
|
71
|
+
predictive: true,
|
|
72
|
+
threshold: 0.8,
|
|
73
|
+
windowMs: 300000,
|
|
74
|
+
action: 'restart_component'
|
|
75
|
+
},
|
|
76
|
+
{
|
|
77
|
+
id: 'agent-timeout',
|
|
78
|
+
name: 'Agent Timeout Pattern',
|
|
79
|
+
description: 'Detects agents consistently timing out',
|
|
80
|
+
pattern: /agent.*timeout|timeout.*agent/i,
|
|
81
|
+
severity: 'medium',
|
|
82
|
+
category: 'agent',
|
|
83
|
+
predictive: false,
|
|
84
|
+
action: 'check_agent_health'
|
|
85
|
+
},
|
|
86
|
+
{
|
|
87
|
+
id: 'task-failure-cascade',
|
|
88
|
+
name: 'Task Failure Cascade',
|
|
89
|
+
description: 'Detects rapid succession of task failures',
|
|
90
|
+
pattern: 'task_failure_rate',
|
|
91
|
+
severity: 'critical',
|
|
92
|
+
category: 'task',
|
|
93
|
+
predictive: true,
|
|
94
|
+
threshold: 0.5,
|
|
95
|
+
windowMs: 60000,
|
|
96
|
+
action: 'pause_task_execution'
|
|
97
|
+
},
|
|
98
|
+
{
|
|
99
|
+
id: 'network-partition',
|
|
100
|
+
name: 'Network Partition Detection',
|
|
101
|
+
description: 'Detects network connectivity issues',
|
|
102
|
+
pattern: 'network_connectivity_loss',
|
|
103
|
+
severity: 'high',
|
|
104
|
+
category: 'network',
|
|
105
|
+
predictive: true,
|
|
106
|
+
threshold: 0.7,
|
|
107
|
+
windowMs: 30000,
|
|
108
|
+
action: 'enable_fallback_mode'
|
|
109
|
+
},
|
|
110
|
+
{
|
|
111
|
+
id: 'performance-degradation',
|
|
112
|
+
name: 'Performance Degradation',
|
|
113
|
+
description: 'Detects declining system performance',
|
|
114
|
+
pattern: 'response_time_increase',
|
|
115
|
+
severity: 'medium',
|
|
116
|
+
category: 'performance',
|
|
117
|
+
predictive: true,
|
|
118
|
+
threshold: 2.0,
|
|
119
|
+
windowMs: 120000,
|
|
120
|
+
action: 'scale_resources'
|
|
121
|
+
}
|
|
122
|
+
];
|
|
123
|
+
defaultPatterns.forEach((pattern)=>{
|
|
124
|
+
this.errorPatterns.set(pattern.id, pattern);
|
|
125
|
+
});
|
|
126
|
+
}
|
|
127
|
+
startMonitoring() {
|
|
128
|
+
this.monitoringTimer = setInterval(async ()=>{
|
|
129
|
+
try {
|
|
130
|
+
await this.collectMetrics();
|
|
131
|
+
await this.analyzeMetrics();
|
|
132
|
+
await this.checkErrorPatterns();
|
|
133
|
+
await this.predictiveAnalysis();
|
|
134
|
+
} catch (error) {
|
|
135
|
+
this.logger.error('Error in monitoring cycle', {
|
|
136
|
+
error
|
|
137
|
+
});
|
|
138
|
+
}
|
|
139
|
+
}, this.config.monitoring.intervalMs);
|
|
140
|
+
}
|
|
141
|
+
startAnomalyDetection() {
|
|
142
|
+
if (!this.config.anomaly.enabled) {
|
|
143
|
+
return;
|
|
144
|
+
}
|
|
145
|
+
// Anomaly detection runs in parallel with monitoring
|
|
146
|
+
setInterval(async ()=>{
|
|
147
|
+
try {
|
|
148
|
+
const anomalies = await this.anomalyDetector.detectAnomalies(this.metrics);
|
|
149
|
+
for (const anomaly of anomalies){
|
|
150
|
+
await this.handleAnomaly(anomaly);
|
|
151
|
+
}
|
|
152
|
+
} catch (error) {
|
|
153
|
+
this.logger.error('Error in anomaly detection', {
|
|
154
|
+
error
|
|
155
|
+
});
|
|
156
|
+
}
|
|
157
|
+
}, this.config.monitoring.intervalMs * 2); // Less frequent
|
|
158
|
+
}
|
|
159
|
+
async collectMetrics() {
|
|
160
|
+
const metrics = {
|
|
161
|
+
timestamp: new Date(),
|
|
162
|
+
cpu: await this.getCpuUsage(),
|
|
163
|
+
memory: await this.getMemoryUsage(),
|
|
164
|
+
disk: await this.getDiskUsage(),
|
|
165
|
+
network: await this.getNetworkLatency(),
|
|
166
|
+
agentHealth: await this.getAgentHealth(),
|
|
167
|
+
taskSuccessRate: await this.getTaskSuccessRate(),
|
|
168
|
+
responseTime: await this.getAverageResponseTime(),
|
|
169
|
+
errorRate: await this.getErrorRate(),
|
|
170
|
+
activeConnections: await this.getActiveConnections(),
|
|
171
|
+
queueSize: await this.getQueueSize()
|
|
172
|
+
};
|
|
173
|
+
this.metrics.push(metrics);
|
|
174
|
+
// Keep only recent metrics
|
|
175
|
+
const cutoff = Date.now() - this.config.monitoring.retentionMs;
|
|
176
|
+
this.metrics = this.metrics.filter((m)=>m.timestamp.getTime() > cutoff);
|
|
177
|
+
// Store in Redis for swarm coordination
|
|
178
|
+
await this.redis.setEx(`swarm:error-recovery-final:metrics:latest`, 300, JSON.stringify(metrics));
|
|
179
|
+
// Store in time series for historical analysis
|
|
180
|
+
await this.redis.zAdd(`swarm:error-recovery-final:metrics:timeseries`, {
|
|
181
|
+
score: metrics.timestamp.getTime(),
|
|
182
|
+
value: JSON.stringify(metrics)
|
|
183
|
+
});
|
|
184
|
+
// Cleanup old time series data
|
|
185
|
+
await this.redis.zRemRangeByScore(`swarm:error-recovery-final:metrics:timeseries`, 0, cutoff);
|
|
186
|
+
}
|
|
187
|
+
async analyzeMetrics() {
|
|
188
|
+
if (this.metrics.length < 10) {
|
|
189
|
+
return; // Need sufficient data for analysis
|
|
190
|
+
}
|
|
191
|
+
const latest = this.metrics[this.metrics.length - 1];
|
|
192
|
+
const detectedErrors = [];
|
|
193
|
+
// Check against thresholds
|
|
194
|
+
for (const [threshold, value] of Object.entries(this.config.thresholds)){
|
|
195
|
+
const metricValue = this.getMetricValue(latest, threshold);
|
|
196
|
+
if (metricValue > value) {
|
|
197
|
+
detectedErrors.push({
|
|
198
|
+
id: `threshold-${threshold}-${Date.now()}`,
|
|
199
|
+
type: 'threshold_exceeded',
|
|
200
|
+
severity: this.getSeverity(threshold, metricValue, value),
|
|
201
|
+
category: this.getCategory(threshold),
|
|
202
|
+
message: `${threshold} threshold exceeded: ${metricValue} > ${value}`,
|
|
203
|
+
timestamp: new Date(),
|
|
204
|
+
source: 'advanced_error_detection',
|
|
205
|
+
context: {
|
|
206
|
+
threshold,
|
|
207
|
+
value: metricValue,
|
|
208
|
+
limit: value
|
|
209
|
+
},
|
|
210
|
+
predictive: false,
|
|
211
|
+
confidence: 1.0,
|
|
212
|
+
metrics: latest
|
|
213
|
+
});
|
|
214
|
+
}
|
|
215
|
+
}
|
|
216
|
+
// Process detected errors
|
|
217
|
+
for (const error of detectedErrors){
|
|
218
|
+
await this.handleDetectedError(error);
|
|
219
|
+
}
|
|
220
|
+
}
|
|
221
|
+
async checkErrorPatterns() {
|
|
222
|
+
const recentMetrics = this.metrics.slice(-20); // Last 20 samples
|
|
223
|
+
const detectedErrors = [];
|
|
224
|
+
for (const [id, pattern] of this.errorPatterns){
|
|
225
|
+
const matches = await this.matchPattern(pattern, recentMetrics);
|
|
226
|
+
for (const match of matches){
|
|
227
|
+
detectedErrors.push({
|
|
228
|
+
id: `pattern-${id}-${Date.now()}`,
|
|
229
|
+
type: pattern.name,
|
|
230
|
+
severity: pattern.severity,
|
|
231
|
+
category: pattern.category,
|
|
232
|
+
message: `Pattern detected: ${pattern.description}`,
|
|
233
|
+
timestamp: new Date(),
|
|
234
|
+
source: 'pattern_matching',
|
|
235
|
+
context: {
|
|
236
|
+
patternId: id,
|
|
237
|
+
match
|
|
238
|
+
},
|
|
239
|
+
predictive: pattern.predictive,
|
|
240
|
+
confidence: match.confidence || 0.8,
|
|
241
|
+
metrics: recentMetrics[recentMetrics.length - 1],
|
|
242
|
+
pattern,
|
|
243
|
+
recommendedAction: pattern.action
|
|
244
|
+
});
|
|
245
|
+
}
|
|
246
|
+
}
|
|
247
|
+
for (const error of detectedErrors){
|
|
248
|
+
await this.handleDetectedError(error);
|
|
249
|
+
}
|
|
250
|
+
}
|
|
251
|
+
async predictiveAnalysis() {
|
|
252
|
+
if (!this.config.earlyWarning.enabled) {
|
|
253
|
+
return;
|
|
254
|
+
}
|
|
255
|
+
const warnings = await this.predictiveEngine.predictErrors(this.metrics);
|
|
256
|
+
for (const warning of warnings){
|
|
257
|
+
await this.handleEarlyWarning(warning);
|
|
258
|
+
}
|
|
259
|
+
}
|
|
260
|
+
async handleDetectedError(error) {
|
|
261
|
+
this.logger.warn('Error detected', {
|
|
262
|
+
id: error.id,
|
|
263
|
+
type: error.type,
|
|
264
|
+
severity: error.severity,
|
|
265
|
+
predictive: error.predictive
|
|
266
|
+
});
|
|
267
|
+
// Store in Redis for coordination
|
|
268
|
+
await this.redis.setEx(`swarm:error-recovery-final:errors:${error.id}`, 3600, JSON.stringify(error));
|
|
269
|
+
// Publish to swarm channel
|
|
270
|
+
await this.redis.publish('swarm:error-recovery-final', JSON.stringify({
|
|
271
|
+
type: 'ERROR_DETECTED',
|
|
272
|
+
data: error,
|
|
273
|
+
timestamp: new Date().toISOString()
|
|
274
|
+
}));
|
|
275
|
+
this.emit('errorDetected', error);
|
|
276
|
+
}
|
|
277
|
+
async handleEarlyWarning(warning) {
|
|
278
|
+
this.logger.info('Early warning issued', {
|
|
279
|
+
id: warning.id,
|
|
280
|
+
type: warning.type,
|
|
281
|
+
confidence: warning.confidence
|
|
282
|
+
});
|
|
283
|
+
// Store in Redis
|
|
284
|
+
await this.redis.setEx(`swarm:error-recovery-final:warnings:${warning.id}`, 1800, JSON.stringify(warning));
|
|
285
|
+
// Publish to swarm channel
|
|
286
|
+
await this.redis.publish('swarm:error-recovery-final', JSON.stringify({
|
|
287
|
+
type: 'EARLY_WARNING',
|
|
288
|
+
data: warning,
|
|
289
|
+
timestamp: new Date().toISOString()
|
|
290
|
+
}));
|
|
291
|
+
this.emit('earlyWarning', warning);
|
|
292
|
+
}
|
|
293
|
+
async handleAnomaly(anomaly) {
|
|
294
|
+
this.logger.warn('Anomaly detected', {
|
|
295
|
+
anomaly
|
|
296
|
+
});
|
|
297
|
+
// Convert anomaly to detected error format
|
|
298
|
+
const error = {
|
|
299
|
+
id: `anomaly-${Date.now()}`,
|
|
300
|
+
type: 'anomaly',
|
|
301
|
+
severity: this.anomalyDetector.getSeverity(anomaly),
|
|
302
|
+
category: 'system',
|
|
303
|
+
message: `Anomaly detected: ${anomaly.description}`,
|
|
304
|
+
timestamp: new Date(),
|
|
305
|
+
source: 'anomaly_detection',
|
|
306
|
+
context: anomaly,
|
|
307
|
+
predictive: true,
|
|
308
|
+
confidence: anomaly.confidence,
|
|
309
|
+
metrics: this.metrics[this.metrics.length - 1]
|
|
310
|
+
};
|
|
311
|
+
await this.handleDetectedError(error);
|
|
312
|
+
}
|
|
313
|
+
// Helper methods for metric collection
|
|
314
|
+
async getCpuUsage() {
|
|
315
|
+
// Implementation would collect actual CPU usage
|
|
316
|
+
return Math.random() * 100;
|
|
317
|
+
}
|
|
318
|
+
async getMemoryUsage() {
|
|
319
|
+
// Implementation would collect actual memory usage
|
|
320
|
+
return Math.random() * 100;
|
|
321
|
+
}
|
|
322
|
+
async getDiskUsage() {
|
|
323
|
+
// Implementation would collect actual disk usage
|
|
324
|
+
return Math.random() * 100;
|
|
325
|
+
}
|
|
326
|
+
async getNetworkLatency() {
|
|
327
|
+
// Implementation would measure network latency
|
|
328
|
+
return Math.random() * 1000;
|
|
329
|
+
}
|
|
330
|
+
async getAgentHealth() {
|
|
331
|
+
// Implementation would check agent health status
|
|
332
|
+
return Math.random();
|
|
333
|
+
}
|
|
334
|
+
async getTaskSuccessRate() {
|
|
335
|
+
// Implementation would calculate task success rate
|
|
336
|
+
return Math.random();
|
|
337
|
+
}
|
|
338
|
+
async getAverageResponseTime() {
|
|
339
|
+
// Implementation would calculate average response time
|
|
340
|
+
return Math.random() * 5000;
|
|
341
|
+
}
|
|
342
|
+
async getErrorRate() {
|
|
343
|
+
// Implementation would calculate error rate
|
|
344
|
+
return Math.random() * 10;
|
|
345
|
+
}
|
|
346
|
+
async getActiveConnections() {
|
|
347
|
+
// Implementation would count active connections
|
|
348
|
+
return Math.floor(Math.random() * 100);
|
|
349
|
+
}
|
|
350
|
+
async getQueueSize() {
|
|
351
|
+
// Implementation would get queue size
|
|
352
|
+
return Math.floor(Math.random() * 1000);
|
|
353
|
+
}
|
|
354
|
+
// Helper methods for analysis
|
|
355
|
+
getMetricValue(metrics, threshold) {
|
|
356
|
+
const mapping = {
|
|
357
|
+
errorRate: 'errorRate',
|
|
358
|
+
responseTime: 'responseTime',
|
|
359
|
+
memoryUsage: 'memory',
|
|
360
|
+
cpuUsage: 'cpu',
|
|
361
|
+
agentFailureRate: 'agentHealth'
|
|
362
|
+
};
|
|
363
|
+
const key = mapping[threshold];
|
|
364
|
+
return key ? metrics[key] : 0;
|
|
365
|
+
}
|
|
366
|
+
getSeverity(threshold, value, limit) {
|
|
367
|
+
const ratio = value / limit;
|
|
368
|
+
if (ratio > 2.0) return 'critical';
|
|
369
|
+
if (ratio > 1.5) return 'high';
|
|
370
|
+
if (ratio > 1.2) return 'medium';
|
|
371
|
+
return 'low';
|
|
372
|
+
}
|
|
373
|
+
getCategory(threshold) {
|
|
374
|
+
if (threshold.includes('memory')) return 'memory';
|
|
375
|
+
if (threshold.includes('cpu')) return 'performance';
|
|
376
|
+
if (threshold.includes('agent')) return 'agent';
|
|
377
|
+
if (threshold.includes('network')) return 'network';
|
|
378
|
+
return 'system';
|
|
379
|
+
}
|
|
380
|
+
async matchPattern(pattern, metrics) {
|
|
381
|
+
const matches = [];
|
|
382
|
+
if (typeof pattern.pattern === 'string') {
|
|
383
|
+
// Built-in pattern matching
|
|
384
|
+
switch(pattern.pattern){
|
|
385
|
+
case 'memory_increase_trend':
|
|
386
|
+
matches.push(...this.detectMemoryIncreaseTrend(metrics, pattern));
|
|
387
|
+
break;
|
|
388
|
+
case 'task_failure_rate':
|
|
389
|
+
matches.push(...this.detectTaskFailureRate(metrics, pattern));
|
|
390
|
+
break;
|
|
391
|
+
case 'network_connectivity_loss':
|
|
392
|
+
matches.push(...this.detectNetworkConnectivityLoss(metrics, pattern));
|
|
393
|
+
break;
|
|
394
|
+
case 'response_time_increase':
|
|
395
|
+
matches.push(...this.detectResponseTimeIncrease(metrics, pattern));
|
|
396
|
+
break;
|
|
397
|
+
default:
|
|
398
|
+
break;
|
|
399
|
+
}
|
|
400
|
+
} else if (pattern.pattern instanceof Function) {
|
|
401
|
+
// Custom pattern function
|
|
402
|
+
const result = pattern.pattern(metrics);
|
|
403
|
+
if (result) {
|
|
404
|
+
matches.push(result);
|
|
405
|
+
}
|
|
406
|
+
}
|
|
407
|
+
return matches;
|
|
408
|
+
}
|
|
409
|
+
detectMemoryIncreaseTrend(metrics, pattern) {
|
|
410
|
+
if (metrics.length < 10) return [];
|
|
411
|
+
const recent = metrics.slice(-10);
|
|
412
|
+
const memoryValues = recent.map((m)=>m.memory);
|
|
413
|
+
// Calculate trend
|
|
414
|
+
let increasing = 0;
|
|
415
|
+
for(let i = 1; i < memoryValues.length; i++){
|
|
416
|
+
if (memoryValues[i] > memoryValues[i - 1]) {
|
|
417
|
+
increasing++;
|
|
418
|
+
}
|
|
419
|
+
}
|
|
420
|
+
const trendRatio = increasing / (memoryValues.length - 1);
|
|
421
|
+
if (trendRatio > (pattern.threshold || 0.8)) {
|
|
422
|
+
return [
|
|
423
|
+
{
|
|
424
|
+
confidence: trendRatio,
|
|
425
|
+
details: {
|
|
426
|
+
trendRatio,
|
|
427
|
+
values: memoryValues
|
|
428
|
+
}
|
|
429
|
+
}
|
|
430
|
+
];
|
|
431
|
+
}
|
|
432
|
+
return [];
|
|
433
|
+
}
|
|
434
|
+
detectTaskFailureRate(metrics, pattern) {
|
|
435
|
+
// Implementation would detect task failure patterns
|
|
436
|
+
return [];
|
|
437
|
+
}
|
|
438
|
+
detectNetworkConnectivityLoss(metrics, pattern) {
|
|
439
|
+
// Implementation would detect network connectivity issues
|
|
440
|
+
return [];
|
|
441
|
+
}
|
|
442
|
+
detectResponseTimeIncrease(metrics, pattern) {
|
|
443
|
+
if (metrics.length < 5) return [];
|
|
444
|
+
const recent = metrics.slice(-5);
|
|
445
|
+
const avgResponseTime = recent.reduce((sum, m)=>sum + m.responseTime, 0) / recent.length;
|
|
446
|
+
const baseline = metrics[0].responseTime;
|
|
447
|
+
const ratio = avgResponseTime / baseline;
|
|
448
|
+
if (ratio > (pattern.threshold || 2.0)) {
|
|
449
|
+
return [
|
|
450
|
+
{
|
|
451
|
+
confidence: Math.min(ratio / 3.0, 1.0),
|
|
452
|
+
details: {
|
|
453
|
+
ratio,
|
|
454
|
+
baseline,
|
|
455
|
+
current: avgResponseTime
|
|
456
|
+
}
|
|
457
|
+
}
|
|
458
|
+
];
|
|
459
|
+
}
|
|
460
|
+
return [];
|
|
461
|
+
}
|
|
462
|
+
// Public API methods
|
|
463
|
+
async getCurrentMetrics() {
|
|
464
|
+
return this.metrics.length > 0 ? this.metrics[this.metrics.length - 1] : null;
|
|
465
|
+
}
|
|
466
|
+
async getDetectedErrors(limit = 50) {
|
|
467
|
+
const keys = await this.redis.keys('swarm:error-recovery-final:errors:*');
|
|
468
|
+
const errors = [];
|
|
469
|
+
for (const key of keys.slice(-limit)){
|
|
470
|
+
const error = await this.redis.get(key);
|
|
471
|
+
if (error) {
|
|
472
|
+
errors.push(JSON.parse(error));
|
|
473
|
+
}
|
|
474
|
+
}
|
|
475
|
+
return errors.sort((a, b)=>b.timestamp.getTime() - a.timestamp.getTime());
|
|
476
|
+
}
|
|
477
|
+
async getEarlyWarnings(limit = 20) {
|
|
478
|
+
const keys = await this.redis.keys('swarm:error-recovery-final:warnings:*');
|
|
479
|
+
const warnings = [];
|
|
480
|
+
for (const key of keys.slice(-limit)){
|
|
481
|
+
const warning = await this.redis.get(key);
|
|
482
|
+
if (warning) {
|
|
483
|
+
warnings.push(JSON.parse(warning));
|
|
484
|
+
}
|
|
485
|
+
}
|
|
486
|
+
return warnings.sort((a, b)=>b.timestamp.getTime() - a.timestamp.getTime());
|
|
487
|
+
}
|
|
488
|
+
async addErrorPattern(pattern) {
|
|
489
|
+
this.errorPatterns.set(pattern.id, pattern);
|
|
490
|
+
this.logger.info('Error pattern added', {
|
|
491
|
+
id: pattern.id,
|
|
492
|
+
name: pattern.name
|
|
493
|
+
});
|
|
494
|
+
}
|
|
495
|
+
async removeErrorPattern(patternId) {
|
|
496
|
+
this.errorPatterns.delete(patternId);
|
|
497
|
+
this.logger.info('Error pattern removed', {
|
|
498
|
+
id: patternId
|
|
499
|
+
});
|
|
500
|
+
}
|
|
501
|
+
async updateThresholds(thresholds) {
|
|
502
|
+
this.config.thresholds = {
|
|
503
|
+
...this.config.thresholds,
|
|
504
|
+
...thresholds
|
|
505
|
+
};
|
|
506
|
+
this.logger.info('Thresholds updated', {
|
|
507
|
+
thresholds
|
|
508
|
+
});
|
|
509
|
+
}
|
|
510
|
+
constructor(logger, config){
|
|
511
|
+
super(), _define_property(this, "redis", void 0), _define_property(this, "logger", void 0), _define_property(this, "config", void 0), _define_property(this, "isRunning", false), _define_property(this, "monitoringTimer", void 0), _define_property(this, "metrics", []), _define_property(this, "errorPatterns", new Map()), _define_property(this, "anomalyDetector", void 0), _define_property(this, "predictiveEngine", void 0);
|
|
512
|
+
this.logger = logger;
|
|
513
|
+
this.config = config;
|
|
514
|
+
this.redis = createClient(config.redis);
|
|
515
|
+
this.anomalyDetector = new AnomalyDetector(config.anomaly);
|
|
516
|
+
this.predictiveEngine = new PredictiveErrorEngine(logger, config);
|
|
517
|
+
this.initializeErrorPatterns();
|
|
518
|
+
}
|
|
519
|
+
}
|
|
520
|
+
let AnomalyDetector = class AnomalyDetector {
|
|
521
|
+
async detectAnomalies(metrics) {
|
|
522
|
+
if (!this.config.enabled || metrics.length < this.config.windowSize) {
|
|
523
|
+
return [];
|
|
524
|
+
}
|
|
525
|
+
const anomalies = [];
|
|
526
|
+
const recentMetrics = metrics.slice(-this.config.windowSize);
|
|
527
|
+
for (const algorithm of this.config.algorithms){
|
|
528
|
+
switch(algorithm){
|
|
529
|
+
case 'statistical':
|
|
530
|
+
anomalies.push(...this.statisticalAnomalyDetection(recentMetrics));
|
|
531
|
+
break;
|
|
532
|
+
case 'threshold':
|
|
533
|
+
anomalies.push(...this.thresholdAnomalyDetection(recentMetrics));
|
|
534
|
+
break;
|
|
535
|
+
case 'trend':
|
|
536
|
+
anomalies.push(...this.trendAnomalyDetection(recentMetrics));
|
|
537
|
+
break;
|
|
538
|
+
case 'ml-based':
|
|
539
|
+
anomalies.push(...this.mlAnomalyDetection(recentMetrics));
|
|
540
|
+
break;
|
|
541
|
+
}
|
|
542
|
+
}
|
|
543
|
+
return anomalies;
|
|
544
|
+
}
|
|
545
|
+
statisticalAnomalyDetection(metrics) {
|
|
546
|
+
// Implementation of statistical anomaly detection (e.g., Z-score)
|
|
547
|
+
return [];
|
|
548
|
+
}
|
|
549
|
+
thresholdAnomalyDetection(metrics) {
|
|
550
|
+
// Implementation of threshold-based anomaly detection
|
|
551
|
+
return [];
|
|
552
|
+
}
|
|
553
|
+
trendAnomalyDetection(metrics) {
|
|
554
|
+
// Implementation of trend-based anomaly detection
|
|
555
|
+
return [];
|
|
556
|
+
}
|
|
557
|
+
mlAnomalyDetection(metrics) {
|
|
558
|
+
// Implementation of ML-based anomaly detection
|
|
559
|
+
return [];
|
|
560
|
+
}
|
|
561
|
+
getSeverity(anomaly) {
|
|
562
|
+
return anomaly.severity || 'medium';
|
|
563
|
+
}
|
|
564
|
+
constructor(config){
|
|
565
|
+
_define_property(this, "config", void 0);
|
|
566
|
+
this.config = config;
|
|
567
|
+
}
|
|
568
|
+
};
|
|
569
|
+
let PredictiveErrorEngine = class PredictiveErrorEngine {
|
|
570
|
+
async predictErrors(metrics) {
|
|
571
|
+
const warnings = [];
|
|
572
|
+
if (!this.config.earlyWarning.enabled || metrics.length < 20) {
|
|
573
|
+
return warnings;
|
|
574
|
+
}
|
|
575
|
+
// Predict memory issues
|
|
576
|
+
const memoryWarning = this.predictMemoryIssues(metrics);
|
|
577
|
+
if (memoryWarning) warnings.push(memoryWarning);
|
|
578
|
+
// Predict performance degradation
|
|
579
|
+
const performanceWarning = this.predictPerformanceIssues(metrics);
|
|
580
|
+
if (performanceWarning) warnings.push(performanceWarning);
|
|
581
|
+
// Predict agent failures
|
|
582
|
+
const agentWarning = this.predictAgentFailures(metrics);
|
|
583
|
+
if (agentWarning) warnings.push(agentWarning);
|
|
584
|
+
return warnings;
|
|
585
|
+
}
|
|
586
|
+
predictMemoryIssues(metrics) {
|
|
587
|
+
const recent = metrics.slice(-10);
|
|
588
|
+
const memoryTrend = this.calculateTrend(recent.map((m)=>m.memory));
|
|
589
|
+
if (memoryTrend > 0.8) {
|
|
590
|
+
const latest = recent[recent.length - 1];
|
|
591
|
+
const timeToCritical = this.predictTimeToThreshold(latest.memory, memoryTrend, 90);
|
|
592
|
+
return {
|
|
593
|
+
id: `memory-prediction-${Date.now()}`,
|
|
594
|
+
type: 'memory_exhaustion',
|
|
595
|
+
severity: timeToCritical < 300000 ? 'critical' : 'high',
|
|
596
|
+
message: `Memory usage trending upward, predicted exhaustion in ${Math.round(timeToCritical / 60000)} minutes`,
|
|
597
|
+
timestamp: new Date(),
|
|
598
|
+
predictedTime: new Date(Date.now() + timeToCritical),
|
|
599
|
+
confidence: Math.min(memoryTrend, 0.95),
|
|
600
|
+
metrics: latest,
|
|
601
|
+
recommendedActions: [
|
|
602
|
+
'Monitor memory usage closely',
|
|
603
|
+
'Consider component restart',
|
|
604
|
+
'Scale up memory resources'
|
|
605
|
+
],
|
|
606
|
+
affectedComponents: [
|
|
607
|
+
'system',
|
|
608
|
+
'agents'
|
|
609
|
+
]
|
|
610
|
+
};
|
|
611
|
+
}
|
|
612
|
+
return null;
|
|
613
|
+
}
|
|
614
|
+
predictPerformanceIssues(metrics) {
|
|
615
|
+
const recent = metrics.slice(-10);
|
|
616
|
+
const responseTimeTrend = this.calculateTrend(recent.map((m)=>m.responseTime));
|
|
617
|
+
if (responseTimeTrend > 0.6) {
|
|
618
|
+
const latest = recent[recent.length - 1];
|
|
619
|
+
return {
|
|
620
|
+
id: `performance-prediction-${Date.now()}`,
|
|
621
|
+
type: 'performance_degradation',
|
|
622
|
+
severity: 'medium',
|
|
623
|
+
message: `Response times degrading, potential performance issues`,
|
|
624
|
+
timestamp: new Date(),
|
|
625
|
+
predictedTime: new Date(Date.now() + 600000),
|
|
626
|
+
confidence: responseTimeTrend,
|
|
627
|
+
metrics: latest,
|
|
628
|
+
recommendedActions: [
|
|
629
|
+
'Monitor response times',
|
|
630
|
+
'Check system resources',
|
|
631
|
+
'Consider scaling horizontally'
|
|
632
|
+
],
|
|
633
|
+
affectedComponents: [
|
|
634
|
+
'system',
|
|
635
|
+
'tasks'
|
|
636
|
+
]
|
|
637
|
+
};
|
|
638
|
+
}
|
|
639
|
+
return null;
|
|
640
|
+
}
|
|
641
|
+
predictAgentFailures(metrics) {
|
|
642
|
+
const recent = metrics.slice(-10);
|
|
643
|
+
const agentHealthTrend = this.calculateTrend(recent.map((m)=>m.agentHealth));
|
|
644
|
+
if (agentHealthTrend < -0.5) {
|
|
645
|
+
const latest = recent[recent.length - 1];
|
|
646
|
+
return {
|
|
647
|
+
id: `agent-failure-prediction-${Date.now()}`,
|
|
648
|
+
type: 'agent_failure',
|
|
649
|
+
severity: latest.agentHealth < 0.3 ? 'high' : 'medium',
|
|
650
|
+
message: `Agent health declining, potential failures imminent`,
|
|
651
|
+
timestamp: new Date(),
|
|
652
|
+
predictedTime: new Date(Date.now() + 300000),
|
|
653
|
+
confidence: Math.abs(agentHealthTrend),
|
|
654
|
+
metrics: latest,
|
|
655
|
+
recommendedActions: [
|
|
656
|
+
'Check agent status',
|
|
657
|
+
'Review agent logs',
|
|
658
|
+
'Prepare agent restart procedures'
|
|
659
|
+
],
|
|
660
|
+
affectedComponents: [
|
|
661
|
+
'agents'
|
|
662
|
+
]
|
|
663
|
+
};
|
|
664
|
+
}
|
|
665
|
+
return null;
|
|
666
|
+
}
|
|
667
|
+
calculateTrend(values) {
|
|
668
|
+
if (values.length < 2) return 0;
|
|
669
|
+
// Simple linear regression to calculate trend
|
|
670
|
+
const n = values.length;
|
|
671
|
+
const sumX = n * (n - 1) / 2;
|
|
672
|
+
const sumY = values.reduce((sum, val)=>sum + val, 0);
|
|
673
|
+
const sumXY = values.reduce((sum, val, i)=>sum + i * val, 0);
|
|
674
|
+
const sumX2 = n * (n - 1) * (2 * n - 1) / 6;
|
|
675
|
+
const slope = (n * sumXY - sumX * sumY) / (n * sumX2 - sumX * sumX);
|
|
676
|
+
const avgY = sumY / n;
|
|
677
|
+
// Normalize slope by average value
|
|
678
|
+
return avgY > 0 ? slope / avgY : 0;
|
|
679
|
+
}
|
|
680
|
+
predictTimeToThreshold(currentValue, trend, threshold) {
|
|
681
|
+
if (trend <= 0) return Infinity;
|
|
682
|
+
const distance = threshold - currentValue;
|
|
683
|
+
return distance > 0 ? distance / trend * 1000 : 0; // Convert to milliseconds
|
|
684
|
+
}
|
|
685
|
+
constructor(logger, config){
|
|
686
|
+
_define_property(this, "logger", void 0);
|
|
687
|
+
_define_property(this, "config", void 0);
|
|
688
|
+
this.logger = logger;
|
|
689
|
+
this.config = config;
|
|
690
|
+
}
|
|
691
|
+
};
|