claude-flow-novice 2.0.4 → 2.0.5
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 +668 -487
- package/dist/src/cli/commands/index-validate.js +29 -18
- package/dist/src/cli/commands/mcp-troubleshoot.js +282 -230
- package/dist/src/cli/commands/neural-goal-init.js +125 -92
- package/dist/src/cli/commands/swarm-exec.js +393 -317
- package/dist/src/cli/commands/validate-framework.js +1100 -983
- package/dist/src/cli/commands/validate.js +223 -144
- package/dist/src/cli/main.js +1 -1
- package/dist/src/cli/simple-commands/__tests__/agent.test.js +277 -265
- package/dist/src/cli/simple-commands/__tests__/memory.test.js +7 -6
- package/dist/src/cli/simple-commands/__tests__/swarm.test.js +356 -373
- package/dist/src/cli/simple-commands/__tests__/task.test.js +7 -6
- package/dist/src/cli/simple-commands/agent.js +193 -157
- package/dist/src/cli/simple-commands/analysis.js +446 -336
- package/dist/src/cli/simple-commands/automation-executor.js +1339 -1095
- package/dist/src/cli/simple-commands/automation.js +469 -481
- package/dist/src/cli/simple-commands/batch-manager.js +313 -261
- package/dist/src/cli/simple-commands/claude-telemetry.js +267 -241
- package/dist/src/cli/simple-commands/claude-track.js +90 -68
- package/dist/src/cli/simple-commands/concurrent-display.js +320 -266
- package/dist/src/cli/simple-commands/config.js +290 -245
- package/dist/src/cli/simple-commands/coordination.js +234 -182
- package/dist/src/cli/simple-commands/enhanced-ui-views.js +615 -812
- package/dist/src/cli/simple-commands/enhanced-webui-complete.js +981 -922
- package/dist/src/cli/simple-commands/fix-hook-variables.js +294 -274
- package/dist/src/cli/simple-commands/github/gh-coordinator.js +457 -378
- package/dist/src/cli/simple-commands/github/github-api.js +574 -535
- package/dist/src/cli/simple-commands/github/init.js +303 -276
- package/dist/src/cli/simple-commands/github.js +247 -222
- package/dist/src/cli/simple-commands/goal.js +63 -51
- package/dist/src/cli/simple-commands/hive-mind/auto-save-middleware.js +278 -208
- package/dist/src/cli/simple-commands/hive-mind/communication.js +696 -601
- package/dist/src/cli/simple-commands/hive-mind/core.js +979 -907
- package/dist/src/cli/simple-commands/hive-mind/db-optimizer.js +655 -406
- package/dist/src/cli/simple-commands/hive-mind/mcp-wrapper.js +1245 -1125
- package/dist/src/cli/simple-commands/hive-mind/memory.js +1090 -854
- package/dist/src/cli/simple-commands/hive-mind/performance-optimizer.js +574 -459
- package/dist/src/cli/simple-commands/hive-mind/performance-test.js +347 -263
- package/dist/src/cli/simple-commands/hive-mind/queen.js +768 -727
- package/dist/src/cli/simple-commands/hive-mind/session-manager.js +1049 -745
- package/dist/src/cli/simple-commands/hive-mind-optimize.js +283 -227
- package/dist/src/cli/simple-commands/hive-mind-wizard.js +217 -174
- package/dist/src/cli/simple-commands/hive-mind.js +2282 -1841
- package/dist/src/cli/simple-commands/hive.js +79 -90
- package/dist/src/cli/simple-commands/hook-safety.js +521 -431
- package/dist/src/cli/simple-commands/hooks/session-start-soul.js +254 -203
- package/dist/src/cli/simple-commands/hooks.js +1204 -1064
- package/dist/src/cli/simple-commands/init/agent-copier.js +319 -294
- package/dist/src/cli/simple-commands/init/batch-init.js +562 -496
- package/dist/src/cli/simple-commands/init/claude-commands/claude-flow-commands.js +19 -13
- package/dist/src/cli/simple-commands/init/claude-commands/optimized-claude-flow-commands.js +19 -13
- package/dist/src/cli/simple-commands/init/claude-commands/optimized-slash-commands.js +88 -61
- package/dist/src/cli/simple-commands/init/claude-commands/optimized-sparc-commands.js +150 -125
- package/dist/src/cli/simple-commands/init/claude-commands/slash-commands.js +49 -42
- package/dist/src/cli/simple-commands/init/claude-commands/sparc-commands.js +61 -43
- package/dist/src/cli/simple-commands/init/copy-revised-templates.js +147 -141
- package/dist/src/cli/simple-commands/init/executable-wrapper.js +44 -31
- package/dist/src/cli/simple-commands/init/gitignore-updater.js +90 -64
- package/dist/src/cli/simple-commands/init/help.js +107 -104
- package/dist/src/cli/simple-commands/init/hive-mind-init.js +528 -509
- package/dist/src/cli/simple-commands/init/index.js +1759 -1510
- package/dist/src/cli/simple-commands/init/performance-monitor.js +317 -234
- package/dist/src/cli/simple-commands/init/rollback/backup-manager.js +504 -441
- package/dist/src/cli/simple-commands/init/rollback/index.js +364 -289
- package/dist/src/cli/simple-commands/init/rollback/recovery-manager.js +728 -652
- package/dist/src/cli/simple-commands/init/rollback/rollback-executor.js +481 -416
- package/dist/src/cli/simple-commands/init/rollback/state-tracker.js +448 -369
- package/dist/src/cli/simple-commands/init/sparc/roo-readme.js +2 -1
- package/dist/src/cli/simple-commands/init/sparc/roomodes-config.js +99 -122
- package/dist/src/cli/simple-commands/init/sparc/workflows.js +37 -32
- package/dist/src/cli/simple-commands/init/sparc-structure.js +62 -55
- package/dist/src/cli/simple-commands/init/template-copier.js +533 -421
- package/dist/src/cli/simple-commands/init/templates/coordination-md.js +6 -3
- package/dist/src/cli/simple-commands/init/templates/enhanced-templates.js +318 -344
- package/dist/src/cli/simple-commands/init/templates/github-safe-enhanced.js +218 -173
- package/dist/src/cli/simple-commands/init/templates/github-safe.js +75 -65
- package/dist/src/cli/simple-commands/init/templates/memory-bank-md.js +6 -3
- package/dist/src/cli/simple-commands/init/templates/readme-files.js +4 -2
- package/dist/src/cli/simple-commands/init/templates/safe-hook-patterns.js +230 -187
- package/dist/src/cli/simple-commands/init/templates/sparc-modes.js +80 -53
- package/dist/src/cli/simple-commands/init/templates/verification-claude-md.js +85 -101
- package/dist/src/cli/simple-commands/init/validation/config-validator.js +330 -283
- package/dist/src/cli/simple-commands/init/validation/health-checker.js +561 -495
- package/dist/src/cli/simple-commands/init/validation/index.js +358 -302
- package/dist/src/cli/simple-commands/init/validation/mode-validator.js +359 -308
- package/dist/src/cli/simple-commands/init/validation/post-init-validator.js +366 -389
- package/dist/src/cli/simple-commands/init/validation/pre-init-validator.js +268 -270
- package/dist/src/cli/simple-commands/init/validation/test-runner.js +447 -427
- package/dist/src/cli/simple-commands/init.js +2 -1
- package/dist/src/cli/simple-commands/mcp-health.js +158 -131
- package/dist/src/cli/simple-commands/mcp-integration-layer.js +634 -533
- package/dist/src/cli/simple-commands/mcp.js +400 -345
- package/dist/src/cli/simple-commands/memory-consolidation.js +537 -426
- package/dist/src/cli/simple-commands/memory.js +311 -247
- package/dist/src/cli/simple-commands/migrate-hooks.js +46 -39
- package/dist/src/cli/simple-commands/monitor.js +363 -294
- package/dist/src/cli/simple-commands/neural.js +65 -51
- package/dist/src/cli/simple-commands/pair-autofix-only.js +662 -538
- package/dist/src/cli/simple-commands/pair-basic.js +656 -528
- package/dist/src/cli/simple-commands/pair-old.js +543 -430
- package/dist/src/cli/simple-commands/pair-working.js +751 -615
- package/dist/src/cli/simple-commands/pair.js +751 -615
- package/dist/src/cli/simple-commands/performance-hooks.js +111 -83
- package/dist/src/cli/simple-commands/performance-metrics.js +433 -348
- package/dist/src/cli/simple-commands/process-ui-enhanced.js +787 -708
- package/dist/src/cli/simple-commands/process-ui.js +254 -230
- package/dist/src/cli/simple-commands/realtime-update-system.js +611 -525
- package/dist/src/cli/simple-commands/sparc/architecture.js +1530 -1704
- package/dist/src/cli/simple-commands/sparc/commands.js +516 -438
- package/dist/src/cli/simple-commands/sparc/completion.js +1481 -1224
- package/dist/src/cli/simple-commands/sparc/coordinator.js +978 -913
- package/dist/src/cli/simple-commands/sparc/index.js +298 -241
- package/dist/src/cli/simple-commands/sparc/phase-base.js +390 -314
- package/dist/src/cli/simple-commands/sparc/pseudocode.js +869 -965
- package/dist/src/cli/simple-commands/sparc/refinement.js +1273 -980
- package/dist/src/cli/simple-commands/sparc/specification.js +645 -559
- 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 +55 -47
- 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 +87 -101
- 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 +493 -465
- package/dist/src/cli/simple-commands/start-ui.js +132 -108
- package/dist/src/cli/simple-commands/start-wrapper.js +268 -240
- package/dist/src/cli/simple-commands/start.js +1 -1
- package/dist/src/cli/simple-commands/status.js +275 -254
- package/dist/src/cli/simple-commands/stream-chain-clean.js +171 -128
- package/dist/src/cli/simple-commands/stream-chain-fixed.js +82 -61
- package/dist/src/cli/simple-commands/stream-chain-real.js +331 -267
- package/dist/src/cli/simple-commands/stream-chain-working.js +263 -211
- package/dist/src/cli/simple-commands/stream-chain.js +318 -260
- package/dist/src/cli/simple-commands/stream-processor.js +315 -290
- package/dist/src/cli/simple-commands/swarm-executor.js +222 -189
- package/dist/src/cli/simple-commands/swarm-metrics-integration.js +300 -208
- package/dist/src/cli/simple-commands/swarm-ui.js +703 -623
- package/dist/src/cli/simple-commands/swarm-webui-integration.js +286 -258
- package/dist/src/cli/simple-commands/swarm.js +1082 -887
- package/dist/src/cli/simple-commands/task.js +206 -161
- package/dist/src/cli/simple-commands/timestamp-fix.js +89 -59
- package/dist/src/cli/simple-commands/token-tracker.js +316 -258
- package/dist/src/cli/simple-commands/tool-execution-framework.js +519 -433
- package/dist/src/cli/simple-commands/train-and-stream.js +331 -275
- package/dist/src/cli/simple-commands/training-pipeline.js +725 -619
- package/dist/src/cli/simple-commands/training.js +227 -170
- package/dist/src/cli/simple-commands/verification-hooks.js +284 -261
- package/dist/src/cli/simple-commands/verification-integration.js +417 -389
- package/dist/src/cli/simple-commands/verification-training-integration.js +606 -486
- package/dist/src/cli/simple-commands/verification.js +513 -493
- package/dist/src/cli/simple-commands/web-server.js +836 -766
- package/dist/src/cli/simple-commands/webui-validator.js +124 -106
- package/dist/src/coordination/byzantine-memory-channels.js +25 -1
- package/dist/src/coordination/event-bus/demo-wasm-integration.js +251 -212
- package/dist/src/coordination/event-bus/qe-event-bus.js +748 -608
- package/dist/src/coordination/event-bus/qe-event-bus.test.js +454 -379
- package/dist/src/coordination/iteration-tracker.js +454 -363
- package/dist/src/index.js +384 -35
- package/dist/src/mcp/DEPRECATED.js +60 -46
- package/dist/src/mcp/fixes/mcp-error-fixes.js +134 -115
- package/dist/src/mcp/implementations/agent-tracker.js +128 -114
- package/dist/src/mcp/implementations/daa-tools.js +350 -292
- package/dist/src/mcp/implementations/workflow-tools.js +361 -329
- package/dist/src/mcp/mcp-config-manager.js +1331 -1183
- package/dist/src/mcp/mcp-server-novice-simplified.js +17 -11
- package/dist/src/mcp/mcp-server-novice.js +17 -11
- package/dist/src/mcp/mcp-server-sdk.js +17 -11
- package/dist/src/mcp/mcp-server.js +1484 -1620
- package/dist/src/mcp/ruv-swarm-wrapper.js +239 -209
- package/dist/src/memory/advanced-serializer.js +589 -609
- package/dist/src/memory/enhanced-examples.js +305 -220
- package/dist/src/memory/enhanced-memory.js +336 -295
- package/dist/src/memory/enhanced-session-serializer.js +492 -408
- package/dist/src/memory/fallback-memory-system.js +1021 -900
- package/dist/src/memory/fallback-store.js +131 -93
- package/dist/src/memory/high-performance-serialization.js +730 -592
- package/dist/src/memory/in-memory-store.js +213 -161
- package/dist/src/memory/index.js +157 -123
- package/dist/src/memory/lock-free-structures.js +764 -578
- package/dist/src/memory/memory-mapped-persistence.js +766 -585
- package/dist/src/memory/memory-pressure-manager.js +707 -569
- package/dist/src/memory/migration.js +445 -358
- package/dist/src/memory/shared-memory.js +768 -641
- package/dist/src/memory/sqlite-store.js +325 -245
- package/dist/src/memory/sqlite-wrapper.js +151 -122
- package/dist/src/memory/swarm-memory.js +603 -470
- package/dist/src/memory/test-example.js +134 -126
- package/dist/src/memory/ultra-fast-memory-store.js +821 -622
- package/dist/src/memory/unified-memory-manager.js +437 -356
- package/dist/src/swarm/CodeRefactoringSwarm.js +952 -777
- package/dist/src/utils/__tests__/github-cli-safety-wrapper.test.js +400 -332
- package/dist/src/utils/error-handler.js +2 -36
- package/dist/src/utils/github-cli-safe.js +64 -56
- package/dist/src/utils/github-cli-safety-wrapper.js +546 -451
- package/dist/src/utils/npx-isolated-cache.js +119 -104
- package/dist/src/utils/preference-manager.js +652 -622
- package/dist/src/utils/timezone-utils.js +105 -86
- package/dist/src/web/api/apm-routes.js +353 -0
- package/dist/src/web/api/config/api-config.js +184 -0
- package/dist/src/web/api/middleware/auth.js +203 -0
- package/dist/src/web/api/middleware/cache.js +273 -0
- package/dist/src/web/api/middleware/error-handler.js +257 -0
- package/dist/src/web/api/middleware/request-logger.js +215 -0
- package/dist/src/web/api/middleware/validation.js +323 -0
- package/dist/src/web/api/routes/events.js +463 -0
- package/dist/src/web/api/routes/hierarchy.js +300 -0
- package/dist/src/web/api/routes/index.js +12 -0
- package/dist/src/web/api/routes/metrics.js +559 -0
- package/dist/src/web/api/routes/parallel-status.js +359 -0
- package/dist/src/web/api/routes/status.js +448 -0
- package/dist/src/web/api/server.js +462 -0
- package/dist/src/web/dashboard/hooks/useWebSocket.js +383 -0
- package/dist/src/web/dashboard/index.js +85 -0
- package/dist/src/web/dashboard/realtime/CustomSyncManager.js +439 -0
- package/dist/src/web/dashboard/realtime/NativeWebSocketManager.js +323 -0
- package/dist/src/web/dashboard/realtime/PerformanceBenchmark.js +527 -0
- package/dist/src/web/dashboard/realtime/RealtimeCommunicationManager.js +474 -0
- package/dist/src/web/dashboard/realtime/RealtimeServer.js +666 -0
- package/dist/src/web/dashboard/realtime/SSEManager.js +426 -0
- package/dist/src/web/dashboard/types.js +4 -0
- package/dist/src/web/messaging/agent-status-tracker.js +453 -0
- package/dist/src/web/messaging/human-intervention-system.js +305 -0
- package/dist/src/web/messaging/message-filter.js +302 -0
- package/dist/src/web/messaging/swarm-message-router.js +324 -0
- package/dist/src/web/messaging/transparency-logger.js +421 -0
- package/dist/src/web/portal-server.js +460 -0
- package/dist/src/web/server.js +322 -0
- package/dist/src/web/websocket/apm-websocket-handler.js +453 -0
- package/dist/src/web/websocket/websocket-manager.js +780 -0
- package/package.json +5 -3
- package/dist/src/cli/minimal-main.js +0 -22
- package/dist/src/enterprise/analytics-manager.js +0 -1135
- package/dist/src/enterprise/audit-manager.js +0 -1115
- package/dist/src/enterprise/cloud-manager.js +0 -891
- package/dist/src/enterprise/deployment-manager.js +0 -966
- package/dist/src/enterprise/index.js +0 -6
- package/dist/src/enterprise/project-manager.js +0 -584
- package/dist/src/enterprise/security-manager.js +0 -991
- package/dist/src/migration/index.js +0 -92
- package/dist/src/migration/logger.js +0 -121
- package/dist/src/migration/migration-analyzer.js +0 -268
- package/dist/src/migration/migration-runner.js +0 -522
- package/dist/src/migration/migration-validator.js +0 -285
- package/dist/src/migration/progress-reporter.js +0 -150
- package/dist/src/migration/rollback-manager.js +0 -321
- package/dist/src/migration/tests/migration-system.test.js +0 -7
- package/dist/src/migration/types.js +0 -3
- package/dist/src/swarm/__tests__/integration.test.js +0 -227
- package/dist/src/swarm/__tests__/prompt-copier.test.js +0 -344
- package/dist/src/swarm/advanced-orchestrator.js +0 -1095
- package/dist/src/swarm/claude-code-interface.js +0 -961
- package/dist/src/swarm/claude-flow-executor.js +0 -229
- package/dist/src/swarm/consensus-coordinator.js +0 -475
- package/dist/src/swarm/coordinator.js +0 -2993
- package/dist/src/swarm/direct-executor.js +0 -1180
- package/dist/src/swarm/error-recovery/advanced-error-detection.js +0 -691
- package/dist/src/swarm/error-recovery/automated-recovery-workflows.js +0 -998
- package/dist/src/swarm/error-recovery/error-recovery-coordinator.js +0 -1197
- package/dist/src/swarm/error-recovery/recovery-monitoring.js +0 -772
- package/dist/src/swarm/error-recovery/resilience-architecture.js +0 -714
- package/dist/src/swarm/error-recovery/self-healing-mechanisms.js +0 -1319
- package/dist/src/swarm/error-recovery/test-error-recovery-effectiveness.js +0 -808
- package/dist/src/swarm/executor-v2.js +0 -322
- package/dist/src/swarm/executor.js +0 -815
- package/dist/src/swarm/hive-mind-integration.js +0 -703
- package/dist/src/swarm/index.js +0 -41
- package/dist/src/swarm/json-output-aggregator.js +0 -267
- package/dist/src/swarm/large-scale-coordinator.js +0 -542
- package/dist/src/swarm/mcp-integration-wrapper.js +0 -628
- package/dist/src/swarm/memory.js +0 -1117
- package/dist/src/swarm/optimizations/__tests__/optimization.test.js +0 -348
- package/dist/src/swarm/optimizations/async-file-manager.js +0 -285
- package/dist/src/swarm/optimizations/circular-buffer.js +0 -162
- package/dist/src/swarm/optimizations/connection-pool.js +0 -244
- package/dist/src/swarm/optimizations/index.js +0 -28
- package/dist/src/swarm/optimizations/optimized-executor.js +0 -320
- package/dist/src/swarm/optimizations/ttl-map.js +0 -234
- package/dist/src/swarm/prompt-cli.js +0 -200
- package/dist/src/swarm/prompt-copier-enhanced.js +0 -202
- package/dist/src/swarm/prompt-copier.js +0 -381
- package/dist/src/swarm/prompt-manager.js +0 -295
- package/dist/src/swarm/prompt-utils.js +0 -310
- package/dist/src/swarm/result-aggregator.js +0 -718
- package/dist/src/swarm/sparc-executor.js +0 -1568
- package/dist/src/swarm/strategies/auto.js +0 -758
- package/dist/src/swarm/strategies/base.js +0 -128
- package/dist/src/swarm/strategies/research.js +0 -914
- package/dist/src/swarm/strategies/strategy-metrics-patch.js +0 -2
- package/dist/src/swarm/types.js +0 -52
- package/dist/src/swarm/workers/copy-worker.js +0 -56
- package/dist/src/validators/epic-config-schema.js +0 -214
- package/dist/src/validators/index.js +0 -10
- package/dist/src/validators/swarm-init-validator.js +0 -259
- package/dist/src/validators/todowrite-batching-validator.js +0 -215
- package/dist/src/validators/todowrite-integration.js +0 -187
- package/dist/src/web/frontend/node_modules/.monaco-editor-MndU045b/esm/vs/editor/contrib/documentSymbols/browser/documentSymbols.js +0 -23
- package/dist/src/web/frontend/node_modules/.monaco-editor-MndU045b/esm/vs/editor/contrib/dropOrPasteInto/browser/copyPasteContribution.js +0 -57
- package/dist/src/web/frontend/node_modules/.monaco-editor-MndU045b/esm/vs/editor/contrib/dropOrPasteInto/browser/copyPasteController.js +0 -401
- package/dist/src/web/frontend/node_modules/.monaco-editor-MndU045b/esm/vs/editor/contrib/dropOrPasteInto/browser/defaultProviders.js +0 -181
- package/dist/src/web/frontend/node_modules/.monaco-editor-MndU045b/esm/vs/editor/contrib/dropOrPasteInto/browser/dropIntoEditorContribution.js +0 -44
- package/dist/src/web/frontend/node_modules/.monaco-editor-MndU045b/esm/vs/editor/contrib/dropOrPasteInto/browser/dropIntoEditorController.js +0 -157
- package/dist/src/web/frontend/node_modules/.monaco-editor-MndU045b/esm/vs/editor/contrib/dropOrPasteInto/browser/edit.js +0 -71
- package/dist/src/web/frontend/node_modules/.monaco-editor-MndU045b/esm/vs/editor/contrib/editorState/browser/editorState.js +0 -112
- package/dist/src/web/frontend/node_modules/.monaco-editor-MndU045b/esm/vs/editor/contrib/find/browser/findController.js +0 -990
- package/dist/src/web/frontend/node_modules/.monaco-editor-MndU045b/esm/vs/editor/contrib/find/browser/findDecorations.js +0 -296
- package/dist/src/web/frontend/node_modules/.monaco-editor-MndU045b/esm/vs/editor/contrib/find/browser/findModel.js +0 -488
- package/dist/src/web/frontend/node_modules/.monaco-editor-MndU045b/esm/vs/editor/contrib/find/browser/findOptionsWidget.js +0 -138
- package/dist/src/web/frontend/node_modules/.monaco-editor-MndU045b/esm/vs/editor/contrib/find/browser/findState.js +0 -243
- package/dist/src/web/frontend/node_modules/.monaco-editor-MndU045b/esm/vs/editor/contrib/find/browser/findWidget.js +0 -1177
- package/dist/src/web/frontend/node_modules/.monaco-editor-MndU045b/esm/vs/editor/contrib/folding/browser/folding.js +0 -1093
- package/dist/src/web/frontend/node_modules/.monaco-editor-MndU045b/esm/vs/editor/contrib/folding/browser/foldingDecorations.js +0 -133
- package/dist/src/web/frontend/node_modules/.monaco-editor-MndU045b/esm/vs/editor/contrib/folding/browser/foldingModel.js +0 -538
- package/dist/src/web/frontend/node_modules/.monaco-editor-MndU045b/esm/vs/editor/contrib/folding/browser/foldingRanges.js +0 -351
- package/dist/src/web/frontend/node_modules/.monaco-editor-MndU045b/esm/vs/editor/contrib/fontZoom/browser/fontZoom.js +0 -49
- package/dist/src/web/frontend/node_modules/.monaco-editor-MndU045b/esm/vs/editor/contrib/format/browser/format.js +0 -360
- package/dist/src/web/frontend/node_modules/.monaco-editor-MndU045b/esm/vs/editor/contrib/format/browser/formatActions.js +0 -263
- package/dist/src/web/frontend/node_modules/.monaco-editor-MndU045b/esm/vs/editor/contrib/format/browser/formattingEdit.js +0 -54
- package/dist/src/web/frontend/node_modules/.monaco-editor-MndU045b/esm/vs/editor/contrib/gotoSymbol/browser/link/clickLinkGesture.js +0 -149
- package/dist/src/web/frontend/node_modules/.monaco-editor-MndU045b/esm/vs/editor/contrib/hover/browser/contentHover.js +0 -874
- package/dist/src/web/frontend/node_modules/.monaco-editor-MndU045b/esm/vs/editor/contrib/inlineCompletions/browser/commandIds.js +0 -7
- package/dist/src/web/frontend/node_modules/.monaco-editor-MndU045b/esm/vs/editor/contrib/inlineCompletions/browser/commands.js +0 -199
- package/dist/src/web/frontend/node_modules/.monaco-editor-MndU045b/esm/vs/editor/contrib/linesOperations/browser/copyLinesCommand.js +0 -70
- package/dist/src/web/frontend/node_modules/.monaco-editor-MndU045b/esm/vs/editor/contrib/quickAccess/browser/commandsQuickAccess.js +0 -26
- package/dist/src/web/frontend/node_modules/.monaco-editor-MndU045b/esm/vs/editor/contrib/quickAccess/browser/editorNavigationQuickAccess.js +0 -153
- package/dist/src/web/frontend/node_modules/.monaco-editor-MndU045b/esm/vs/editor/contrib/readOnlyMessage/browser/contribution.js +0 -33
- package/dist/src/web/frontend/node_modules/.monaco-editor-MndU045b/esm/vs/editor/contrib/semanticTokens/browser/documentSemanticTokens.js +0 -354
- package/dist/src/web/frontend/node_modules/.monaco-editor-MndU045b/esm/vs/editor/contrib/smartSelect/browser/bracketSelections.js +0 -146
- package/dist/src/web/frontend/node_modules/.monaco-editor-MndU045b/esm/vs/editor/contrib/suggest/browser/completionModel.js +0 -224
- package/dist/src/web/frontend/node_modules/.monaco-editor-MndU045b/esm/vs/editor/contrib/unicodeHighlighter/browser/bannerController.js +0 -119
- package/dist/src/web/frontend/node_modules/.monaco-editor-MndU045b/esm/vs/editor/edcore.main.js +0 -14
- package/dist/src/web/frontend/node_modules/.monaco-editor-MndU045b/esm/vs/editor/editor.all.js +0 -63
- package/dist/src/web/frontend/node_modules/.monaco-editor-MndU045b/esm/vs/editor/editor.api.js +0 -55
- package/dist/src/web/frontend/node_modules/.monaco-editor-MndU045b/esm/vs/editor/editor.main.js +0 -7
- package/dist/src/web/frontend/node_modules/.monaco-editor-MndU045b/esm/vs/editor/editor.worker.js +0 -25
- package/dist/src/web/frontend/node_modules/.monaco-editor-MndU045b/esm/vs/editor/standalone/browser/colorizer.js +0 -118
- package/dist/src/web/frontend/node_modules/.monaco-editor-MndU045b/esm/vs/language/css/css.worker.js +0 -36869
- package/dist/src/web/frontend/node_modules/.monaco-editor-MndU045b/esm/vs/language/css/cssMode.js +0 -2035
- package/dist/src/web/frontend/node_modules/.monaco-editor-MndU045b/esm/vs/platform/accessibility/browser/accessibilityService.js +0 -88
- package/dist/src/web/frontend/node_modules/.monaco-editor-MndU045b/esm/vs/platform/accessibility/common/accessibility.js +0 -9
- package/dist/src/web/frontend/node_modules/.monaco-editor-MndU045b/esm/vs/platform/action/common/action.js +0 -7
- package/dist/src/web/frontend/node_modules/.monaco-editor-MndU045b/esm/vs/platform/action/common/actionCommonCategories.js +0 -13
- package/dist/src/web/frontend/node_modules/.monaco-editor-MndU045b/esm/vs/platform/actionWidget/browser/actionList.js +0 -276
- package/dist/src/web/frontend/node_modules/.monaco-editor-MndU045b/esm/vs/platform/actionWidget/browser/actionWidget.js +0 -248
- package/dist/src/web/frontend/node_modules/.monaco-editor-MndU045b/esm/vs/platform/actionWidget/common/actionWidget.js +0 -5
- package/dist/src/web/frontend/node_modules/.monaco-editor-MndU045b/esm/vs/platform/actions/common/actions.js +0 -409
- package/dist/src/web/frontend/node_modules/.monaco-editor-MndU045b/esm/vs/platform/audioCues/browser/audioCueService.js +0 -176
- package/dist/src/web/frontend/node_modules/.monaco-editor-MndU045b/esm/vs/platform/clipboard/browser/clipboardService.js +0 -141
- package/dist/src/web/frontend/node_modules/.monaco-editor-MndU045b/esm/vs/platform/clipboard/common/clipboardService.js +0 -6
- package/dist/src/web/frontend/node_modules/.monaco-editor-MndU045b/esm/vs/platform/commands/common/commands.js +0 -80
- package/dist/src/web/frontend/node_modules/.monaco-editor-MndU045b/esm/vs/platform/configuration/common/configuration.js +0 -86
- package/dist/src/web/frontend/node_modules/.monaco-editor-MndU045b/esm/vs/platform/configuration/common/configurationModels.js +0 -554
- package/dist/src/web/frontend/node_modules/.monaco-editor-MndU045b/esm/vs/platform/configuration/common/configurationRegistry.js +0 -317
- package/dist/src/web/frontend/node_modules/.monaco-editor-MndU045b/esm/vs/platform/configuration/common/configurations.js +0 -41
- package/dist/src/web/frontend/node_modules/.monaco-editor-MndU045b/esm/vs/platform/contextkey/browser/contextKeyService.js +0 -432
- package/dist/src/web/frontend/node_modules/.monaco-editor-MndU045b/esm/vs/platform/contextkey/common/contextkey.js +0 -1547
- package/dist/src/web/frontend/node_modules/.monaco-editor-MndU045b/esm/vs/platform/contextkey/common/contextkeys.js +0 -18
- package/dist/src/web/frontend/node_modules/.monaco-editor-MndU045b/esm/vs/platform/contextview/browser/contextMenuHandler.js +0 -124
- package/dist/src/web/frontend/node_modules/.monaco-editor-MndU045b/esm/vs/platform/contextview/browser/contextMenuService.js +0 -101
- package/dist/src/web/frontend/node_modules/.monaco-editor-MndU045b/esm/vs/platform/contextview/browser/contextView.js +0 -7
- package/dist/src/web/frontend/node_modules/.monaco-editor-MndU045b/esm/vs/platform/contextview/browser/contextViewService.js +0 -72
- package/dist/src/web/frontend/node_modules/.monaco-editor-MndU045b/esm/vs/platform/dialogs/common/dialogs.js +0 -2
- package/dist/src/web/frontend/node_modules/.monaco-editor-MndU045b/esm/vs/platform/dnd/browser/dnd.js +0 -36
- package/dist/src/web/frontend/node_modules/.monaco-editor-MndU045b/esm/vs/platform/editor/common/editor.js +0 -17
- package/dist/src/web/frontend/node_modules/.monaco-editor-MndU045b/esm/vs/platform/environment/common/environment.js +0 -2
- package/dist/src/web/frontend/node_modules/.monaco-editor-MndU045b/esm/vs/platform/extensions/common/extensions.js +0 -47
- package/dist/src/web/frontend/node_modules/.monaco-editor-MndU045b/esm/vs/platform/files/common/files.js +0 -9
- package/dist/src/web/frontend/node_modules/.monaco-editor-MndU045b/esm/vs/platform/history/browser/contextScopedHistoryWidget.js +0 -105
- package/dist/src/web/frontend/node_modules/.monaco-editor-MndU045b/esm/vs/platform/instantiation/common/descriptors.js +0 -11
- package/dist/src/web/frontend/node_modules/.monaco-editor-MndU045b/esm/vs/platform/instantiation/common/extensions.js +0 -15
- package/dist/src/web/frontend/node_modules/.monaco-editor-MndU045b/esm/vs/platform/keybinding/common/abstractKeybindingService.js +0 -277
- package/dist/src/web/frontend/node_modules/.monaco-editor-MndU045b/esm/vs/platform/keybinding/common/baseResolvedKeybinding.js +0 -53
- package/dist/src/web/frontend/node_modules/.monaco-editor-MndU045b/esm/vs/platform/quickinput/browser/commandsQuickAccess.js +0 -354
- package/dist/src/web/frontend/node_modules/.monaco-editor-MndU045b/esm/vs/platform/theme/browser/defaultStyles.js +0 -162
- package/dist/src/web/frontend/node_modules/.monaco-editor-MndU045b/esm/vs/platform/theme/common/colorRegistry.js +0 -482
- package/dist/src/web/frontend/node_modules/.monaco-editor-MndU045b/min/vs/basic-languages/abap/abap.js +0 -10
- package/dist/src/web/frontend/node_modules/.monaco-editor-MndU045b/min/vs/basic-languages/apex/apex.js +0 -10
- package/dist/src/web/frontend/node_modules/.monaco-editor-MndU045b/min/vs/basic-languages/azcli/azcli.js +0 -10
- package/dist/src/web/frontend/node_modules/.monaco-editor-MndU045b/min/vs/basic-languages/bat/bat.js +0 -10
- package/dist/src/web/frontend/node_modules/.monaco-editor-MndU045b/min/vs/basic-languages/bicep/bicep.js +0 -11
- package/dist/src/web/frontend/node_modules/.monaco-editor-MndU045b/min/vs/basic-languages/cameligo/cameligo.js +0 -10
- package/dist/src/web/frontend/node_modules/.monaco-editor-MndU045b/min/vs/basic-languages/clojure/clojure.js +0 -10
- package/dist/src/web/frontend/node_modules/.monaco-editor-MndU045b/min/vs/basic-languages/coffee/coffee.js +0 -10
- package/dist/src/web/frontend/node_modules/.monaco-editor-MndU045b/min/vs/basic-languages/cpp/cpp.js +0 -10
- package/dist/src/web/frontend/node_modules/.monaco-editor-MndU045b/min/vs/basic-languages/csharp/csharp.js +0 -10
- package/dist/src/web/frontend/node_modules/.monaco-editor-MndU045b/min/vs/basic-languages/csp/csp.js +0 -10
- package/dist/src/web/frontend/node_modules/.monaco-editor-MndU045b/min/vs/basic-languages/css/css.js +0 -12
- package/dist/src/web/frontend/node_modules/.monaco-editor-MndU045b/min/vs/basic-languages/cypher/cypher.js +0 -10
- package/dist/src/web/frontend/node_modules/.monaco-editor-MndU045b/min/vs/basic-languages/dart/dart.js +0 -10
- package/dist/src/web/frontend/node_modules/.monaco-editor-MndU045b/min/vs/basic-languages/dockerfile/dockerfile.js +0 -10
- package/dist/src/web/frontend/node_modules/.monaco-editor-MndU045b/min/vs/basic-languages/ecl/ecl.js +0 -10
- package/dist/src/web/frontend/node_modules/.monaco-editor-MndU045b/min/vs/basic-languages/elixir/elixir.js +0 -10
- package/dist/src/web/frontend/node_modules/.monaco-editor-MndU045b/min/vs/basic-languages/flow9/flow9.js +0 -10
- package/dist/src/web/frontend/node_modules/.monaco-editor-MndU045b/min/vs/editor/editor.main.js +0 -745
- package/dist/src/web/frontend/node_modules/.monaco-editor-MndU045b/min/vs/editor/editor.main.nls.de.js +0 -31
- package/dist/src/web/frontend/node_modules/.monaco-editor-MndU045b/min/vs/editor/editor.main.nls.es.js +0 -31
- package/dist/src/web/frontend/node_modules/.monaco-editor-MndU045b/min/vs/editor/editor.main.nls.fr.js +0 -29
- package/dist/src/web/frontend/node_modules/.monaco-editor-MndU045b/min/vs/editor/editor.main.nls.it.js +0 -29
- package/dist/src/web/frontend/node_modules/.monaco-editor-MndU045b/min/vs/editor/editor.main.nls.ja.js +0 -31
- package/dist/src/web/frontend/node_modules/.monaco-editor-MndU045b/min/vs/editor/editor.main.nls.js +0 -29
- package/dist/src/web/frontend/node_modules/.monaco-editor-MndU045b/min/vs/editor/editor.main.nls.ko.js +0 -29
- package/dist/src/web/frontend/node_modules/.monaco-editor-MndU045b/min/vs/editor/editor.main.nls.ru.js +0 -31
- package/dist/src/web/frontend/node_modules/.monaco-editor-MndU045b/min/vs/editor/editor.main.nls.zh-cn.js +0 -31
- package/dist/src/web/frontend/node_modules/.monaco-editor-MndU045b/min/vs/editor/editor.main.nls.zh-tw.js +0 -29
- package/dist/src/web/frontend/node_modules/.monaco-editor-MndU045b/min/vs/language/css/cssMode.js +0 -13
- package/dist/src/web/frontend/node_modules/.monaco-editor-MndU045b/min/vs/language/css/cssWorker.js +0 -81
- package/dist/src/web/frontend/node_modules/.multicast-dns-iKseM9bB/cli.js +0 -64
- package/dist/src/web/frontend/node_modules/.multicast-dns-iKseM9bB/example.js +0 -36
- package/dist/src/web/frontend/node_modules/.multicast-dns-iKseM9bB/index.js +0 -205
- package/dist/src/web/frontend/node_modules/.multicast-dns-iKseM9bB/test.js +0 -260
- package/dist/src/web/frontend/node_modules/.nanoid-PAMEV9Hd/async/index.browser.js +0 -34
- package/dist/src/web/frontend/node_modules/.nanoid-PAMEV9Hd/async/index.js +0 -35
- package/dist/src/web/frontend/node_modules/.nanoid-PAMEV9Hd/async/index.native.js +0 -26
- package/dist/src/web/frontend/node_modules/.nanoid-PAMEV9Hd/index.browser.js +0 -34
- package/dist/src/web/frontend/node_modules/.nanoid-PAMEV9Hd/index.js +0 -45
- package/dist/src/web/frontend/node_modules/.nanoid-PAMEV9Hd/nanoid.js +0 -1
- package/dist/src/web/frontend/node_modules/.nanoid-PAMEV9Hd/non-secure/index.js +0 -21
- package/dist/src/web/frontend/node_modules/.nanoid-PAMEV9Hd/url-alphabet/index.js +0 -3
- package/dist/src/web/frontend/node_modules/.nodemon-QcvNKhKT/bin/nodemon.js +0 -16
- package/dist/src/web/frontend/node_modules/.nodemon-QcvNKhKT/lib/cli/index.js +0 -49
- package/dist/src/web/frontend/node_modules/.nodemon-QcvNKhKT/lib/cli/parse.js +0 -230
- package/dist/src/web/frontend/node_modules/.nodemon-QcvNKhKT/lib/config/command.js +0 -43
- package/dist/src/web/frontend/node_modules/.nodemon-QcvNKhKT/lib/config/defaults.js +0 -34
- package/dist/src/web/frontend/node_modules/.nodemon-QcvNKhKT/lib/config/exec.js +0 -234
- package/dist/src/web/frontend/node_modules/.nodemon-QcvNKhKT/lib/config/index.js +0 -93
- package/dist/src/web/frontend/node_modules/.nodemon-QcvNKhKT/lib/config/load.js +0 -225
- package/dist/src/web/frontend/node_modules/.nodemon-QcvNKhKT/lib/help/index.js +0 -27
- package/dist/src/web/frontend/node_modules/.nodemon-QcvNKhKT/lib/index.js +0 -1
- package/dist/src/web/frontend/node_modules/.nodemon-QcvNKhKT/lib/monitor/index.js +0 -4
- package/dist/src/web/frontend/node_modules/.nodemon-QcvNKhKT/lib/monitor/match.js +0 -287
- package/dist/src/web/frontend/node_modules/.nodemon-QcvNKhKT/lib/monitor/run.js +0 -562
- package/dist/src/web/frontend/node_modules/.nodemon-QcvNKhKT/lib/monitor/signals.js +0 -34
- package/dist/src/web/frontend/node_modules/.nodemon-QcvNKhKT/lib/monitor/watch.js +0 -244
- package/dist/src/web/frontend/node_modules/.nodemon-QcvNKhKT/lib/nodemon.js +0 -317
- package/dist/src/web/frontend/node_modules/.nodemon-QcvNKhKT/lib/rules/add.js +0 -89
- package/dist/src/web/frontend/node_modules/.nodemon-QcvNKhKT/lib/rules/index.js +0 -53
- package/dist/src/web/frontend/node_modules/.nodemon-QcvNKhKT/lib/rules/parse.js +0 -43
- package/dist/src/web/frontend/node_modules/.nodemon-QcvNKhKT/lib/spawn.js +0 -74
- package/dist/src/web/frontend/node_modules/.nodemon-QcvNKhKT/lib/utils/bus.js +0 -44
- package/dist/src/web/frontend/node_modules/.nodemon-QcvNKhKT/lib/utils/clone.js +0 -40
- package/dist/src/web/frontend/node_modules/.nodemon-QcvNKhKT/lib/utils/colour.js +0 -26
- package/dist/src/web/frontend/node_modules/.nodemon-QcvNKhKT/lib/utils/index.js +0 -103
- package/dist/src/web/frontend/node_modules/.nodemon-QcvNKhKT/lib/utils/log.js +0 -82
- package/dist/src/web/frontend/node_modules/.nodemon-QcvNKhKT/lib/utils/merge.js +0 -47
- package/dist/src/web/frontend/node_modules/.nodemon-QcvNKhKT/lib/version.js +0 -100
- package/dist/src/web/frontend/node_modules/.nodemon-QcvNKhKT/node_modules/brace-expansion/index.js +0 -201
- package/dist/src/web/frontend/node_modules/.nodemon-QcvNKhKT/node_modules/has-flag/index.js +0 -8
- package/dist/src/web/frontend/node_modules/.nodemon-QcvNKhKT/node_modules/minimatch/minimatch.js +0 -947
- package/dist/src/web/frontend/node_modules/.nodemon-QcvNKhKT/node_modules/supports-color/browser.js +0 -5
- package/dist/src/web/frontend/node_modules/.nodemon-QcvNKhKT/node_modules/supports-color/index.js +0 -131
- package/dist/src/web/frontend/node_modules/.pidtree-icfat3SQ/bin/pidtree.js +0 -128
- package/dist/src/web/frontend/node_modules/.pidtree-icfat3SQ/index.js +0 -49
- package/dist/src/web/frontend/node_modules/.pidtree-icfat3SQ/lib/bin.js +0 -61
- package/dist/src/web/frontend/node_modules/.pidtree-icfat3SQ/lib/get.js +0 -45
- package/dist/src/web/frontend/node_modules/.pidtree-icfat3SQ/lib/pidtree.js +0 -104
- package/dist/src/web/frontend/node_modules/.pidtree-icfat3SQ/lib/ps.js +0 -47
- package/dist/src/web/frontend/node_modules/.pidtree-icfat3SQ/lib/wmic.js +0 -49
- package/dist/src/web/frontend/node_modules/.prettier-ApZm3b7s/doc.js +0 -1270
- package/dist/src/web/frontend/node_modules/.prettier-ApZm3b7s/plugins/acorn.js +0 -15
- package/dist/src/web/frontend/node_modules/.prettier-ApZm3b7s/plugins/angular.js +0 -2
- package/dist/src/web/frontend/node_modules/.prettier-ApZm3b7s/plugins/babel.js +0 -15
- package/dist/src/web/frontend/node_modules/.prettier-ApZm3b7s/plugins/estree.js +0 -36
- package/dist/src/web/frontend/node_modules/.prettier-ApZm3b7s/plugins/flow.js +0 -19
- package/dist/src/web/frontend/node_modules/.prettier-ApZm3b7s/plugins/glimmer.js +0 -29
- package/dist/src/web/frontend/node_modules/.prettier-ApZm3b7s/plugins/graphql.js +0 -29
- package/dist/src/web/frontend/node_modules/.prettier-ApZm3b7s/plugins/html.js +0 -22
- package/dist/src/web/frontend/node_modules/.prettier-ApZm3b7s/plugins/markdown.js +0 -63
- package/dist/src/web/frontend/node_modules/.prettier-ApZm3b7s/plugins/meriyah.js +0 -4
- package/dist/src/web/frontend/node_modules/.prettier-ApZm3b7s/plugins/postcss.js +0 -54
- package/dist/src/web/frontend/node_modules/.prettier-ApZm3b7s/plugins/typescript.js +0 -20
- package/dist/src/web/frontend/node_modules/.prettier-ApZm3b7s/plugins/yaml.js +0 -160
- package/dist/src/web/frontend/node_modules/.prettier-ApZm3b7s/standalone.js +0 -34
- package/dist/src/web/frontend/node_modules/.react-scripts-OTANyoRb/bin/react-scripts.js +0 -58
- package/dist/src/web/frontend/node_modules/.react-scripts-OTANyoRb/config/env.js +0 -112
- package/dist/src/web/frontend/node_modules/.react-scripts-OTANyoRb/config/getHttpsConfig.js +0 -74
- package/dist/src/web/frontend/node_modules/.react-scripts-OTANyoRb/config/jest/babelTransform.js +0 -37
- package/dist/src/web/frontend/node_modules/.react-scripts-OTANyoRb/config/jest/cssTransform.js +0 -22
- package/dist/src/web/frontend/node_modules/.react-scripts-OTANyoRb/config/jest/fileTransform.js +0 -40
- package/dist/src/web/frontend/node_modules/.react-scripts-OTANyoRb/config/modules.js +0 -142
- package/dist/src/web/frontend/node_modules/.react-scripts-OTANyoRb/config/paths.js +0 -153
- package/dist/src/web/frontend/node_modules/.react-scripts-OTANyoRb/config/webpack/persistentCache/createEnvironmentHash.js +0 -9
- package/dist/src/web/frontend/node_modules/.react-scripts-OTANyoRb/config/webpack.config.js +0 -796
- package/dist/src/web/frontend/node_modules/.react-scripts-OTANyoRb/config/webpackDevServer.config.js +0 -135
- package/dist/src/web/frontend/node_modules/.react-scripts-OTANyoRb/scripts/build.js +0 -225
- package/dist/src/web/frontend/node_modules/.react-scripts-OTANyoRb/scripts/eject.js +0 -340
|
@@ -1,1319 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Self-Healing Mechanisms
|
|
3
|
-
* Automated healing for common failure scenarios with intelligent decision making
|
|
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 SelfHealingMechanisms extends EventEmitter {
|
|
20
|
-
async start() {
|
|
21
|
-
if (this.isRunning || !this.config.enabled) {
|
|
22
|
-
return;
|
|
23
|
-
}
|
|
24
|
-
try {
|
|
25
|
-
await this.redis.connect();
|
|
26
|
-
await this.loadHistoricalData();
|
|
27
|
-
this.logger.info('Self-healing mechanisms started', {
|
|
28
|
-
scenarios: this.scenarios.size,
|
|
29
|
-
maxConcurrent: this.config.global.maxConcurrentHealings
|
|
30
|
-
});
|
|
31
|
-
this.isRunning = true;
|
|
32
|
-
this.startMonitoring();
|
|
33
|
-
this.emit('started');
|
|
34
|
-
} catch (error) {
|
|
35
|
-
this.logger.error('Failed to start self-healing mechanisms', {
|
|
36
|
-
error
|
|
37
|
-
});
|
|
38
|
-
throw error;
|
|
39
|
-
}
|
|
40
|
-
}
|
|
41
|
-
async stop() {
|
|
42
|
-
if (!this.isRunning) {
|
|
43
|
-
return;
|
|
44
|
-
}
|
|
45
|
-
this.isRunning = false;
|
|
46
|
-
// Wait for active sessions to complete or timeout
|
|
47
|
-
const timeoutMs = this.config.global.defaultTimeout;
|
|
48
|
-
const startTime = Date.now();
|
|
49
|
-
while(this.activeSessions.size > 0 && Date.now() - startTime < timeoutMs){
|
|
50
|
-
await new Promise((resolve)=>setTimeout(resolve, 1000));
|
|
51
|
-
}
|
|
52
|
-
// Force stop remaining sessions
|
|
53
|
-
for (const session of this.activeSessions.values()){
|
|
54
|
-
await this.stopSession(session.id, 'System shutdown');
|
|
55
|
-
}
|
|
56
|
-
await this.saveHistoricalData();
|
|
57
|
-
await this.redis.disconnect();
|
|
58
|
-
this.emit('stopped');
|
|
59
|
-
this.logger.info('Self-healing mechanisms stopped');
|
|
60
|
-
}
|
|
61
|
-
initializeScenarios() {
|
|
62
|
-
// Load configured scenarios
|
|
63
|
-
this.config.scenarios.forEach((scenario)=>{
|
|
64
|
-
this.scenarios.set(scenario.id, scenario);
|
|
65
|
-
});
|
|
66
|
-
// Add default scenarios if none provided
|
|
67
|
-
if (this.scenarios.size === 0) {
|
|
68
|
-
this.addDefaultScenarios();
|
|
69
|
-
}
|
|
70
|
-
}
|
|
71
|
-
addDefaultScenarios() {
|
|
72
|
-
const defaultScenarios = [
|
|
73
|
-
{
|
|
74
|
-
id: 'agent-unresponsive',
|
|
75
|
-
name: 'Agent Unresponsive Healing',
|
|
76
|
-
description: 'Heals unresponsive or stuck agents',
|
|
77
|
-
category: 'agent',
|
|
78
|
-
triggers: [
|
|
79
|
-
{
|
|
80
|
-
type: 'error_pattern',
|
|
81
|
-
condition: 'agent.*timeout|agent.*unresponsive',
|
|
82
|
-
parameters: {
|
|
83
|
-
timeout: 30000
|
|
84
|
-
},
|
|
85
|
-
severity: 'high',
|
|
86
|
-
confidence: 0.8
|
|
87
|
-
},
|
|
88
|
-
{
|
|
89
|
-
type: 'metric_threshold',
|
|
90
|
-
condition: 'agent_heartbeat_missed > 3',
|
|
91
|
-
parameters: {},
|
|
92
|
-
severity: 'high',
|
|
93
|
-
confidence: 0.9
|
|
94
|
-
}
|
|
95
|
-
],
|
|
96
|
-
healingActions: [
|
|
97
|
-
{
|
|
98
|
-
id: 'graceful-restart',
|
|
99
|
-
name: 'Graceful Agent Restart',
|
|
100
|
-
type: 'restart',
|
|
101
|
-
target: 'agent',
|
|
102
|
-
parameters: {
|
|
103
|
-
graceful: true,
|
|
104
|
-
preserveState: true
|
|
105
|
-
},
|
|
106
|
-
timeout: 30000,
|
|
107
|
-
dependencies: [],
|
|
108
|
-
rollbackAction: {
|
|
109
|
-
id: 'keep-stopped',
|
|
110
|
-
name: 'Keep Agent Stopped',
|
|
111
|
-
type: 'custom',
|
|
112
|
-
target: 'agent',
|
|
113
|
-
parameters: {
|
|
114
|
-
action: 'maintain_stop'
|
|
115
|
-
},
|
|
116
|
-
timeout: 5000
|
|
117
|
-
}
|
|
118
|
-
},
|
|
119
|
-
{
|
|
120
|
-
id: 'state-restoration',
|
|
121
|
-
name: 'Restore Agent State',
|
|
122
|
-
type: 'restore',
|
|
123
|
-
target: 'agent',
|
|
124
|
-
parameters: {
|
|
125
|
-
fromBackup: true
|
|
126
|
-
},
|
|
127
|
-
timeout: 15000,
|
|
128
|
-
dependencies: [
|
|
129
|
-
'graceful-restart'
|
|
130
|
-
]
|
|
131
|
-
}
|
|
132
|
-
],
|
|
133
|
-
verificationSteps: [
|
|
134
|
-
{
|
|
135
|
-
id: 'health-check',
|
|
136
|
-
name: 'Agent Health Check',
|
|
137
|
-
type: 'health_check',
|
|
138
|
-
parameters: {
|
|
139
|
-
timeout: 10000
|
|
140
|
-
},
|
|
141
|
-
expectedOutcome: 'agent healthy and responsive',
|
|
142
|
-
timeout: 15000,
|
|
143
|
-
critical: true
|
|
144
|
-
},
|
|
145
|
-
{
|
|
146
|
-
id: 'functional-test',
|
|
147
|
-
name: 'Basic Functionality Test',
|
|
148
|
-
type: 'functional_test',
|
|
149
|
-
parameters: {
|
|
150
|
-
testType: 'basic_operation'
|
|
151
|
-
},
|
|
152
|
-
expectedOutcome: 'agent can execute basic tasks',
|
|
153
|
-
timeout: 30000,
|
|
154
|
-
critical: false
|
|
155
|
-
}
|
|
156
|
-
],
|
|
157
|
-
rollbackActions: [
|
|
158
|
-
{
|
|
159
|
-
id: 'restore-backup',
|
|
160
|
-
name: 'Restore from Backup',
|
|
161
|
-
type: 'restore',
|
|
162
|
-
target: 'agent',
|
|
163
|
-
parameters: {
|
|
164
|
-
backupId: 'latest_stable'
|
|
165
|
-
},
|
|
166
|
-
timeout: 45000,
|
|
167
|
-
dependencies: []
|
|
168
|
-
}
|
|
169
|
-
],
|
|
170
|
-
maxRetries: 2,
|
|
171
|
-
cooldownPeriod: 300000,
|
|
172
|
-
successCriteria: {
|
|
173
|
-
healthScore: 0.9,
|
|
174
|
-
performanceImprovement: 0.2,
|
|
175
|
-
errorRateReduction: 0.8,
|
|
176
|
-
stabilityPeriod: 120000 // 2 minutes
|
|
177
|
-
}
|
|
178
|
-
},
|
|
179
|
-
{
|
|
180
|
-
id: 'memory-leak',
|
|
181
|
-
name: 'Memory Leak Healing',
|
|
182
|
-
description: 'Detects and heals memory leaks in agents and services',
|
|
183
|
-
category: 'memory',
|
|
184
|
-
triggers: [
|
|
185
|
-
{
|
|
186
|
-
type: 'metric_threshold',
|
|
187
|
-
condition: 'memory_usage > 85',
|
|
188
|
-
parameters: {
|
|
189
|
-
duration: 300000
|
|
190
|
-
},
|
|
191
|
-
severity: 'high',
|
|
192
|
-
confidence: 0.7
|
|
193
|
-
},
|
|
194
|
-
{
|
|
195
|
-
type: 'metric_threshold',
|
|
196
|
-
condition: 'memory_growth_rate > 10',
|
|
197
|
-
parameters: {
|
|
198
|
-
interval: 60000
|
|
199
|
-
},
|
|
200
|
-
severity: 'medium',
|
|
201
|
-
confidence: 0.6
|
|
202
|
-
}
|
|
203
|
-
],
|
|
204
|
-
healingActions: [
|
|
205
|
-
{
|
|
206
|
-
id: 'garbage-collection',
|
|
207
|
-
name: 'Force Garbage Collection',
|
|
208
|
-
type: 'optimize',
|
|
209
|
-
target: 'system',
|
|
210
|
-
parameters: {
|
|
211
|
-
aggressive: true
|
|
212
|
-
},
|
|
213
|
-
timeout: 10000,
|
|
214
|
-
dependencies: []
|
|
215
|
-
},
|
|
216
|
-
{
|
|
217
|
-
id: 'cache-clearance',
|
|
218
|
-
name: 'Clear Application Caches',
|
|
219
|
-
type: 'mitigate',
|
|
220
|
-
target: 'application',
|
|
221
|
-
parameters: {
|
|
222
|
-
clearAll: true
|
|
223
|
-
},
|
|
224
|
-
timeout: 5000,
|
|
225
|
-
dependencies: []
|
|
226
|
-
},
|
|
227
|
-
{
|
|
228
|
-
id: 'memory-intensive-restart',
|
|
229
|
-
name: 'Restart Memory-Intensive Components',
|
|
230
|
-
type: 'restart',
|
|
231
|
-
target: 'memory_intensive_agents',
|
|
232
|
-
parameters: {
|
|
233
|
-
graceful: false
|
|
234
|
-
},
|
|
235
|
-
timeout: 30000,
|
|
236
|
-
dependencies: [
|
|
237
|
-
'garbage-collection',
|
|
238
|
-
'cache-clearance'
|
|
239
|
-
]
|
|
240
|
-
}
|
|
241
|
-
],
|
|
242
|
-
verificationSteps: [
|
|
243
|
-
{
|
|
244
|
-
id: 'memory-verification',
|
|
245
|
-
name: 'Memory Usage Verification',
|
|
246
|
-
type: 'health_check',
|
|
247
|
-
parameters: {
|
|
248
|
-
metric: 'memory_usage',
|
|
249
|
-
threshold: 70
|
|
250
|
-
},
|
|
251
|
-
expectedOutcome: 'memory usage below 70%',
|
|
252
|
-
timeout: 60000,
|
|
253
|
-
critical: true
|
|
254
|
-
}
|
|
255
|
-
],
|
|
256
|
-
rollbackActions: [
|
|
257
|
-
{
|
|
258
|
-
id: 'restore-memory-state',
|
|
259
|
-
name: 'Restore Memory State',
|
|
260
|
-
type: 'restore',
|
|
261
|
-
target: 'system',
|
|
262
|
-
parameters: {
|
|
263
|
-
fromCheckpoint: true
|
|
264
|
-
},
|
|
265
|
-
timeout: 20000,
|
|
266
|
-
dependencies: []
|
|
267
|
-
}
|
|
268
|
-
],
|
|
269
|
-
maxRetries: 1,
|
|
270
|
-
cooldownPeriod: 600000,
|
|
271
|
-
successCriteria: {
|
|
272
|
-
healthScore: 0.8,
|
|
273
|
-
performanceImprovement: 0.3,
|
|
274
|
-
errorRateReduction: 0.5,
|
|
275
|
-
stabilityPeriod: 300000 // 5 minutes
|
|
276
|
-
}
|
|
277
|
-
},
|
|
278
|
-
{
|
|
279
|
-
id: 'task-execution-stall',
|
|
280
|
-
name: 'Task Execution Stall Healing',
|
|
281
|
-
description: 'Heals stalled or stuck task executions',
|
|
282
|
-
category: 'task',
|
|
283
|
-
triggers: [
|
|
284
|
-
{
|
|
285
|
-
type: 'metric_threshold',
|
|
286
|
-
condition: 'task_execution_time > 300000',
|
|
287
|
-
parameters: {},
|
|
288
|
-
severity: 'medium',
|
|
289
|
-
confidence: 0.6
|
|
290
|
-
},
|
|
291
|
-
{
|
|
292
|
-
type: 'event_pattern',
|
|
293
|
-
condition: 'task_status=running AND task_age > 600000',
|
|
294
|
-
parameters: {},
|
|
295
|
-
severity: 'high',
|
|
296
|
-
confidence: 0.8
|
|
297
|
-
}
|
|
298
|
-
],
|
|
299
|
-
healingActions: [
|
|
300
|
-
{
|
|
301
|
-
id: 'task-timeout-reset',
|
|
302
|
-
name: 'Reset Task Timeout',
|
|
303
|
-
type: 'repair',
|
|
304
|
-
target: 'task',
|
|
305
|
-
parameters: {
|
|
306
|
-
extendTimeout: true,
|
|
307
|
-
newTimeout: 600000
|
|
308
|
-
},
|
|
309
|
-
timeout: 5000,
|
|
310
|
-
dependencies: []
|
|
311
|
-
},
|
|
312
|
-
{
|
|
313
|
-
id: 'task-context-cleanup',
|
|
314
|
-
name: 'Clean Task Context',
|
|
315
|
-
type: 'mitigate',
|
|
316
|
-
target: 'task',
|
|
317
|
-
parameters: {
|
|
318
|
-
clearStuckState: true
|
|
319
|
-
},
|
|
320
|
-
timeout: 10000,
|
|
321
|
-
dependencies: [
|
|
322
|
-
'task-timeout-reset'
|
|
323
|
-
]
|
|
324
|
-
},
|
|
325
|
-
{
|
|
326
|
-
id: 'task-reassignment',
|
|
327
|
-
name: 'Reassign Task to Healthy Agent',
|
|
328
|
-
type: 'repair',
|
|
329
|
-
target: 'task',
|
|
330
|
-
parameters: {
|
|
331
|
-
selectHealthyAgent: true
|
|
332
|
-
},
|
|
333
|
-
timeout: 15000,
|
|
334
|
-
dependencies: [
|
|
335
|
-
'task-context-cleanup'
|
|
336
|
-
]
|
|
337
|
-
}
|
|
338
|
-
],
|
|
339
|
-
verificationSteps: [
|
|
340
|
-
{
|
|
341
|
-
id: 'task-progress-check',
|
|
342
|
-
name: 'Task Progress Verification',
|
|
343
|
-
type: 'functional_test',
|
|
344
|
-
parameters: {
|
|
345
|
-
checkProgress: true
|
|
346
|
-
},
|
|
347
|
-
expectedOutcome: 'task making progress within expected time',
|
|
348
|
-
timeout: 60000,
|
|
349
|
-
critical: true
|
|
350
|
-
}
|
|
351
|
-
],
|
|
352
|
-
rollbackActions: [
|
|
353
|
-
{
|
|
354
|
-
id: 'restore-original-assignment',
|
|
355
|
-
name: 'Restore Original Task Assignment',
|
|
356
|
-
type: 'restore',
|
|
357
|
-
target: 'task',
|
|
358
|
-
parameters: {
|
|
359
|
-
originalAgent: true
|
|
360
|
-
},
|
|
361
|
-
timeout: 10000,
|
|
362
|
-
dependencies: []
|
|
363
|
-
}
|
|
364
|
-
],
|
|
365
|
-
maxRetries: 3,
|
|
366
|
-
cooldownPeriod: 120000,
|
|
367
|
-
successCriteria: {
|
|
368
|
-
healthScore: 0.8,
|
|
369
|
-
performanceImprovement: 0.4,
|
|
370
|
-
errorRateReduction: 0.7,
|
|
371
|
-
stabilityPeriod: 180000 // 3 minutes
|
|
372
|
-
}
|
|
373
|
-
},
|
|
374
|
-
{
|
|
375
|
-
id: 'network-partition',
|
|
376
|
-
name: 'Network Partition Healing',
|
|
377
|
-
description: 'Heals network connectivity issues and partitions',
|
|
378
|
-
category: 'network',
|
|
379
|
-
triggers: [
|
|
380
|
-
{
|
|
381
|
-
type: 'error_pattern',
|
|
382
|
-
condition: 'network.*timeout|connection.*refused',
|
|
383
|
-
parameters: {
|
|
384
|
-
consecutiveFailures: 3
|
|
385
|
-
},
|
|
386
|
-
severity: 'high',
|
|
387
|
-
confidence: 0.8
|
|
388
|
-
},
|
|
389
|
-
{
|
|
390
|
-
type: 'metric_threshold',
|
|
391
|
-
condition: 'connection_failure_rate > 0.5',
|
|
392
|
-
parameters: {
|
|
393
|
-
timeWindow: 60000
|
|
394
|
-
},
|
|
395
|
-
severity: 'critical',
|
|
396
|
-
confidence: 0.9
|
|
397
|
-
}
|
|
398
|
-
],
|
|
399
|
-
healingActions: [
|
|
400
|
-
{
|
|
401
|
-
id: 'connection-reset',
|
|
402
|
-
name: 'Reset Network Connections',
|
|
403
|
-
type: 'repair',
|
|
404
|
-
target: 'network',
|
|
405
|
-
parameters: {
|
|
406
|
-
resetAll: true,
|
|
407
|
-
graceful: true
|
|
408
|
-
},
|
|
409
|
-
timeout: 15000,
|
|
410
|
-
dependencies: []
|
|
411
|
-
},
|
|
412
|
-
{
|
|
413
|
-
id: 'failover-activation',
|
|
414
|
-
name: 'Activate Network Failover',
|
|
415
|
-
type: 'mitigate',
|
|
416
|
-
target: 'system',
|
|
417
|
-
parameters: {
|
|
418
|
-
mode: 'degraded_connectivity'
|
|
419
|
-
},
|
|
420
|
-
timeout: 10000,
|
|
421
|
-
dependencies: [
|
|
422
|
-
'connection-reset'
|
|
423
|
-
]
|
|
424
|
-
},
|
|
425
|
-
{
|
|
426
|
-
id: 'route-reconfiguration',
|
|
427
|
-
name: 'Reconfigure Network Routes',
|
|
428
|
-
type: 'optimize',
|
|
429
|
-
target: 'network',
|
|
430
|
-
parameters: {
|
|
431
|
-
optimizeForReliability: true
|
|
432
|
-
},
|
|
433
|
-
timeout: 20000,
|
|
434
|
-
dependencies: [
|
|
435
|
-
'failover-activation'
|
|
436
|
-
]
|
|
437
|
-
}
|
|
438
|
-
],
|
|
439
|
-
verificationSteps: [
|
|
440
|
-
{
|
|
441
|
-
id: 'connectivity-test',
|
|
442
|
-
name: 'Network Connectivity Test',
|
|
443
|
-
type: 'functional_test',
|
|
444
|
-
parameters: {
|
|
445
|
-
testEndpoints: [
|
|
446
|
-
'primary',
|
|
447
|
-
'secondary'
|
|
448
|
-
]
|
|
449
|
-
},
|
|
450
|
-
expectedOutcome: 'all critical endpoints reachable',
|
|
451
|
-
timeout: 30000,
|
|
452
|
-
critical: true
|
|
453
|
-
}
|
|
454
|
-
],
|
|
455
|
-
rollbackActions: [
|
|
456
|
-
{
|
|
457
|
-
id: 'restore-network-config',
|
|
458
|
-
name: 'Restore Network Configuration',
|
|
459
|
-
type: 'restore',
|
|
460
|
-
target: 'network',
|
|
461
|
-
parameters: {
|
|
462
|
-
fromBackup: true
|
|
463
|
-
},
|
|
464
|
-
timeout: 25000,
|
|
465
|
-
dependencies: []
|
|
466
|
-
}
|
|
467
|
-
],
|
|
468
|
-
maxRetries: 2,
|
|
469
|
-
cooldownPeriod: 180000,
|
|
470
|
-
successCriteria: {
|
|
471
|
-
healthScore: 0.9,
|
|
472
|
-
performanceImprovement: 0.5,
|
|
473
|
-
errorRateReduction: 0.9,
|
|
474
|
-
stabilityPeriod: 300000 // 5 minutes
|
|
475
|
-
}
|
|
476
|
-
},
|
|
477
|
-
{
|
|
478
|
-
id: 'performance-degradation',
|
|
479
|
-
name: 'Performance Degradation Healing',
|
|
480
|
-
description: 'Heals system performance degradation issues',
|
|
481
|
-
category: 'performance',
|
|
482
|
-
triggers: [
|
|
483
|
-
{
|
|
484
|
-
type: 'metric_threshold',
|
|
485
|
-
condition: 'response_time > 5000',
|
|
486
|
-
parameters: {
|
|
487
|
-
duration: 120000
|
|
488
|
-
},
|
|
489
|
-
severity: 'medium',
|
|
490
|
-
confidence: 0.6
|
|
491
|
-
},
|
|
492
|
-
{
|
|
493
|
-
type: 'metric_threshold',
|
|
494
|
-
condition: 'throughput < 0.5 * baseline',
|
|
495
|
-
parameters: {
|
|
496
|
-
baselineWindow: 3600000
|
|
497
|
-
},
|
|
498
|
-
severity: 'high',
|
|
499
|
-
confidence: 0.7
|
|
500
|
-
}
|
|
501
|
-
],
|
|
502
|
-
healingActions: [
|
|
503
|
-
{
|
|
504
|
-
id: 'resource-optimization',
|
|
505
|
-
name: 'Optimize System Resources',
|
|
506
|
-
type: 'optimize',
|
|
507
|
-
target: 'system',
|
|
508
|
-
parameters: {
|
|
509
|
-
optimizeCpu: true,
|
|
510
|
-
optimizeMemory: true
|
|
511
|
-
},
|
|
512
|
-
timeout: 20000,
|
|
513
|
-
dependencies: []
|
|
514
|
-
},
|
|
515
|
-
{
|
|
516
|
-
id: 'cache-warming',
|
|
517
|
-
name: 'Warm Application Caches',
|
|
518
|
-
type: 'optimize',
|
|
519
|
-
target: 'application',
|
|
520
|
-
parameters: {
|
|
521
|
-
aggressive: true
|
|
522
|
-
},
|
|
523
|
-
timeout: 30000,
|
|
524
|
-
dependencies: [
|
|
525
|
-
'resource-optimization'
|
|
526
|
-
]
|
|
527
|
-
},
|
|
528
|
-
{
|
|
529
|
-
id: 'load-balancing-rebalance',
|
|
530
|
-
name: 'Rebalance Load Distribution',
|
|
531
|
-
type: 'optimize',
|
|
532
|
-
target: 'load_balancer',
|
|
533
|
-
parameters: {
|
|
534
|
-
rebalanceAll: true
|
|
535
|
-
},
|
|
536
|
-
timeout: 15000,
|
|
537
|
-
dependencies: [
|
|
538
|
-
'cache-warming'
|
|
539
|
-
]
|
|
540
|
-
}
|
|
541
|
-
],
|
|
542
|
-
verificationSteps: [
|
|
543
|
-
{
|
|
544
|
-
id: 'performance-benchmark',
|
|
545
|
-
name: 'Performance Benchmark Test',
|
|
546
|
-
type: 'performance_test',
|
|
547
|
-
parameters: {
|
|
548
|
-
targetLatency: 2000,
|
|
549
|
-
targetThroughput: 100
|
|
550
|
-
},
|
|
551
|
-
expectedOutcome: 'performance within acceptable thresholds',
|
|
552
|
-
timeout: 60000,
|
|
553
|
-
critical: true
|
|
554
|
-
}
|
|
555
|
-
],
|
|
556
|
-
rollbackActions: [
|
|
557
|
-
{
|
|
558
|
-
id: 'restore-performance-config',
|
|
559
|
-
name: 'Restore Performance Configuration',
|
|
560
|
-
type: 'restore',
|
|
561
|
-
target: 'system',
|
|
562
|
-
parameters: {
|
|
563
|
-
fromOptimalBackup: true
|
|
564
|
-
},
|
|
565
|
-
timeout: 30000,
|
|
566
|
-
dependencies: []
|
|
567
|
-
}
|
|
568
|
-
],
|
|
569
|
-
maxRetries: 2,
|
|
570
|
-
cooldownPeriod: 240000,
|
|
571
|
-
successCriteria: {
|
|
572
|
-
healthScore: 0.85,
|
|
573
|
-
performanceImprovement: 0.6,
|
|
574
|
-
errorRateReduction: 0.4,
|
|
575
|
-
stabilityPeriod: 300000 // 5 minutes
|
|
576
|
-
}
|
|
577
|
-
}
|
|
578
|
-
];
|
|
579
|
-
defaultScenarios.forEach((scenario)=>{
|
|
580
|
-
this.scenarios.set(scenario.id, scenario);
|
|
581
|
-
});
|
|
582
|
-
}
|
|
583
|
-
async handleTrigger(trigger) {
|
|
584
|
-
if (!this.isRunning) {
|
|
585
|
-
return null;
|
|
586
|
-
}
|
|
587
|
-
// Check if we have too many active healing sessions
|
|
588
|
-
if (this.activeSessions.size >= this.config.global.maxConcurrentHealings) {
|
|
589
|
-
this.logger.warn('Too many active healing sessions', {
|
|
590
|
-
active: this.activeSessions.size,
|
|
591
|
-
max: this.config.global.maxConcurrentHealings
|
|
592
|
-
});
|
|
593
|
-
return null;
|
|
594
|
-
}
|
|
595
|
-
// Find matching scenarios
|
|
596
|
-
const matchingScenarios = await this.findMatchingScenarios(trigger);
|
|
597
|
-
if (matchingScenarios.length === 0) {
|
|
598
|
-
this.logger.debug('No healing scenario matches trigger', {
|
|
599
|
-
triggerId: trigger.id,
|
|
600
|
-
type: trigger.type
|
|
601
|
-
});
|
|
602
|
-
return null;
|
|
603
|
-
}
|
|
604
|
-
// Select best scenario
|
|
605
|
-
const scenario = this.selectBestScenario(matchingScenarios, trigger);
|
|
606
|
-
if (!scenario) {
|
|
607
|
-
return null;
|
|
608
|
-
}
|
|
609
|
-
// Create and execute healing session
|
|
610
|
-
const session = await this.createHealingSession(scenario, trigger);
|
|
611
|
-
await this.executeHealingSession(session);
|
|
612
|
-
return session.id;
|
|
613
|
-
}
|
|
614
|
-
async findMatchingScenarios(trigger) {
|
|
615
|
-
const matching = [];
|
|
616
|
-
for (const scenario of this.scenarios.values()){
|
|
617
|
-
const matchScore = await this.calculateScenarioMatch(scenario, trigger);
|
|
618
|
-
if (matchScore > 0.5) {
|
|
619
|
-
matching.push({
|
|
620
|
-
scenario,
|
|
621
|
-
matchScore
|
|
622
|
-
});
|
|
623
|
-
}
|
|
624
|
-
}
|
|
625
|
-
// Sort by match score
|
|
626
|
-
return matching.sort((a, b)=>b.matchScore - a.matchScore).map((item)=>item.scenario);
|
|
627
|
-
}
|
|
628
|
-
async calculateScenarioMatch(scenario, trigger) {
|
|
629
|
-
let totalScore = 0;
|
|
630
|
-
let matchedTriggers = 0;
|
|
631
|
-
for (const triggerConfig of scenario.triggers){
|
|
632
|
-
const matchScore = await this.evaluateTriggerMatch(triggerConfig, trigger);
|
|
633
|
-
if (matchScore > 0) {
|
|
634
|
-
totalScore += matchScore;
|
|
635
|
-
matchedTriggers++;
|
|
636
|
-
}
|
|
637
|
-
}
|
|
638
|
-
if (matchedTriggers === 0) {
|
|
639
|
-
return 0;
|
|
640
|
-
}
|
|
641
|
-
const averageScore = totalScore / matchedTriggers;
|
|
642
|
-
// Apply learning adjustments
|
|
643
|
-
const historicalSuccessRate = await this.learningEngine.getScenarioSuccessRate(scenario.id);
|
|
644
|
-
const adjustedScore = averageScore * (0.5 + historicalSuccessRate * 0.5);
|
|
645
|
-
return Math.min(adjustedScore, 1.0);
|
|
646
|
-
}
|
|
647
|
-
async evaluateTriggerMatch(triggerConfig, trigger) {
|
|
648
|
-
switch(triggerConfig.type){
|
|
649
|
-
case 'error_pattern':
|
|
650
|
-
return this.evaluateErrorPatternMatch(triggerConfig, trigger);
|
|
651
|
-
case 'metric_threshold':
|
|
652
|
-
return await this.evaluateMetricThresholdMatch(triggerConfig);
|
|
653
|
-
case 'event_pattern':
|
|
654
|
-
return this.evaluateEventPatternMatch(triggerConfig, trigger);
|
|
655
|
-
case 'time_based':
|
|
656
|
-
return this.evaluateTimeBasedMatch(triggerConfig);
|
|
657
|
-
default:
|
|
658
|
-
return 0;
|
|
659
|
-
}
|
|
660
|
-
}
|
|
661
|
-
evaluateErrorPatternMatch(triggerConfig, trigger) {
|
|
662
|
-
const pattern = new RegExp(triggerConfig.condition, 'i');
|
|
663
|
-
const matches = pattern.test(trigger.type) || pattern.test(trigger.message);
|
|
664
|
-
return matches ? triggerConfig.confidence : 0;
|
|
665
|
-
}
|
|
666
|
-
async evaluateMetricThresholdMatch(triggerConfig) {
|
|
667
|
-
// Implementation would evaluate actual metrics against thresholds
|
|
668
|
-
// For now, return a placeholder
|
|
669
|
-
return Math.random() * triggerConfig.confidence;
|
|
670
|
-
}
|
|
671
|
-
evaluateEventPatternMatch(triggerConfig, trigger) {
|
|
672
|
-
// Implementation would evaluate event patterns
|
|
673
|
-
// For now, return a placeholder
|
|
674
|
-
return Math.random() * triggerConfig.confidence;
|
|
675
|
-
}
|
|
676
|
-
evaluateTimeBasedMatch(triggerConfig) {
|
|
677
|
-
// Implementation would evaluate time-based conditions
|
|
678
|
-
// For now, return a placeholder
|
|
679
|
-
return Math.random() * triggerConfig.confidence;
|
|
680
|
-
}
|
|
681
|
-
selectBestScenario(scenarios, trigger) {
|
|
682
|
-
if (scenarios.length === 0) {
|
|
683
|
-
return null;
|
|
684
|
-
}
|
|
685
|
-
// Score scenarios based on multiple factors
|
|
686
|
-
const scoredScenarios = scenarios.map((scenario)=>({
|
|
687
|
-
scenario,
|
|
688
|
-
score: this.calculateScenarioScore(scenario, trigger)
|
|
689
|
-
}));
|
|
690
|
-
// Sort by score and return the best
|
|
691
|
-
scoredScenarios.sort((a, b)=>b.score - a.score);
|
|
692
|
-
return scoredScenarios[0].scenario;
|
|
693
|
-
}
|
|
694
|
-
calculateScenarioScore(scenario, trigger) {
|
|
695
|
-
let score = 0;
|
|
696
|
-
// Category match
|
|
697
|
-
if (scenario.category === trigger.category) {
|
|
698
|
-
score += 30;
|
|
699
|
-
}
|
|
700
|
-
// Severity alignment
|
|
701
|
-
const maxSeverity = Math.max(...scenario.triggers.map((t)=>this.severityToNumber(t.severity)));
|
|
702
|
-
const triggerSeverity = this.severityToNumber(trigger.severity);
|
|
703
|
-
const severityDiff = Math.abs(maxSeverity - triggerSeverity);
|
|
704
|
-
score += Math.max(0, 20 - severityDiff * 5);
|
|
705
|
-
// Historical success rate
|
|
706
|
-
score += 25; // Would get from learning engine
|
|
707
|
-
// Cooldown period check
|
|
708
|
-
score += 15; // Would check cooldown
|
|
709
|
-
// Complexity (simpler scenarios preferred)
|
|
710
|
-
score += Math.max(0, 10 - scenario.healingActions.length);
|
|
711
|
-
return score;
|
|
712
|
-
}
|
|
713
|
-
severityToNumber(severity) {
|
|
714
|
-
const mapping = {
|
|
715
|
-
'low': 1,
|
|
716
|
-
'medium': 2,
|
|
717
|
-
'high': 3,
|
|
718
|
-
'critical': 4
|
|
719
|
-
};
|
|
720
|
-
return mapping[severity] || 0;
|
|
721
|
-
}
|
|
722
|
-
async createHealingSession(scenario, trigger) {
|
|
723
|
-
const session = {
|
|
724
|
-
id: `healing-${Date.now()}-${Math.random().toString(36).slice(2)}`,
|
|
725
|
-
scenarioId: scenario.id,
|
|
726
|
-
startTime: new Date(),
|
|
727
|
-
status: 'initiated',
|
|
728
|
-
trigger,
|
|
729
|
-
actions: [],
|
|
730
|
-
verifications: [],
|
|
731
|
-
result: {
|
|
732
|
-
success: false,
|
|
733
|
-
healed: false,
|
|
734
|
-
stable: false,
|
|
735
|
-
confidence: 0,
|
|
736
|
-
impact: {
|
|
737
|
-
downtimeReduced: 0,
|
|
738
|
-
errorsPrevented: 0,
|
|
739
|
-
performanceImproved: 0,
|
|
740
|
-
availabilityImproved: 0
|
|
741
|
-
},
|
|
742
|
-
lessons: [],
|
|
743
|
-
recommendations: []
|
|
744
|
-
},
|
|
745
|
-
metrics: {
|
|
746
|
-
duration: 0,
|
|
747
|
-
actionsExecuted: 0,
|
|
748
|
-
actionsSuccessful: 0,
|
|
749
|
-
verificationsPassed: 0,
|
|
750
|
-
verificationsTotal: 0,
|
|
751
|
-
resourceUtilization: {},
|
|
752
|
-
systemImpact: {
|
|
753
|
-
cpuBefore: 0,
|
|
754
|
-
cpuAfter: 0,
|
|
755
|
-
memoryBefore: 0,
|
|
756
|
-
memoryAfter: 0
|
|
757
|
-
}
|
|
758
|
-
}
|
|
759
|
-
};
|
|
760
|
-
this.activeSessions.set(session.id, session);
|
|
761
|
-
// Store in Redis
|
|
762
|
-
await this.redis.setEx(`swarm:error-recovery-final:healing:sessions:${session.id}`, 3600, JSON.stringify(session));
|
|
763
|
-
// Publish to swarm channel
|
|
764
|
-
await this.redis.publish('swarm:error-recovery-final', JSON.stringify({
|
|
765
|
-
type: 'HEALING_STARTED',
|
|
766
|
-
sessionId: session.id,
|
|
767
|
-
scenarioId: scenario.id,
|
|
768
|
-
timestamp: new Date().toISOString()
|
|
769
|
-
}));
|
|
770
|
-
this.emit('healingStarted', {
|
|
771
|
-
session,
|
|
772
|
-
scenario
|
|
773
|
-
});
|
|
774
|
-
return session;
|
|
775
|
-
}
|
|
776
|
-
async executeHealingSession(session) {
|
|
777
|
-
const scenario = this.scenarios.get(session.scenarioId);
|
|
778
|
-
if (!scenario) {
|
|
779
|
-
this.logger.error('Scenario not found for healing session', {
|
|
780
|
-
sessionId: session.id,
|
|
781
|
-
scenarioId: session.scenarioId
|
|
782
|
-
});
|
|
783
|
-
session.status = 'failed';
|
|
784
|
-
return;
|
|
785
|
-
}
|
|
786
|
-
session.status = 'running';
|
|
787
|
-
this.logger.info('Executing healing session', {
|
|
788
|
-
sessionId: session.id,
|
|
789
|
-
scenarioId: scenario.id,
|
|
790
|
-
scenarioName: scenario.name
|
|
791
|
-
});
|
|
792
|
-
try {
|
|
793
|
-
// Record initial system metrics
|
|
794
|
-
session.metrics.systemImpact.cpuBefore = await this.getCpuUsage();
|
|
795
|
-
session.metrics.systemImpact.memoryBefore = await this.getMemoryUsage();
|
|
796
|
-
// Execute healing actions
|
|
797
|
-
await this.executeHealingActions(session, scenario);
|
|
798
|
-
// Execute verification steps
|
|
799
|
-
if (session.actions.some((a)=>a.status === 'completed')) {
|
|
800
|
-
session.status = 'verifying';
|
|
801
|
-
await this.executeVerificationSteps(session, scenario);
|
|
802
|
-
}
|
|
803
|
-
// Calculate final results
|
|
804
|
-
await this.calculateHealingResults(session, scenario);
|
|
805
|
-
// Record final system metrics
|
|
806
|
-
session.metrics.systemImpact.cpuAfter = await this.getCpuUsage();
|
|
807
|
-
session.metrics.systemImpact.memoryAfter = await this.getMemoryUsage();
|
|
808
|
-
session.status = session.result.success ? 'completed' : 'failed';
|
|
809
|
-
session.endTime = new Date();
|
|
810
|
-
session.metrics.duration = session.endTime.getTime() - session.startTime.getTime();
|
|
811
|
-
// Store in Redis
|
|
812
|
-
await this.redis.setEx(`swarm:error-recovery-final:healing:sessions:${session.id}`, 3600, JSON.stringify(session));
|
|
813
|
-
// Publish result
|
|
814
|
-
await this.redis.publish('swarm:error-recovery-final', JSON.stringify({
|
|
815
|
-
type: session.result.success ? 'HEALING_SUCCESS' : 'HEALING_FAILED',
|
|
816
|
-
sessionId: session.id,
|
|
817
|
-
result: session.result,
|
|
818
|
-
timestamp: new Date().toISOString()
|
|
819
|
-
}));
|
|
820
|
-
// Learn from the result
|
|
821
|
-
await this.learningEngine.recordHealingResult(session, scenario);
|
|
822
|
-
// Move to completed sessions
|
|
823
|
-
this.activeSessions.delete(session.id);
|
|
824
|
-
this.completedSessions.push(session);
|
|
825
|
-
this.emit(session.result.success ? 'healingCompleted' : 'healingFailed', {
|
|
826
|
-
session,
|
|
827
|
-
scenario
|
|
828
|
-
});
|
|
829
|
-
} catch (error) {
|
|
830
|
-
session.status = 'failed';
|
|
831
|
-
session.endTime = new Date();
|
|
832
|
-
session.metrics.duration = session.endTime.getTime() - session.startTime.getTime();
|
|
833
|
-
this.logger.error('Healing session failed', {
|
|
834
|
-
sessionId: session.id,
|
|
835
|
-
error: error instanceof Error ? error.message : String(error)
|
|
836
|
-
});
|
|
837
|
-
// Attempt rollback if configured
|
|
838
|
-
if (scenario.rollbackActions.length > 0) {
|
|
839
|
-
await this.executeRollback(session, scenario);
|
|
840
|
-
}
|
|
841
|
-
this.emit('healingFailed', {
|
|
842
|
-
session,
|
|
843
|
-
scenario,
|
|
844
|
-
error
|
|
845
|
-
});
|
|
846
|
-
}
|
|
847
|
-
}
|
|
848
|
-
async executeHealingActions(session, scenario) {
|
|
849
|
-
for (const action of scenario.healingActions){
|
|
850
|
-
const execution = {
|
|
851
|
-
action,
|
|
852
|
-
startTime: new Date(),
|
|
853
|
-
status: 'pending'
|
|
854
|
-
};
|
|
855
|
-
session.actions.push(execution);
|
|
856
|
-
try {
|
|
857
|
-
// Check dependencies
|
|
858
|
-
if (!await this.checkActionDependencies(action, session.actions)) {
|
|
859
|
-
execution.status = 'skipped';
|
|
860
|
-
execution.result = 'Dependencies not met';
|
|
861
|
-
continue;
|
|
862
|
-
}
|
|
863
|
-
execution.status = 'running';
|
|
864
|
-
const result = await this.executeHealingAction(action);
|
|
865
|
-
execution.endTime = new Date();
|
|
866
|
-
execution.status = 'completed';
|
|
867
|
-
execution.result = result;
|
|
868
|
-
session.metrics.actionsExecuted++;
|
|
869
|
-
session.metrics.actionsSuccessful++;
|
|
870
|
-
this.logger.debug('Healing action completed', {
|
|
871
|
-
sessionId: session.id,
|
|
872
|
-
actionId: action.id,
|
|
873
|
-
actionName: action.name
|
|
874
|
-
});
|
|
875
|
-
} catch (error) {
|
|
876
|
-
execution.endTime = new Date();
|
|
877
|
-
execution.status = 'failed';
|
|
878
|
-
execution.error = error instanceof Error ? error.message : String(error);
|
|
879
|
-
session.metrics.actionsExecuted++;
|
|
880
|
-
this.logger.error('Healing action failed', {
|
|
881
|
-
sessionId: session.id,
|
|
882
|
-
actionId: action.id,
|
|
883
|
-
error: execution.error
|
|
884
|
-
});
|
|
885
|
-
// If critical action failed, stop execution
|
|
886
|
-
if (this.isCriticalAction(action)) {
|
|
887
|
-
throw error;
|
|
888
|
-
}
|
|
889
|
-
}
|
|
890
|
-
}
|
|
891
|
-
}
|
|
892
|
-
async executeVerificationSteps(session, scenario) {
|
|
893
|
-
for (const step of scenario.verificationSteps){
|
|
894
|
-
const execution = {
|
|
895
|
-
step,
|
|
896
|
-
startTime: new Date(),
|
|
897
|
-
status: 'pending'
|
|
898
|
-
};
|
|
899
|
-
session.verifications.push(execution);
|
|
900
|
-
try {
|
|
901
|
-
execution.status = 'running';
|
|
902
|
-
const result = await this.executeVerificationStep(step);
|
|
903
|
-
execution.endTime = new Date();
|
|
904
|
-
execution.status = 'passed';
|
|
905
|
-
execution.result = result;
|
|
906
|
-
session.metrics.verificationsPassed++;
|
|
907
|
-
this.logger.debug('Verification step passed', {
|
|
908
|
-
sessionId: session.id,
|
|
909
|
-
stepId: step.id,
|
|
910
|
-
stepName: step.name
|
|
911
|
-
});
|
|
912
|
-
} catch (error) {
|
|
913
|
-
execution.endTime = new Date();
|
|
914
|
-
execution.status = 'failed';
|
|
915
|
-
execution.error = error instanceof Error ? error.message : String(error);
|
|
916
|
-
this.logger.error('Verification step failed', {
|
|
917
|
-
sessionId: session.id,
|
|
918
|
-
stepId: step.id,
|
|
919
|
-
error: execution.error
|
|
920
|
-
});
|
|
921
|
-
// If critical verification failed, mark healing as failed
|
|
922
|
-
if (step.critical) {
|
|
923
|
-
throw error;
|
|
924
|
-
}
|
|
925
|
-
}
|
|
926
|
-
session.metrics.verificationsTotal++;
|
|
927
|
-
}
|
|
928
|
-
}
|
|
929
|
-
async calculateHealingResults(session, scenario) {
|
|
930
|
-
// Determine if healing was successful
|
|
931
|
-
const allCriticalVerificationsPassed = session.verifications.filter((v)=>v.step.critical).every((v)=>v.status === 'passed');
|
|
932
|
-
const successRate = session.metrics.actionsSuccessful / Math.max(session.metrics.actionsExecuted, 1);
|
|
933
|
-
const verificationRate = session.metrics.verificationsPassed / Math.max(session.metrics.verificationsTotal, 1);
|
|
934
|
-
session.result.success = allCriticalVerificationsPassed && successRate >= 0.7;
|
|
935
|
-
session.result.healed = session.result.success && verificationRate >= 0.8;
|
|
936
|
-
session.result.stable = await this.checkStability(scenario);
|
|
937
|
-
session.result.confidence = (successRate + verificationRate) / 2;
|
|
938
|
-
// Calculate impact
|
|
939
|
-
session.result.impact = await this.calculateHealingImpact(session, scenario);
|
|
940
|
-
// Generate lessons and recommendations
|
|
941
|
-
session.result.lessons = this.generateLessons(session, scenario);
|
|
942
|
-
session.result.recommendations = this.generateRecommendations(session, scenario);
|
|
943
|
-
}
|
|
944
|
-
async checkActionDependencies(action, executedActions) {
|
|
945
|
-
if (action.dependencies.length === 0) {
|
|
946
|
-
return true;
|
|
947
|
-
}
|
|
948
|
-
for (const dependency of action.dependencies){
|
|
949
|
-
const dependencyExecution = executedActions.find((e)=>e.action.id === dependency);
|
|
950
|
-
if (!dependencyExecution || dependencyExecution.status !== 'completed') {
|
|
951
|
-
return false;
|
|
952
|
-
}
|
|
953
|
-
}
|
|
954
|
-
return true;
|
|
955
|
-
}
|
|
956
|
-
async executeHealingAction(action) {
|
|
957
|
-
this.logger.info('Executing healing action', {
|
|
958
|
-
actionId: action.id,
|
|
959
|
-
actionName: action.name,
|
|
960
|
-
type: action.type,
|
|
961
|
-
target: action.target
|
|
962
|
-
});
|
|
963
|
-
switch(action.type){
|
|
964
|
-
case 'restart':
|
|
965
|
-
return await this.executeRestartAction(action);
|
|
966
|
-
case 'repair':
|
|
967
|
-
return await this.executeRepairAction(action);
|
|
968
|
-
case 'mitigate':
|
|
969
|
-
return await this.executeMitigateAction(action);
|
|
970
|
-
case 'restore':
|
|
971
|
-
return await this.executeRestoreAction(action);
|
|
972
|
-
case 'optimize':
|
|
973
|
-
return await this.executeOptimizeAction(action);
|
|
974
|
-
case 'custom':
|
|
975
|
-
return await this.executeCustomAction(action);
|
|
976
|
-
default:
|
|
977
|
-
throw new Error(`Unknown action type: ${action.type}`);
|
|
978
|
-
}
|
|
979
|
-
}
|
|
980
|
-
async executeRestartAction(action) {
|
|
981
|
-
// Implementation would perform actual restart
|
|
982
|
-
this.logger.info('Executing restart action', {
|
|
983
|
-
target: action.target
|
|
984
|
-
});
|
|
985
|
-
return {
|
|
986
|
-
success: true,
|
|
987
|
-
restartedAt: new Date()
|
|
988
|
-
};
|
|
989
|
-
}
|
|
990
|
-
async executeRepairAction(action) {
|
|
991
|
-
// Implementation would perform actual repair
|
|
992
|
-
this.logger.info('Executing repair action', {
|
|
993
|
-
target: action.target
|
|
994
|
-
});
|
|
995
|
-
return {
|
|
996
|
-
success: true,
|
|
997
|
-
repairedAt: new Date()
|
|
998
|
-
};
|
|
999
|
-
}
|
|
1000
|
-
async executeMitigateAction(action) {
|
|
1001
|
-
// Implementation would perform actual mitigation
|
|
1002
|
-
this.logger.info('Executing mitigation action', {
|
|
1003
|
-
target: action.target
|
|
1004
|
-
});
|
|
1005
|
-
return {
|
|
1006
|
-
success: true,
|
|
1007
|
-
mitigatedAt: new Date()
|
|
1008
|
-
};
|
|
1009
|
-
}
|
|
1010
|
-
async executeRestoreAction(action) {
|
|
1011
|
-
// Implementation would perform actual restoration
|
|
1012
|
-
this.logger.info('Executing restore action', {
|
|
1013
|
-
target: action.target
|
|
1014
|
-
});
|
|
1015
|
-
return {
|
|
1016
|
-
success: true,
|
|
1017
|
-
restoredAt: new Date()
|
|
1018
|
-
};
|
|
1019
|
-
}
|
|
1020
|
-
async executeOptimizeAction(action) {
|
|
1021
|
-
// Implementation would perform actual optimization
|
|
1022
|
-
this.logger.info('Executing optimize action', {
|
|
1023
|
-
target: action.target
|
|
1024
|
-
});
|
|
1025
|
-
return {
|
|
1026
|
-
success: true,
|
|
1027
|
-
optimizedAt: new Date()
|
|
1028
|
-
};
|
|
1029
|
-
}
|
|
1030
|
-
async executeCustomAction(action) {
|
|
1031
|
-
// Implementation would execute custom action
|
|
1032
|
-
this.logger.info('Executing custom action', {
|
|
1033
|
-
target: action.target
|
|
1034
|
-
});
|
|
1035
|
-
return {
|
|
1036
|
-
success: true,
|
|
1037
|
-
executedAt: new Date()
|
|
1038
|
-
};
|
|
1039
|
-
}
|
|
1040
|
-
async executeVerificationStep(step) {
|
|
1041
|
-
this.logger.info('Executing verification step', {
|
|
1042
|
-
stepId: step.id,
|
|
1043
|
-
stepName: step.name,
|
|
1044
|
-
type: step.type
|
|
1045
|
-
});
|
|
1046
|
-
switch(step.type){
|
|
1047
|
-
case 'health_check':
|
|
1048
|
-
return await this.executeHealthCheck(step);
|
|
1049
|
-
case 'functional_test':
|
|
1050
|
-
return await this.executeFunctionalTest(step);
|
|
1051
|
-
case 'performance_test':
|
|
1052
|
-
return await this.executePerformanceTest(step);
|
|
1053
|
-
case 'custom':
|
|
1054
|
-
return await this.executeCustomVerification(step);
|
|
1055
|
-
default:
|
|
1056
|
-
throw new Error(`Unknown verification type: ${step.type}`);
|
|
1057
|
-
}
|
|
1058
|
-
}
|
|
1059
|
-
async executeHealthCheck(step) {
|
|
1060
|
-
// Implementation would perform actual health check
|
|
1061
|
-
this.logger.info('Executing health check', {
|
|
1062
|
-
parameters: step.parameters
|
|
1063
|
-
});
|
|
1064
|
-
return {
|
|
1065
|
-
healthy: true,
|
|
1066
|
-
checkedAt: new Date()
|
|
1067
|
-
};
|
|
1068
|
-
}
|
|
1069
|
-
async executeFunctionalTest(step) {
|
|
1070
|
-
// Implementation would perform actual functional test
|
|
1071
|
-
this.logger.info('Executing functional test', {
|
|
1072
|
-
parameters: step.parameters
|
|
1073
|
-
});
|
|
1074
|
-
return {
|
|
1075
|
-
passed: true,
|
|
1076
|
-
testedAt: new Date()
|
|
1077
|
-
};
|
|
1078
|
-
}
|
|
1079
|
-
async executePerformanceTest(step) {
|
|
1080
|
-
// Implementation would perform actual performance test
|
|
1081
|
-
this.logger.info('Executing performance test', {
|
|
1082
|
-
parameters: step.parameters
|
|
1083
|
-
});
|
|
1084
|
-
return {
|
|
1085
|
-
passed: true,
|
|
1086
|
-
metrics: {
|
|
1087
|
-
latency: 100,
|
|
1088
|
-
throughput: 1000
|
|
1089
|
-
},
|
|
1090
|
-
testedAt: new Date()
|
|
1091
|
-
};
|
|
1092
|
-
}
|
|
1093
|
-
async executeCustomVerification(step) {
|
|
1094
|
-
// Implementation would execute custom verification
|
|
1095
|
-
this.logger.info('Executing custom verification', {
|
|
1096
|
-
parameters: step.parameters
|
|
1097
|
-
});
|
|
1098
|
-
return {
|
|
1099
|
-
passed: true,
|
|
1100
|
-
verifiedAt: new Date()
|
|
1101
|
-
};
|
|
1102
|
-
}
|
|
1103
|
-
isCriticalAction(action) {
|
|
1104
|
-
// Implementation would determine if action is critical
|
|
1105
|
-
// For now, assume restart actions are critical
|
|
1106
|
-
return action.type === 'restart';
|
|
1107
|
-
}
|
|
1108
|
-
async checkStability(scenario) {
|
|
1109
|
-
// Wait for stability period and check if system remains stable
|
|
1110
|
-
await new Promise((resolve)=>setTimeout(resolve, scenario.successCriteria.stabilityPeriod));
|
|
1111
|
-
// Implementation would perform actual stability check
|
|
1112
|
-
return Math.random() > 0.2; // 80% chance of being stable
|
|
1113
|
-
}
|
|
1114
|
-
async calculateHealingImpact(session, scenario) {
|
|
1115
|
-
// Implementation would calculate actual impact
|
|
1116
|
-
return {
|
|
1117
|
-
downtimeReduced: Math.floor(Math.random() * 300000),
|
|
1118
|
-
errorsPrevented: Math.floor(Math.random() * 10),
|
|
1119
|
-
performanceImproved: Math.random() * 0.5,
|
|
1120
|
-
availabilityImproved: Math.random() * 0.1 // 0-10% improvement
|
|
1121
|
-
};
|
|
1122
|
-
}
|
|
1123
|
-
generateLessons(session, scenario) {
|
|
1124
|
-
const lessons = [];
|
|
1125
|
-
if (session.result.success) {
|
|
1126
|
-
lessons.push(`${scenario.name} healing was successful`);
|
|
1127
|
-
lessons.push(`Key success factors: ${session.actions.filter((a)=>a.status === 'completed').map((a)=>a.action.name).join(', ')}`);
|
|
1128
|
-
} else {
|
|
1129
|
-
lessons.push(`${scenario.name} healing failed or was incomplete`);
|
|
1130
|
-
const failedActions = session.actions.filter((a)=>a.status === 'failed');
|
|
1131
|
-
if (failedActions.length > 0) {
|
|
1132
|
-
lessons.push(`Failed actions: ${failedActions.map((a)=>a.action.name).join(', ')}`);
|
|
1133
|
-
}
|
|
1134
|
-
}
|
|
1135
|
-
return lessons;
|
|
1136
|
-
}
|
|
1137
|
-
generateRecommendations(session, scenario) {
|
|
1138
|
-
const recommendations = [];
|
|
1139
|
-
if (!session.result.success) {
|
|
1140
|
-
recommendations.push('Consider refining healing actions or adding additional verification steps');
|
|
1141
|
-
recommendations.push('Review action dependencies and timeout values');
|
|
1142
|
-
}
|
|
1143
|
-
if (session.metrics.duration > scenario.successCriteria.stabilityPeriod * 2) {
|
|
1144
|
-
recommendations.push('Consider optimizing healing sequence for faster recovery');
|
|
1145
|
-
}
|
|
1146
|
-
return recommendations;
|
|
1147
|
-
}
|
|
1148
|
-
async executeRollback(session, scenario) {
|
|
1149
|
-
this.logger.warn('Executing rollback for healing session', {
|
|
1150
|
-
sessionId: session.id,
|
|
1151
|
-
scenarioId: scenario.id
|
|
1152
|
-
});
|
|
1153
|
-
for (const action of scenario.rollbackActions){
|
|
1154
|
-
try {
|
|
1155
|
-
await this.executeHealingAction(action);
|
|
1156
|
-
this.logger.info('Rollback action completed', {
|
|
1157
|
-
sessionId: session.id,
|
|
1158
|
-
actionId: action.id
|
|
1159
|
-
});
|
|
1160
|
-
} catch (error) {
|
|
1161
|
-
this.logger.error('Rollback action failed', {
|
|
1162
|
-
sessionId: session.id,
|
|
1163
|
-
actionId: action.id,
|
|
1164
|
-
error: error instanceof Error ? error.message : String(error)
|
|
1165
|
-
});
|
|
1166
|
-
}
|
|
1167
|
-
}
|
|
1168
|
-
}
|
|
1169
|
-
startMonitoring() {
|
|
1170
|
-
this.monitorTimer = setInterval(async ()=>{
|
|
1171
|
-
try {
|
|
1172
|
-
await this.cleanupOldSessions();
|
|
1173
|
-
await this.updateMetrics();
|
|
1174
|
-
} catch (error) {
|
|
1175
|
-
this.logger.error('Error in self-healing monitoring', {
|
|
1176
|
-
error
|
|
1177
|
-
});
|
|
1178
|
-
}
|
|
1179
|
-
}, this.config.global.monitoringInterval);
|
|
1180
|
-
}
|
|
1181
|
-
async cleanupOldSessions() {
|
|
1182
|
-
const cutoff = Date.now() - 7 * 24 * 60 * 60 * 1000; // 7 days
|
|
1183
|
-
this.completedSessions = this.completedSessions.filter((session)=>session.endTime.getTime() > cutoff);
|
|
1184
|
-
// Keep only last 1000 sessions in memory
|
|
1185
|
-
if (this.completedSessions.length > 1000) {
|
|
1186
|
-
this.completedSessions = this.completedSessions.slice(-1000);
|
|
1187
|
-
}
|
|
1188
|
-
}
|
|
1189
|
-
async updateMetrics() {
|
|
1190
|
-
const metrics = {
|
|
1191
|
-
activeSessions: this.activeSessions.size,
|
|
1192
|
-
completedSessions: this.completedSessions.length,
|
|
1193
|
-
scenarios: this.scenarios.size,
|
|
1194
|
-
timestamp: new Date().toISOString()
|
|
1195
|
-
};
|
|
1196
|
-
await this.redis.setEx('swarm:error-recovery-final:healing:metrics', 300, JSON.stringify(metrics));
|
|
1197
|
-
}
|
|
1198
|
-
async loadHistoricalData() {
|
|
1199
|
-
// Implementation would load historical healing data from Redis
|
|
1200
|
-
}
|
|
1201
|
-
async saveHistoricalData() {
|
|
1202
|
-
// Implementation would save healing history to Redis
|
|
1203
|
-
}
|
|
1204
|
-
async stopSession(sessionId, reason) {
|
|
1205
|
-
const session = this.activeSessions.get(sessionId);
|
|
1206
|
-
if (!session) return;
|
|
1207
|
-
session.status = 'failed';
|
|
1208
|
-
session.endTime = new Date();
|
|
1209
|
-
this.logger.info('Stopping healing session', {
|
|
1210
|
-
sessionId,
|
|
1211
|
-
reason
|
|
1212
|
-
});
|
|
1213
|
-
this.emit('healingStopped', {
|
|
1214
|
-
sessionId,
|
|
1215
|
-
reason
|
|
1216
|
-
});
|
|
1217
|
-
}
|
|
1218
|
-
// Helper methods for system metrics
|
|
1219
|
-
async getCpuUsage() {
|
|
1220
|
-
// Implementation would get actual CPU usage
|
|
1221
|
-
return Math.random() * 100;
|
|
1222
|
-
}
|
|
1223
|
-
async getMemoryUsage() {
|
|
1224
|
-
// Implementation would get actual memory usage
|
|
1225
|
-
return Math.random() * 100;
|
|
1226
|
-
}
|
|
1227
|
-
// Public API methods
|
|
1228
|
-
async getHealingSession(sessionId) {
|
|
1229
|
-
const session = this.activeSessions.get(sessionId);
|
|
1230
|
-
if (session) return session;
|
|
1231
|
-
const completed = this.completedSessions.find((s)=>s.id === sessionId);
|
|
1232
|
-
if (completed) return completed;
|
|
1233
|
-
// Try loading from Redis
|
|
1234
|
-
const data = await this.redis.get(`swarm:error-recovery-final:healing:sessions:${sessionId}`);
|
|
1235
|
-
return data ? JSON.parse(data) : null;
|
|
1236
|
-
}
|
|
1237
|
-
async getActiveHealingSessions() {
|
|
1238
|
-
return Array.from(this.activeSessions.values());
|
|
1239
|
-
}
|
|
1240
|
-
async getCompletedHealingSessions(limit = 50) {
|
|
1241
|
-
return this.completedSessions.sort((a, b)=>b.endTime.getTime() - a.endTime.getTime()).slice(0, limit);
|
|
1242
|
-
}
|
|
1243
|
-
async addHealingScenario(scenario) {
|
|
1244
|
-
this.scenarios.set(scenario.id, scenario);
|
|
1245
|
-
this.logger.info('Healing scenario added', {
|
|
1246
|
-
id: scenario.id,
|
|
1247
|
-
name: scenario.name
|
|
1248
|
-
});
|
|
1249
|
-
}
|
|
1250
|
-
async removeHealingScenario(scenarioId) {
|
|
1251
|
-
this.scenarios.delete(scenarioId);
|
|
1252
|
-
this.logger.info('Healing scenario removed', {
|
|
1253
|
-
id: scenarioId
|
|
1254
|
-
});
|
|
1255
|
-
}
|
|
1256
|
-
async getHealingMetrics() {
|
|
1257
|
-
const totalSessions = this.completedSessions.length + this.activeSessions.size;
|
|
1258
|
-
const successfulSessions = this.completedSessions.filter((s)=>s.result.success).length;
|
|
1259
|
-
const successRate = totalSessions > 0 ? successfulSessions / totalSessions : 0;
|
|
1260
|
-
const averageDuration = this.completedSessions.length > 0 ? this.completedSessions.reduce((sum, s)=>sum + s.metrics.duration, 0) / this.completedSessions.length : 0;
|
|
1261
|
-
return {
|
|
1262
|
-
totalSessions,
|
|
1263
|
-
activeSessions: this.activeSessions.size,
|
|
1264
|
-
successfulSessions,
|
|
1265
|
-
successRate,
|
|
1266
|
-
averageDuration,
|
|
1267
|
-
scenarios: this.scenarios.size
|
|
1268
|
-
};
|
|
1269
|
-
}
|
|
1270
|
-
constructor(logger, config){
|
|
1271
|
-
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, "activeSessions", new Map()), _define_property(this, "completedSessions", []), _define_property(this, "scenarios", new Map()), _define_property(this, "learningEngine", void 0), _define_property(this, "patternMatcher", void 0), _define_property(this, "monitorTimer", void 0);
|
|
1272
|
-
this.logger = logger;
|
|
1273
|
-
this.config = config;
|
|
1274
|
-
this.redis = createClient(config.redis);
|
|
1275
|
-
this.learningEngine = new HealingLearningEngine(logger, config.learning);
|
|
1276
|
-
this.patternMatcher = new HealingPatternMatcher(logger);
|
|
1277
|
-
this.initializeScenarios();
|
|
1278
|
-
}
|
|
1279
|
-
}
|
|
1280
|
-
let HealingLearningEngine = class HealingLearningEngine {
|
|
1281
|
-
async recordHealingResult(session, scenario) {
|
|
1282
|
-
if (!this.config.enabled) return;
|
|
1283
|
-
const stats = this.scenarioStats.get(scenario.id) || {
|
|
1284
|
-
attempts: 0,
|
|
1285
|
-
successes: 0,
|
|
1286
|
-
averageDuration: 0
|
|
1287
|
-
};
|
|
1288
|
-
stats.attempts++;
|
|
1289
|
-
if (session.result.success) {
|
|
1290
|
-
stats.successes++;
|
|
1291
|
-
}
|
|
1292
|
-
// Update average duration
|
|
1293
|
-
stats.averageDuration = (stats.averageDuration * (stats.attempts - 1) + session.metrics.duration) / stats.attempts;
|
|
1294
|
-
this.scenarioStats.set(scenario.id, stats);
|
|
1295
|
-
this.logger.debug('Recorded healing result', {
|
|
1296
|
-
scenarioId: scenario.id,
|
|
1297
|
-
success: session.result.success,
|
|
1298
|
-
successRate: stats.successes / stats.attempts
|
|
1299
|
-
});
|
|
1300
|
-
}
|
|
1301
|
-
async getScenarioSuccessRate(scenarioId) {
|
|
1302
|
-
const stats = this.scenarioStats.get(scenarioId);
|
|
1303
|
-
return stats ? stats.successes / stats.attempts : 0.5; // Default 50% for new scenarios
|
|
1304
|
-
}
|
|
1305
|
-
constructor(logger, config){
|
|
1306
|
-
_define_property(this, "logger", void 0);
|
|
1307
|
-
_define_property(this, "config", void 0);
|
|
1308
|
-
_define_property(this, "scenarioStats", new Map());
|
|
1309
|
-
this.logger = logger;
|
|
1310
|
-
this.config = config;
|
|
1311
|
-
}
|
|
1312
|
-
};
|
|
1313
|
-
let HealingPatternMatcher = class HealingPatternMatcher {
|
|
1314
|
-
constructor(logger){
|
|
1315
|
-
_define_property(this, "logger", void 0);
|
|
1316
|
-
this.logger = logger;
|
|
1317
|
-
}
|
|
1318
|
-
};
|
|
1319
|
-
export { SelfHealingMechanisms };
|