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,1197 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Integrated Error Recovery Coordinator
|
|
3
|
-
* Central coordination of all error recovery systems with 90%+ effectiveness target
|
|
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
|
-
import { AdvancedErrorDetection } from "./advanced-error-detection.js";
|
|
20
|
-
import { AutomatedRecoveryWorkflows } from "./automated-recovery-workflows.js";
|
|
21
|
-
import { ResilienceArchitecture } from "./resilience-architecture.js";
|
|
22
|
-
import { RecoveryMonitoring } from "./recovery-monitoring.js";
|
|
23
|
-
import { SelfHealingMechanisms } from "./self-healing-mechanisms.js";
|
|
24
|
-
export class ErrorRecoveryCoordinator extends EventEmitter {
|
|
25
|
-
initializeComponents() {
|
|
26
|
-
// Initialize all component systems with their respective configurations
|
|
27
|
-
this.errorDetection = new AdvancedErrorDetection(this.logger, {
|
|
28
|
-
redis: this.config.redis,
|
|
29
|
-
monitoring: {
|
|
30
|
-
intervalMs: 1000,
|
|
31
|
-
retentionMs: 24 * 60 * 60 * 1000,
|
|
32
|
-
batchSize: 100
|
|
33
|
-
},
|
|
34
|
-
anomaly: {
|
|
35
|
-
enabled: true,
|
|
36
|
-
algorithms: [
|
|
37
|
-
'statistical',
|
|
38
|
-
'threshold',
|
|
39
|
-
'trend'
|
|
40
|
-
],
|
|
41
|
-
sensitivity: this.config.detection.sensitivity,
|
|
42
|
-
windowSize: 100,
|
|
43
|
-
alertThreshold: 2.0
|
|
44
|
-
},
|
|
45
|
-
patterns: [],
|
|
46
|
-
thresholds: {
|
|
47
|
-
errorRate: 0.1,
|
|
48
|
-
responseTime: 5000,
|
|
49
|
-
memoryUsage: 80,
|
|
50
|
-
cpuUsage: 80,
|
|
51
|
-
agentFailureRate: 0.2
|
|
52
|
-
},
|
|
53
|
-
earlyWarning: {
|
|
54
|
-
enabled: true,
|
|
55
|
-
leadTimeMs: 30000,
|
|
56
|
-
confidence: 0.7
|
|
57
|
-
}
|
|
58
|
-
});
|
|
59
|
-
this.recoveryWorkflows = new AutomatedRecoveryWorkflows(this.logger, {
|
|
60
|
-
redis: this.config.redis,
|
|
61
|
-
strategies: [],
|
|
62
|
-
global: {
|
|
63
|
-
maxConcurrentRecoveries: this.config.recovery.maxConcurrentRecoveries,
|
|
64
|
-
defaultTimeoutMs: this.config.recovery.defaultTimeout,
|
|
65
|
-
rollbackTimeoutMs: 30000,
|
|
66
|
-
monitoringIntervalMs: 1000,
|
|
67
|
-
decisionThreshold: 0.7
|
|
68
|
-
},
|
|
69
|
-
learning: {
|
|
70
|
-
enabled: true,
|
|
71
|
-
historyRetentionDays: 30,
|
|
72
|
-
successRateThreshold: 0.8,
|
|
73
|
-
adaptStrategies: true
|
|
74
|
-
},
|
|
75
|
-
safety: {
|
|
76
|
-
maxCascadingFailures: 3,
|
|
77
|
-
emergencyMode: {
|
|
78
|
-
enabled: true,
|
|
79
|
-
triggers: [
|
|
80
|
-
'critical_system_failure'
|
|
81
|
-
],
|
|
82
|
-
actions: []
|
|
83
|
-
},
|
|
84
|
-
quarantining: {
|
|
85
|
-
enabled: true,
|
|
86
|
-
duration: 300000,
|
|
87
|
-
autoRelease: true
|
|
88
|
-
}
|
|
89
|
-
}
|
|
90
|
-
});
|
|
91
|
-
this.resilienceArchitecture = new ResilienceArchitecture(this.logger, {
|
|
92
|
-
redis: this.config.redis,
|
|
93
|
-
circuitBreakers: [],
|
|
94
|
-
failover: [],
|
|
95
|
-
disasterRecovery: {
|
|
96
|
-
enabled: true,
|
|
97
|
-
backupInterval: 3600000,
|
|
98
|
-
backupRetention: 7,
|
|
99
|
-
recoveryPointObjective: 15,
|
|
100
|
-
recoveryTimeObjective: 60,
|
|
101
|
-
emergencyProcedures: [],
|
|
102
|
-
communicationChannels: [],
|
|
103
|
-
dataReplication: {
|
|
104
|
-
enabled: true,
|
|
105
|
-
syncMode: 'async',
|
|
106
|
-
replicationFactor: 2,
|
|
107
|
-
consistencyLevel: 'eventual'
|
|
108
|
-
}
|
|
109
|
-
},
|
|
110
|
-
loadBalancing: {
|
|
111
|
-
algorithm: 'least_connections',
|
|
112
|
-
healthCheckInterval: 30000,
|
|
113
|
-
maxRetries: 3,
|
|
114
|
-
backoffMultiplier: 2
|
|
115
|
-
},
|
|
116
|
-
rateLimiting: {
|
|
117
|
-
enabled: true,
|
|
118
|
-
requestsPerSecond: 100,
|
|
119
|
-
burstSize: 150,
|
|
120
|
-
windowSize: 60000
|
|
121
|
-
},
|
|
122
|
-
bulkheads: {
|
|
123
|
-
enabled: true,
|
|
124
|
-
maxConcurrentCalls: 50,
|
|
125
|
-
maxQueueSize: 100,
|
|
126
|
-
timeout: 30000
|
|
127
|
-
}
|
|
128
|
-
});
|
|
129
|
-
this.recoveryMonitoring = new RecoveryMonitoring(this.logger, {
|
|
130
|
-
redis: this.config.redis,
|
|
131
|
-
metrics: {
|
|
132
|
-
collectionInterval: 5000,
|
|
133
|
-
retentionDays: 30,
|
|
134
|
-
aggregationInterval: 60000,
|
|
135
|
-
batchSize: 50
|
|
136
|
-
},
|
|
137
|
-
reporting: {
|
|
138
|
-
enabled: this.config.monitoring.reporting,
|
|
139
|
-
schedules: [],
|
|
140
|
-
formats: [
|
|
141
|
-
'json',
|
|
142
|
-
'html'
|
|
143
|
-
],
|
|
144
|
-
recipients: [],
|
|
145
|
-
storage: {
|
|
146
|
-
type: 'file',
|
|
147
|
-
location: './reports',
|
|
148
|
-
retention: 90
|
|
149
|
-
}
|
|
150
|
-
},
|
|
151
|
-
alerts: {
|
|
152
|
-
enabled: this.config.monitoring.alerting,
|
|
153
|
-
rules: [],
|
|
154
|
-
channels: [],
|
|
155
|
-
escalation: {
|
|
156
|
-
enabled: true,
|
|
157
|
-
levels: []
|
|
158
|
-
}
|
|
159
|
-
},
|
|
160
|
-
dashboard: {
|
|
161
|
-
enabled: true,
|
|
162
|
-
refreshInterval: 5000,
|
|
163
|
-
dataRetention: 7
|
|
164
|
-
}
|
|
165
|
-
});
|
|
166
|
-
this.selfHealing = new SelfHealingMechanisms(this.logger, {
|
|
167
|
-
redis: this.config.redis,
|
|
168
|
-
enabled: this.config.selfHealing.enabled,
|
|
169
|
-
scenarios: [],
|
|
170
|
-
global: {
|
|
171
|
-
maxConcurrentHealings: 3,
|
|
172
|
-
defaultTimeout: 60000,
|
|
173
|
-
monitoringInterval: 10000,
|
|
174
|
-
learningEnabled: this.config.selfHealing.learningEnabled,
|
|
175
|
-
adaptiveHealing: true
|
|
176
|
-
},
|
|
177
|
-
safety: {
|
|
178
|
-
requireApproval: !this.config.selfHealing.autoApproval,
|
|
179
|
-
quarantinePeriod: 300000,
|
|
180
|
-
maxRollbackAttempts: 3,
|
|
181
|
-
emergencyMode: {
|
|
182
|
-
enabled: true,
|
|
183
|
-
autoApprove: this.config.selfHealing.autoApproval,
|
|
184
|
-
maxSeverity: 'critical'
|
|
185
|
-
}
|
|
186
|
-
},
|
|
187
|
-
learning: {
|
|
188
|
-
successHistoryRetention: 90,
|
|
189
|
-
patternRecognition: true,
|
|
190
|
-
adaptiveThresholds: true,
|
|
191
|
-
predictiveHealing: true
|
|
192
|
-
}
|
|
193
|
-
});
|
|
194
|
-
// Set up event handlers for component coordination
|
|
195
|
-
this.setupComponentEventHandlers();
|
|
196
|
-
}
|
|
197
|
-
setupComponentEventHandlers() {
|
|
198
|
-
// Error detection events
|
|
199
|
-
this.errorDetection.on('errorDetected', async (error)=>{
|
|
200
|
-
await this.handleDetectedError(error);
|
|
201
|
-
});
|
|
202
|
-
this.errorDetection.on('earlyWarning', async (warning)=>{
|
|
203
|
-
await this.handleEarlyWarning(warning);
|
|
204
|
-
});
|
|
205
|
-
// Recovery workflow events
|
|
206
|
-
this.recoveryWorkflows.on('workflowStarted', (workflow)=>{
|
|
207
|
-
this.handleWorkflowStarted(workflow);
|
|
208
|
-
});
|
|
209
|
-
this.recoveryWorkflows.on('workflowCompleted', (workflow)=>{
|
|
210
|
-
this.handleWorkflowCompleted(workflow);
|
|
211
|
-
});
|
|
212
|
-
this.recoveryWorkflows.on('workflowFailed', (workflow)=>{
|
|
213
|
-
this.handleWorkflowFailed(workflow);
|
|
214
|
-
});
|
|
215
|
-
// Resilience architecture events
|
|
216
|
-
this.resilienceArchitecture.on('circuitBreakerStateChange', (data)=>{
|
|
217
|
-
this.handleCircuitBreakerStateChange(data);
|
|
218
|
-
});
|
|
219
|
-
this.resilienceArchitecture.on('failover', (state)=>{
|
|
220
|
-
this.handleFailover(state);
|
|
221
|
-
});
|
|
222
|
-
this.resilienceArchitecture.on('failback', (state)=>{
|
|
223
|
-
this.handleFailback(state);
|
|
224
|
-
});
|
|
225
|
-
// Self-healing events
|
|
226
|
-
this.selfHealing.on('healingStarted', (data)=>{
|
|
227
|
-
this.handleHealingStarted(data);
|
|
228
|
-
});
|
|
229
|
-
this.selfHealing.on('healingCompleted', (data)=>{
|
|
230
|
-
this.handleHealingCompleted(data);
|
|
231
|
-
});
|
|
232
|
-
this.selfHealing.on('healingFailed', (data)=>{
|
|
233
|
-
this.handleHealingFailed(data);
|
|
234
|
-
});
|
|
235
|
-
// Recovery monitoring events
|
|
236
|
-
this.recoveryMonitoring.on('alertCreated', (alert)=>{
|
|
237
|
-
this.handleAlertCreated(alert);
|
|
238
|
-
});
|
|
239
|
-
}
|
|
240
|
-
async start() {
|
|
241
|
-
if (this.isRunning) {
|
|
242
|
-
return;
|
|
243
|
-
}
|
|
244
|
-
try {
|
|
245
|
-
await this.redis.connect();
|
|
246
|
-
// Start all component systems
|
|
247
|
-
await this.errorDetection.start();
|
|
248
|
-
await this.recoveryWorkflows.start();
|
|
249
|
-
await this.resilienceArchitecture.start();
|
|
250
|
-
await this.recoveryMonitoring.start();
|
|
251
|
-
await this.selfHealing.start();
|
|
252
|
-
this.logger.info('Error recovery coordinator started', {
|
|
253
|
-
detectionEnabled: this.config.detection.enabled,
|
|
254
|
-
recoveryEnabled: this.config.recovery.enabled,
|
|
255
|
-
resilienceEnabled: this.config.resilience.enabled,
|
|
256
|
-
monitoringEnabled: this.config.monitoring.enabled,
|
|
257
|
-
selfHealingEnabled: this.config.selfHealing.enabled,
|
|
258
|
-
targets: this.config.targets
|
|
259
|
-
});
|
|
260
|
-
this.isRunning = true;
|
|
261
|
-
this.startCoordination();
|
|
262
|
-
this.startMetricsCollection();
|
|
263
|
-
this.emit('started');
|
|
264
|
-
} catch (error) {
|
|
265
|
-
this.logger.error('Failed to start error recovery coordinator', {
|
|
266
|
-
error
|
|
267
|
-
});
|
|
268
|
-
throw error;
|
|
269
|
-
}
|
|
270
|
-
}
|
|
271
|
-
async stop() {
|
|
272
|
-
if (!this.isRunning) {
|
|
273
|
-
return;
|
|
274
|
-
}
|
|
275
|
-
this.isRunning = false;
|
|
276
|
-
// Stop coordination timers
|
|
277
|
-
if (this.orchestrationTimer) {
|
|
278
|
-
clearInterval(this.orchestrationTimer);
|
|
279
|
-
}
|
|
280
|
-
if (this.metricsTimer) {
|
|
281
|
-
clearInterval(this.metricsTimer);
|
|
282
|
-
}
|
|
283
|
-
// Wait for active orchestrations to complete or timeout
|
|
284
|
-
const timeoutMs = this.config.recovery.defaultTimeout;
|
|
285
|
-
const startTime = Date.now();
|
|
286
|
-
while(this.state.activeOrchestrations.size > 0 && Date.now() - startTime < timeoutMs){
|
|
287
|
-
await new Promise((resolve)=>setTimeout(resolve, 1000));
|
|
288
|
-
}
|
|
289
|
-
// Stop all component systems
|
|
290
|
-
await this.errorDetection.stop();
|
|
291
|
-
await this.recoveryWorkflows.stop();
|
|
292
|
-
await this.resilienceArchitecture.stop();
|
|
293
|
-
await this.recoveryMonitoring.stop();
|
|
294
|
-
await this.selfHealing.stop();
|
|
295
|
-
await this.redis.disconnect();
|
|
296
|
-
this.emit('stopped');
|
|
297
|
-
this.logger.info('Error recovery coordinator stopped');
|
|
298
|
-
}
|
|
299
|
-
startCoordination() {
|
|
300
|
-
this.orchestrationTimer = setInterval(async ()=>{
|
|
301
|
-
try {
|
|
302
|
-
await this.coordinateActiveOrchestrations();
|
|
303
|
-
await this.detectAndResolveConflicts();
|
|
304
|
-
await this.optimizeResourceAllocation();
|
|
305
|
-
} catch (error) {
|
|
306
|
-
this.logger.error('Error in coordination cycle', {
|
|
307
|
-
error
|
|
308
|
-
});
|
|
309
|
-
}
|
|
310
|
-
}, 2000); // Coordinate every 2 seconds
|
|
311
|
-
}
|
|
312
|
-
startMetricsCollection() {
|
|
313
|
-
this.metricsTimer = setInterval(async ()=>{
|
|
314
|
-
try {
|
|
315
|
-
await this.updateSystemMetrics();
|
|
316
|
-
await this.evaluateTargetAchievement();
|
|
317
|
-
await this.publishSystemStatus();
|
|
318
|
-
} catch (error) {
|
|
319
|
-
this.logger.error('Error in metrics collection', {
|
|
320
|
-
error
|
|
321
|
-
});
|
|
322
|
-
}
|
|
323
|
-
}, 10000); // Collect metrics every 10 seconds
|
|
324
|
-
}
|
|
325
|
-
async handleDetectedError(error) {
|
|
326
|
-
this.logger.info('Error detected, initiating recovery orchestration', {
|
|
327
|
-
errorId: error.id,
|
|
328
|
-
type: error.type,
|
|
329
|
-
severity: error.severity
|
|
330
|
-
});
|
|
331
|
-
// Create recovery orchestration
|
|
332
|
-
const orchestration = await this.createRecoveryOrchestration(error);
|
|
333
|
-
await this.executeRecoveryOrchestration(orchestration);
|
|
334
|
-
}
|
|
335
|
-
async handleEarlyWarning(warning) {
|
|
336
|
-
this.logger.info('Early warning received, preparing proactive response', {
|
|
337
|
-
warningId: warning.id,
|
|
338
|
-
type: warning.type,
|
|
339
|
-
confidence: warning.confidence
|
|
340
|
-
});
|
|
341
|
-
// Create recovery orchestration for proactive response
|
|
342
|
-
const orchestration = await this.createRecoveryOrchestration(warning);
|
|
343
|
-
await this.executeRecoveryOrchestration(orchestration);
|
|
344
|
-
}
|
|
345
|
-
async createRecoveryOrchestration(trigger) {
|
|
346
|
-
const orchestrationId = `orchestration-${Date.now()}-${Math.random().toString(36).slice(2)}`;
|
|
347
|
-
const detectionTime = new Date();
|
|
348
|
-
// Select optimal recovery strategy
|
|
349
|
-
const strategy = await this.selectRecoveryStrategy(trigger);
|
|
350
|
-
const orchestration = {
|
|
351
|
-
id: orchestrationId,
|
|
352
|
-
trigger,
|
|
353
|
-
detection: {
|
|
354
|
-
detectedAt: detectionTime,
|
|
355
|
-
confidence: 'confidence' in trigger ? trigger.confidence : 0.8,
|
|
356
|
-
method: 'automated_detection',
|
|
357
|
-
latency: 0 // Would calculate actual detection latency
|
|
358
|
-
},
|
|
359
|
-
strategy,
|
|
360
|
-
execution: {
|
|
361
|
-
startedAt: new Date(),
|
|
362
|
-
components: [],
|
|
363
|
-
status: 'pending'
|
|
364
|
-
},
|
|
365
|
-
result: {
|
|
366
|
-
success: false,
|
|
367
|
-
effectiveness: 0,
|
|
368
|
-
errorResolved: false,
|
|
369
|
-
systemStabilized: false,
|
|
370
|
-
downtime: 0,
|
|
371
|
-
impact: {
|
|
372
|
-
availability: 0,
|
|
373
|
-
performance: 0,
|
|
374
|
-
reliability: 0
|
|
375
|
-
},
|
|
376
|
-
lessons: [],
|
|
377
|
-
improvements: []
|
|
378
|
-
},
|
|
379
|
-
metrics: {
|
|
380
|
-
totalDuration: 0,
|
|
381
|
-
detectionLatency: this.detection.detection.latency,
|
|
382
|
-
recoveryTime: 0,
|
|
383
|
-
effectiveness: 0,
|
|
384
|
-
componentSuccess: {},
|
|
385
|
-
resourceUtilization: {},
|
|
386
|
-
systemHealth: {
|
|
387
|
-
before: 0,
|
|
388
|
-
after: 0,
|
|
389
|
-
improvement: 0
|
|
390
|
-
}
|
|
391
|
-
}
|
|
392
|
-
};
|
|
393
|
-
// Store orchestration
|
|
394
|
-
this.state.activeOrchestrations.set(orchestrationId, orchestration);
|
|
395
|
-
// Store in Redis
|
|
396
|
-
await this.redis.setEx(`swarm:error-recovery-final:orchestrations:${orchestrationId}`, 3600, JSON.stringify(orchestration));
|
|
397
|
-
// Publish to swarm channel
|
|
398
|
-
await this.redis.publish('swarm:error-recovery-final', JSON.stringify({
|
|
399
|
-
type: 'ORCHESTRATION_CREATED',
|
|
400
|
-
orchestrationId: orchestration.id,
|
|
401
|
-
strategy: strategy.selected,
|
|
402
|
-
timestamp: new Date().toISOString()
|
|
403
|
-
}));
|
|
404
|
-
this.emit('orchestrationCreated', orchestration);
|
|
405
|
-
return orchestration;
|
|
406
|
-
}
|
|
407
|
-
async selectRecoveryStrategy(trigger) {
|
|
408
|
-
const strategies = [
|
|
409
|
-
'detection_first',
|
|
410
|
-
'recovery_first',
|
|
411
|
-
'parallel',
|
|
412
|
-
'adaptive'
|
|
413
|
-
];
|
|
414
|
-
const strategyScores = await Promise.all(strategies.map(async (strategy)=>({
|
|
415
|
-
strategy,
|
|
416
|
-
score: await this.evaluateStrategyScore(strategy, trigger)
|
|
417
|
-
})));
|
|
418
|
-
// Sort by score and select best
|
|
419
|
-
strategyScores.sort((a, b)=>b.score - a.score);
|
|
420
|
-
const selected = strategyScores[0];
|
|
421
|
-
return {
|
|
422
|
-
selected: selected.strategy,
|
|
423
|
-
alternatives: strategyScores.slice(1).map((s)=>s.strategy),
|
|
424
|
-
reasoning: this.getStrategyReasoning(selected.strategy, trigger),
|
|
425
|
-
confidence: selected.score
|
|
426
|
-
};
|
|
427
|
-
}
|
|
428
|
-
async evaluateStrategyScore(strategy, trigger) {
|
|
429
|
-
let score = 0.5; // Base score
|
|
430
|
-
switch(strategy){
|
|
431
|
-
case 'detection_first':
|
|
432
|
-
// Prioritize detection for early warnings
|
|
433
|
-
if ('predictive' in trigger && trigger.predictive) {
|
|
434
|
-
score += 0.3;
|
|
435
|
-
}
|
|
436
|
-
// Good for less severe issues
|
|
437
|
-
if (trigger.severity === 'low' || trigger.severity === 'medium') {
|
|
438
|
-
score += 0.2;
|
|
439
|
-
}
|
|
440
|
-
break;
|
|
441
|
-
case 'recovery_first':
|
|
442
|
-
// Prioritize recovery for critical issues
|
|
443
|
-
if (trigger.severity === 'high' || trigger.severity === 'critical') {
|
|
444
|
-
score += 0.4;
|
|
445
|
-
}
|
|
446
|
-
// Good for known patterns
|
|
447
|
-
score += 0.2;
|
|
448
|
-
break;
|
|
449
|
-
case 'parallel':
|
|
450
|
-
// Good for complex issues
|
|
451
|
-
score += 0.2;
|
|
452
|
-
// Good when resources are available
|
|
453
|
-
if (this.state.resources.activeRecoveries < this.config.recovery.maxConcurrentRecoveries) {
|
|
454
|
-
score += 0.3;
|
|
455
|
-
}
|
|
456
|
-
break;
|
|
457
|
-
case 'adaptive':
|
|
458
|
-
// Always good starting point
|
|
459
|
-
score += 0.3;
|
|
460
|
-
// Good when confidence is high
|
|
461
|
-
const confidence = 'confidence' in trigger ? trigger.confidence : 0.8;
|
|
462
|
-
score += confidence * 0.2;
|
|
463
|
-
break;
|
|
464
|
-
}
|
|
465
|
-
return Math.min(score, 1.0);
|
|
466
|
-
}
|
|
467
|
-
getStrategyReasoning(strategy, trigger) {
|
|
468
|
-
switch(strategy){
|
|
469
|
-
case 'detection_first':
|
|
470
|
-
return 'Prioritizing thorough analysis to understand the issue before recovery';
|
|
471
|
-
case 'recovery_first':
|
|
472
|
-
return 'Prioritizing immediate recovery to minimize impact';
|
|
473
|
-
case 'parallel':
|
|
474
|
-
return 'Executing detection and recovery in parallel for faster resolution';
|
|
475
|
-
case 'adaptive':
|
|
476
|
-
return 'Adapting strategy based on issue characteristics and system state';
|
|
477
|
-
default:
|
|
478
|
-
return 'Using standard recovery approach';
|
|
479
|
-
}
|
|
480
|
-
}
|
|
481
|
-
async executeRecoveryOrchestration(orchestration) {
|
|
482
|
-
orchestration.execution.status = 'running';
|
|
483
|
-
orchestration.execution.startedAt = new Date();
|
|
484
|
-
this.logger.info('Executing recovery orchestration', {
|
|
485
|
-
orchestrationId: orchestration.id,
|
|
486
|
-
strategy: orchestration.strategy.selected,
|
|
487
|
-
triggerType: orchestration.trigger.type
|
|
488
|
-
});
|
|
489
|
-
try {
|
|
490
|
-
// Record system health before recovery
|
|
491
|
-
orchestration.metrics.systemHealth.before = await this.getSystemHealthScore();
|
|
492
|
-
// Execute based on selected strategy
|
|
493
|
-
switch(orchestration.strategy.selected){
|
|
494
|
-
case 'detection_first':
|
|
495
|
-
await this.executeDetectionFirstStrategy(orchestration);
|
|
496
|
-
break;
|
|
497
|
-
case 'recovery_first':
|
|
498
|
-
await this.executeRecoveryFirstStrategy(orchestration);
|
|
499
|
-
break;
|
|
500
|
-
case 'parallel':
|
|
501
|
-
await this.executeParallelStrategy(orchestration);
|
|
502
|
-
break;
|
|
503
|
-
case 'adaptive':
|
|
504
|
-
await this.executeAdaptiveStrategy(orchestration);
|
|
505
|
-
break;
|
|
506
|
-
default:
|
|
507
|
-
throw new Error(`Unknown strategy: ${orchestration.strategy.selected}`);
|
|
508
|
-
}
|
|
509
|
-
// Record system health after recovery
|
|
510
|
-
orchestration.metrics.systemHealth.after = await this.getSystemHealthScore();
|
|
511
|
-
orchestration.metrics.systemHealth.improvement = orchestration.metrics.systemHealth.after - orchestration.metrics.systemHealth.before;
|
|
512
|
-
// Calculate final results
|
|
513
|
-
await this.calculateOrchestrationResults(orchestration);
|
|
514
|
-
orchestration.execution.completedAt = new Date();
|
|
515
|
-
orchestration.execution.duration = orchestration.execution.completedAt.getTime() - orchestration.execution.startedAt.getTime();
|
|
516
|
-
orchestration.execution.status = orchestration.result.success ? 'completed' : 'failed';
|
|
517
|
-
// Update metrics
|
|
518
|
-
orchestration.metrics.totalDuration = orchestration.execution.duration || 0;
|
|
519
|
-
orchestration.metrics.recoveryTime = orchestration.execution.duration || 0;
|
|
520
|
-
orchestration.metrics.effectiveness = orchestration.result.effectiveness;
|
|
521
|
-
// Store in Redis
|
|
522
|
-
await this.redis.setEx(`swarm:error-recovery-final:orchestrations:${orchestration.id}`, 3600, JSON.stringify(orchestration));
|
|
523
|
-
// Publish result
|
|
524
|
-
await this.redis.publish('swarm:error-recovery-final', JSON.stringify({
|
|
525
|
-
type: orchestration.result.success ? 'ORCHESTRATION_SUCCESS' : 'ORCHESTRATION_FAILED',
|
|
526
|
-
orchestrationId: orchestration.id,
|
|
527
|
-
result: orchestration.result,
|
|
528
|
-
effectiveness: orchestration.result.effectiveness,
|
|
529
|
-
timestamp: new Date().toISOString()
|
|
530
|
-
}));
|
|
531
|
-
// Move to completed orchestrations
|
|
532
|
-
this.state.activeOrchestrations.delete(orchestration.id);
|
|
533
|
-
this.completedOrchestrations.push(orchestration);
|
|
534
|
-
this.emit(orchestration.result.success ? 'orchestrationCompleted' : 'orchestrationFailed', orchestration);
|
|
535
|
-
// Check if we achieved our targets
|
|
536
|
-
await this.checkTargetAchievement(orchestration);
|
|
537
|
-
} catch (error) {
|
|
538
|
-
orchestration.execution.status = 'failed';
|
|
539
|
-
orchestration.execution.completedAt = new Date();
|
|
540
|
-
orchestration.execution.duration = orchestration.execution.completedAt.getTime() - orchestration.execution.startedAt.getTime();
|
|
541
|
-
this.logger.error('Recovery orchestration failed', {
|
|
542
|
-
orchestrationId: orchestration.id,
|
|
543
|
-
error: error instanceof Error ? error.message : String(error)
|
|
544
|
-
});
|
|
545
|
-
this.emit('orchestrationFailed', {
|
|
546
|
-
orchestration,
|
|
547
|
-
error
|
|
548
|
-
});
|
|
549
|
-
}
|
|
550
|
-
}
|
|
551
|
-
async executeDetectionFirstStrategy(orchestration) {
|
|
552
|
-
// Step 1: Enhanced detection and analysis
|
|
553
|
-
const detectionComponent = await this.executeDetectionComponent(orchestration);
|
|
554
|
-
orchestration.execution.components.push(detectionComponent);
|
|
555
|
-
if (detectionComponent.status !== 'completed') {
|
|
556
|
-
throw new Error('Detection component failed');
|
|
557
|
-
}
|
|
558
|
-
// Step 2: Plan recovery based on detection results
|
|
559
|
-
const planningComponent = await this.executePlanningComponent(orchestration, detectionComponent.result);
|
|
560
|
-
orchestration.execution.components.push(planningComponent);
|
|
561
|
-
// Step 3: Execute recovery
|
|
562
|
-
const recoveryComponent = await this.executeRecoveryComponent(orchestration, planningComponent.result);
|
|
563
|
-
orchestration.execution.components.push(recoveryComponent);
|
|
564
|
-
// Step 4: Verify and monitor
|
|
565
|
-
const verificationComponent = await this.executeVerificationComponent(orchestration);
|
|
566
|
-
orchestration.execution.components.push(verificationComponent);
|
|
567
|
-
}
|
|
568
|
-
async executeRecoveryFirstStrategy(orchestration) {
|
|
569
|
-
// Step 1: Immediate recovery actions
|
|
570
|
-
const recoveryComponent = await this.executeRecoveryComponent(orchestration);
|
|
571
|
-
orchestration.execution.components.push(recoveryComponent);
|
|
572
|
-
// Step 2: Parallel detection for learning
|
|
573
|
-
const detectionComponent = await this.executeDetectionComponent(orchestration);
|
|
574
|
-
orchestration.execution.components.push(detectionComponent);
|
|
575
|
-
// Step 3: Self-healing if needed
|
|
576
|
-
if (recoveryComponent.status !== 'completed') {
|
|
577
|
-
const healingComponent = await this.executeSelfHealingComponent(orchestration);
|
|
578
|
-
orchestration.execution.components.push(healingComponent);
|
|
579
|
-
}
|
|
580
|
-
// Step 4: Verification
|
|
581
|
-
const verificationComponent = await this.executeVerificationComponent(orchestration);
|
|
582
|
-
orchestration.execution.components.push(verificationComponent);
|
|
583
|
-
}
|
|
584
|
-
async executeParallelStrategy(orchestration) {
|
|
585
|
-
// Execute multiple components in parallel
|
|
586
|
-
const components = await Promise.allSettled([
|
|
587
|
-
this.executeDetectionComponent(orchestration),
|
|
588
|
-
this.executeRecoveryComponent(orchestration),
|
|
589
|
-
this.executeResilienceComponent(orchestration),
|
|
590
|
-
this.executeMonitoringComponent(orchestration)
|
|
591
|
-
]);
|
|
592
|
-
// Process results
|
|
593
|
-
components.forEach((result, index)=>{
|
|
594
|
-
const component = result.status === 'fulfilled' ? result.value : {
|
|
595
|
-
id: `component-${index}`,
|
|
596
|
-
type: 'unknown',
|
|
597
|
-
name: `Component ${index}`,
|
|
598
|
-
status: 'failed',
|
|
599
|
-
startTime: new Date(),
|
|
600
|
-
error: result.reason instanceof Error ? result.reason.message : String(result.reason),
|
|
601
|
-
dependencies: []
|
|
602
|
-
};
|
|
603
|
-
orchestration.execution.components.push(component);
|
|
604
|
-
});
|
|
605
|
-
// Additional verification if needed
|
|
606
|
-
const verificationComponent = await this.executeVerificationComponent(orchestration);
|
|
607
|
-
orchestration.execution.components.push(verificationComponent);
|
|
608
|
-
}
|
|
609
|
-
async executeAdaptiveStrategy(orchestration) {
|
|
610
|
-
// Start with detection
|
|
611
|
-
const detectionComponent = await this.executeDetectionComponent(orchestration);
|
|
612
|
-
orchestration.execution.components.push(detectionComponent);
|
|
613
|
-
// Adapt based on detection results
|
|
614
|
-
const adaptation = await this.adaptStrategy(orchestration, detectionComponent.result);
|
|
615
|
-
// Execute adapted components
|
|
616
|
-
for (const component of adaptation.components){
|
|
617
|
-
const execution = await this.executeComponent(orchestration, component);
|
|
618
|
-
orchestration.execution.components.push(execution);
|
|
619
|
-
}
|
|
620
|
-
// Final verification
|
|
621
|
-
const verificationComponent = await this.executeVerificationComponent(orchestration);
|
|
622
|
-
orchestration.execution.components.push(verificationComponent);
|
|
623
|
-
}
|
|
624
|
-
async executeDetectionComponent(orchestration) {
|
|
625
|
-
const component = {
|
|
626
|
-
id: 'detection',
|
|
627
|
-
type: 'detection',
|
|
628
|
-
name: 'Enhanced Error Detection',
|
|
629
|
-
status: 'pending',
|
|
630
|
-
startTime: new Date(),
|
|
631
|
-
dependencies: []
|
|
632
|
-
};
|
|
633
|
-
try {
|
|
634
|
-
component.status = 'running';
|
|
635
|
-
// Perform enhanced detection analysis
|
|
636
|
-
// This would involve deeper analysis of the error pattern
|
|
637
|
-
await new Promise((resolve)=>setTimeout(resolve, 1000)); // Simulate work
|
|
638
|
-
component.endTime = new Date();
|
|
639
|
-
component.duration = component.endTime.getTime() - component.startTime.getTime();
|
|
640
|
-
component.status = 'completed';
|
|
641
|
-
component.result = {
|
|
642
|
-
analysis: 'Detailed error analysis completed',
|
|
643
|
-
rootCause: 'Identified potential root cause',
|
|
644
|
-
recommendations: [
|
|
645
|
-
'Recommended actions based on analysis'
|
|
646
|
-
]
|
|
647
|
-
};
|
|
648
|
-
} catch (error) {
|
|
649
|
-
component.endTime = new Date();
|
|
650
|
-
component.duration = component.endTime.getTime() - component.startTime.getTime();
|
|
651
|
-
component.status = 'failed';
|
|
652
|
-
component.error = error instanceof Error ? error.message : String(error);
|
|
653
|
-
}
|
|
654
|
-
return component;
|
|
655
|
-
}
|
|
656
|
-
async executePlanningComponent(orchestration, detectionResult) {
|
|
657
|
-
const component = {
|
|
658
|
-
id: 'planning',
|
|
659
|
-
type: 'detection',
|
|
660
|
-
name: 'Recovery Planning',
|
|
661
|
-
status: 'pending',
|
|
662
|
-
startTime: new Date(),
|
|
663
|
-
dependencies: [
|
|
664
|
-
'detection'
|
|
665
|
-
]
|
|
666
|
-
};
|
|
667
|
-
try {
|
|
668
|
-
component.status = 'running';
|
|
669
|
-
// Plan recovery based on detection results
|
|
670
|
-
await new Promise((resolve)=>setTimeout(resolve, 500)); // Simulate planning
|
|
671
|
-
component.endTime = new Date();
|
|
672
|
-
component.duration = component.endTime.getTime() - component.startTime.getTime();
|
|
673
|
-
component.status = 'completed';
|
|
674
|
-
component.result = {
|
|
675
|
-
plan: 'Optimized recovery plan created',
|
|
676
|
-
actions: [
|
|
677
|
-
'Planned recovery actions'
|
|
678
|
-
],
|
|
679
|
-
estimatedDuration: 30000
|
|
680
|
-
};
|
|
681
|
-
} catch (error) {
|
|
682
|
-
component.endTime = new Date();
|
|
683
|
-
component.duration = component.endTime.getTime() - component.startTime.getTime();
|
|
684
|
-
component.status = 'failed';
|
|
685
|
-
component.error = error instanceof Error ? error.message : String(error);
|
|
686
|
-
}
|
|
687
|
-
return component;
|
|
688
|
-
}
|
|
689
|
-
async executeRecoveryComponent(orchestration, plan) {
|
|
690
|
-
const component = {
|
|
691
|
-
id: 'recovery',
|
|
692
|
-
type: 'workflow',
|
|
693
|
-
name: 'Recovery Workflow Execution',
|
|
694
|
-
status: 'pending',
|
|
695
|
-
startTime: new Date(),
|
|
696
|
-
dependencies: plan ? [
|
|
697
|
-
'planning'
|
|
698
|
-
] : []
|
|
699
|
-
};
|
|
700
|
-
try {
|
|
701
|
-
component.status = 'running';
|
|
702
|
-
// Execute recovery workflow
|
|
703
|
-
const workflowId = await this.recoveryWorkflows.handleError(orchestration.trigger);
|
|
704
|
-
component.result = {
|
|
705
|
-
workflowId
|
|
706
|
-
};
|
|
707
|
-
// Wait for workflow completion (simplified)
|
|
708
|
-
await new Promise((resolve)=>setTimeout(resolve, 2000));
|
|
709
|
-
component.endTime = new Date();
|
|
710
|
-
component.duration = component.endTime.getTime() - component.startTime.getTime();
|
|
711
|
-
component.status = 'completed';
|
|
712
|
-
} catch (error) {
|
|
713
|
-
component.endTime = new Date();
|
|
714
|
-
component.duration = component.endTime.getTime() - component.startTime.getTime();
|
|
715
|
-
component.status = 'failed';
|
|
716
|
-
component.error = error instanceof Error ? error.message : String(error);
|
|
717
|
-
}
|
|
718
|
-
return component;
|
|
719
|
-
}
|
|
720
|
-
async executeResilienceComponent(orchestration) {
|
|
721
|
-
const component = {
|
|
722
|
-
id: 'resilience',
|
|
723
|
-
type: 'resilience',
|
|
724
|
-
name: 'Resilience Measures',
|
|
725
|
-
status: 'pending',
|
|
726
|
-
startTime: new Date(),
|
|
727
|
-
dependencies: []
|
|
728
|
-
};
|
|
729
|
-
try {
|
|
730
|
-
component.status = 'running';
|
|
731
|
-
// Apply resilience measures
|
|
732
|
-
await new Promise((resolve)=>setTimeout(resolve, 1000));
|
|
733
|
-
component.endTime = new Date();
|
|
734
|
-
component.duration = component.endTime.getTime() - component.startTime.getTime();
|
|
735
|
-
component.status = 'completed';
|
|
736
|
-
component.result = {
|
|
737
|
-
measures: 'Resilience measures applied',
|
|
738
|
-
circuitBreakers: 'Circuit breakers configured',
|
|
739
|
-
failover: 'Failover mechanisms activated'
|
|
740
|
-
};
|
|
741
|
-
} catch (error) {
|
|
742
|
-
component.endTime = new Date();
|
|
743
|
-
component.duration = component.endTime.getTime() - component.startTime.getTime();
|
|
744
|
-
component.status = 'failed';
|
|
745
|
-
component.error = error instanceof Error ? error.message : String(error);
|
|
746
|
-
}
|
|
747
|
-
return component;
|
|
748
|
-
}
|
|
749
|
-
async executeMonitoringComponent(orchestration) {
|
|
750
|
-
const component = {
|
|
751
|
-
id: 'monitoring',
|
|
752
|
-
type: 'monitoring',
|
|
753
|
-
name: 'Enhanced Monitoring',
|
|
754
|
-
status: 'pending',
|
|
755
|
-
startTime: new Date(),
|
|
756
|
-
dependencies: []
|
|
757
|
-
};
|
|
758
|
-
try {
|
|
759
|
-
component.status = 'running';
|
|
760
|
-
// Set up enhanced monitoring
|
|
761
|
-
await this.recoveryMonitoring.recordErrorDetection(orchestration.trigger);
|
|
762
|
-
component.endTime = new Date();
|
|
763
|
-
component.duration = component.endTime.getTime() - component.startTime.getTime();
|
|
764
|
-
component.status = 'completed';
|
|
765
|
-
component.result = {
|
|
766
|
-
monitoring: 'Enhanced monitoring activated',
|
|
767
|
-
alerts: 'Alert rules configured',
|
|
768
|
-
tracking: 'Progress tracking enabled'
|
|
769
|
-
};
|
|
770
|
-
} catch (error) {
|
|
771
|
-
component.endTime = new Date();
|
|
772
|
-
component.duration = component.endTime.getTime() - component.startTime.getTime();
|
|
773
|
-
component.status = 'failed';
|
|
774
|
-
component.error = error instanceof Error ? error.message : String(error);
|
|
775
|
-
}
|
|
776
|
-
return component;
|
|
777
|
-
}
|
|
778
|
-
async executeSelfHealingComponent(orchestration) {
|
|
779
|
-
const component = {
|
|
780
|
-
id: 'self_healing',
|
|
781
|
-
type: 'self_healing',
|
|
782
|
-
name: 'Self-Healing Mechanisms',
|
|
783
|
-
status: 'pending',
|
|
784
|
-
startTime: new Date(),
|
|
785
|
-
dependencies: [
|
|
786
|
-
'recovery'
|
|
787
|
-
]
|
|
788
|
-
};
|
|
789
|
-
try {
|
|
790
|
-
component.status = 'running';
|
|
791
|
-
// Activate self-healing
|
|
792
|
-
const healingSessionId = await this.selfHealing.handleTrigger(orchestration.trigger);
|
|
793
|
-
component.result = {
|
|
794
|
-
healingSessionId
|
|
795
|
-
};
|
|
796
|
-
// Wait for healing (simplified)
|
|
797
|
-
await new Promise((resolve)=>setTimeout(resolve, 3000));
|
|
798
|
-
component.endTime = new Date();
|
|
799
|
-
component.duration = component.endTime.getTime() - component.startTime.getTime();
|
|
800
|
-
component.status = 'completed';
|
|
801
|
-
} catch (error) {
|
|
802
|
-
component.endTime = new Date();
|
|
803
|
-
component.duration = component.endTime.getTime() - component.startTime.getTime();
|
|
804
|
-
component.status = 'failed';
|
|
805
|
-
component.error = error instanceof Error ? error.message : String(error);
|
|
806
|
-
}
|
|
807
|
-
return component;
|
|
808
|
-
}
|
|
809
|
-
async executeVerificationComponent(orchestration) {
|
|
810
|
-
const component = {
|
|
811
|
-
id: 'verification',
|
|
812
|
-
type: 'monitoring',
|
|
813
|
-
name: 'Recovery Verification',
|
|
814
|
-
status: 'pending',
|
|
815
|
-
startTime: new Date(),
|
|
816
|
-
dependencies: orchestration.execution.components.map((c)=>c.id)
|
|
817
|
-
};
|
|
818
|
-
try {
|
|
819
|
-
component.status = 'running';
|
|
820
|
-
// Verify recovery success
|
|
821
|
-
await new Promise((resolve)=>setTimeout(resolve, 1000));
|
|
822
|
-
const success = orchestration.execution.components.some((c)=>c.status === 'completed');
|
|
823
|
-
component.endTime = new Date();
|
|
824
|
-
component.duration = component.endTime.getTime() - component.startTime.getTime();
|
|
825
|
-
component.status = success ? 'completed' : 'failed';
|
|
826
|
-
component.result = {
|
|
827
|
-
verified: success,
|
|
828
|
-
healthCheck: 'System health check completed',
|
|
829
|
-
stability: 'Stability verified'
|
|
830
|
-
};
|
|
831
|
-
} catch (error) {
|
|
832
|
-
component.endTime = new Date();
|
|
833
|
-
component.duration = component.endTime.getTime() - component.startTime.getTime();
|
|
834
|
-
component.status = 'failed';
|
|
835
|
-
component.error = error instanceof Error ? error.message : String(error);
|
|
836
|
-
}
|
|
837
|
-
return component;
|
|
838
|
-
}
|
|
839
|
-
async executeComponent(orchestration, componentType) {
|
|
840
|
-
switch(componentType){
|
|
841
|
-
case 'detection':
|
|
842
|
-
return await this.executeDetectionComponent(orchestration);
|
|
843
|
-
case 'recovery':
|
|
844
|
-
return await this.executeRecoveryComponent(orchestration);
|
|
845
|
-
case 'resilience':
|
|
846
|
-
return await this.executeResilienceComponent(orchestration);
|
|
847
|
-
case 'monitoring':
|
|
848
|
-
return await this.executeMonitoringComponent(orchestration);
|
|
849
|
-
case 'self_healing':
|
|
850
|
-
return await this.executeSelfHealingComponent(orchestration);
|
|
851
|
-
default:
|
|
852
|
-
throw new Error(`Unknown component type: ${componentType}`);
|
|
853
|
-
}
|
|
854
|
-
}
|
|
855
|
-
async adaptStrategy(orchestration, detectionResult) {
|
|
856
|
-
// Simple adaptation logic based on detection results
|
|
857
|
-
const components = [
|
|
858
|
-
'recovery'
|
|
859
|
-
];
|
|
860
|
-
if (detectionResult && detectionResult.severity === 'critical') {
|
|
861
|
-
components.push('resilience', 'self_healing');
|
|
862
|
-
}
|
|
863
|
-
if (detectionResult && detectionResult.complexity === 'high') {
|
|
864
|
-
components.push('monitoring');
|
|
865
|
-
}
|
|
866
|
-
return {
|
|
867
|
-
components
|
|
868
|
-
};
|
|
869
|
-
}
|
|
870
|
-
async calculateOrchestrationResults(orchestration) {
|
|
871
|
-
const components = orchestration.execution.components;
|
|
872
|
-
const successfulComponents = components.filter((c)=>c.status === 'completed');
|
|
873
|
-
const totalComponents = components.length;
|
|
874
|
-
// Calculate success
|
|
875
|
-
orchestration.result.success = successfulComponents.length === totalComponents;
|
|
876
|
-
// Calculate effectiveness
|
|
877
|
-
orchestration.result.effectiveness = successfulComponents.length / totalComponents;
|
|
878
|
-
// Determine if error was resolved
|
|
879
|
-
orchestration.result.errorResolved = components.some((c)=>c.type === 'recovery' && c.status === 'completed');
|
|
880
|
-
// Determine if system is stabilized
|
|
881
|
-
orchestration.result.systemStabilized = components.some((c)=>c.type === 'monitoring' && c.status === 'completed');
|
|
882
|
-
// Calculate impact
|
|
883
|
-
orchestration.result.impact = await this.calculateRecoveryImpact(orchestration);
|
|
884
|
-
// Generate lessons and improvements
|
|
885
|
-
orchestration.result.lessons = this.generateOrchestrationLessons(orchestration);
|
|
886
|
-
orchestration.result.improvements = this.generateOrchestrationImprovements(orchestration);
|
|
887
|
-
// Update component success tracking
|
|
888
|
-
components.forEach((component)=>{
|
|
889
|
-
orchestration.metrics.componentSuccess[component.id] = component.status === 'completed';
|
|
890
|
-
});
|
|
891
|
-
}
|
|
892
|
-
async calculateRecoveryImpact(orchestration) {
|
|
893
|
-
// Implementation would calculate actual impact
|
|
894
|
-
return {
|
|
895
|
-
availability: Math.random() * 0.1,
|
|
896
|
-
performance: Math.random() * 0.2,
|
|
897
|
-
reliability: Math.random() * 0.15 // 0-15% improvement
|
|
898
|
-
};
|
|
899
|
-
}
|
|
900
|
-
generateOrchestrationLessons(orchestration) {
|
|
901
|
-
const lessons = [];
|
|
902
|
-
if (orchestration.result.success) {
|
|
903
|
-
lessons.push(`Recovery strategy "${orchestration.strategy.selected}" was effective`);
|
|
904
|
-
lessons.push(`Key success factors: ${orchestration.execution.components.filter((c)=>c.status === 'completed').map((c)=>c.name).join(', ')}`);
|
|
905
|
-
} else {
|
|
906
|
-
lessons.push(`Recovery strategy "${orchestration.strategy.selected}" needs refinement`);
|
|
907
|
-
const failedComponents = orchestration.execution.components.filter((c)=>c.status === 'failed');
|
|
908
|
-
if (failedComponents.length > 0) {
|
|
909
|
-
lessons.push(`Failed components: ${failedComponents.map((c)=>c.name).join(', ')}`);
|
|
910
|
-
}
|
|
911
|
-
}
|
|
912
|
-
return lessons;
|
|
913
|
-
}
|
|
914
|
-
generateOrchestrationImprovements(orchestration) {
|
|
915
|
-
const improvements = [];
|
|
916
|
-
if (!orchestration.result.success) {
|
|
917
|
-
improvements.push('Consider alternative recovery strategies for similar issues');
|
|
918
|
-
improvements.push('Review component dependencies and execution order');
|
|
919
|
-
}
|
|
920
|
-
if (orchestration.metrics.totalDuration > this.config.targets.recoveryTime) {
|
|
921
|
-
improvements.push('Optimize orchestration execution for faster recovery');
|
|
922
|
-
}
|
|
923
|
-
return improvements;
|
|
924
|
-
}
|
|
925
|
-
async getSystemHealthScore() {
|
|
926
|
-
// Implementation would calculate actual system health score
|
|
927
|
-
return Math.random() * 100;
|
|
928
|
-
}
|
|
929
|
-
// Event handlers
|
|
930
|
-
handleWorkflowStarted(workflow) {
|
|
931
|
-
this.logger.debug('Recovery workflow started', {
|
|
932
|
-
workflowId: workflow.id
|
|
933
|
-
});
|
|
934
|
-
}
|
|
935
|
-
handleWorkflowCompleted(workflow) {
|
|
936
|
-
this.logger.debug('Recovery workflow completed', {
|
|
937
|
-
workflowId: workflow.id
|
|
938
|
-
});
|
|
939
|
-
}
|
|
940
|
-
handleWorkflowFailed(workflow) {
|
|
941
|
-
this.logger.debug('Recovery workflow failed', {
|
|
942
|
-
workflowId: workflow.id
|
|
943
|
-
});
|
|
944
|
-
}
|
|
945
|
-
handleCircuitBreakerStateChange(data) {
|
|
946
|
-
this.logger.debug('Circuit breaker state changed', data);
|
|
947
|
-
}
|
|
948
|
-
handleFailover(state) {
|
|
949
|
-
this.logger.info('Failover activated', state);
|
|
950
|
-
}
|
|
951
|
-
handleFailback(state) {
|
|
952
|
-
this.logger.info('Failback completed', state);
|
|
953
|
-
}
|
|
954
|
-
handleHealingStarted(data) {
|
|
955
|
-
this.logger.debug('Self-healing started', data);
|
|
956
|
-
}
|
|
957
|
-
handleHealingCompleted(data) {
|
|
958
|
-
this.logger.debug('Self-healing completed', data);
|
|
959
|
-
}
|
|
960
|
-
handleHealingFailed(data) {
|
|
961
|
-
this.logger.debug('Self-healing failed', data);
|
|
962
|
-
}
|
|
963
|
-
handleAlertCreated(alert) {
|
|
964
|
-
this.logger.debug('Alert created', {
|
|
965
|
-
alertId: alert.id,
|
|
966
|
-
type: alert.type
|
|
967
|
-
});
|
|
968
|
-
}
|
|
969
|
-
// Coordination methods
|
|
970
|
-
async coordinateActiveOrchestrations() {
|
|
971
|
-
// Coordinate active orchestrations to prevent conflicts
|
|
972
|
-
const orchestrations = Array.from(this.state.activeOrchestrations.values());
|
|
973
|
-
for (const orchestration of orchestrations){
|
|
974
|
-
// Check for resource conflicts
|
|
975
|
-
await this.checkResourceConflicts(orchestration);
|
|
976
|
-
// Update progress
|
|
977
|
-
await this.updateOrchestrationProgress(orchestration);
|
|
978
|
-
}
|
|
979
|
-
}
|
|
980
|
-
async detectAndResolveConflicts() {
|
|
981
|
-
// Detect and resolve conflicts between orchestrations
|
|
982
|
-
const conflicts = await this.identifyConflicts();
|
|
983
|
-
for (const conflict of conflicts){
|
|
984
|
-
await this.resolveConflict(conflict);
|
|
985
|
-
}
|
|
986
|
-
}
|
|
987
|
-
async optimizeResourceAllocation() {
|
|
988
|
-
// Optimize resource allocation for active orchestrations
|
|
989
|
-
this.state.resources = {
|
|
990
|
-
cpu: await this.getCpuUtilization(),
|
|
991
|
-
memory: await this.getMemoryUtilization(),
|
|
992
|
-
network: await this.getNetworkUtilization(),
|
|
993
|
-
activeRecoveries: this.state.activeOrchestrations.size,
|
|
994
|
-
queuedOperations: 0
|
|
995
|
-
};
|
|
996
|
-
}
|
|
997
|
-
async checkResourceConflicts(orchestration) {
|
|
998
|
-
// Implementation would check for resource conflicts
|
|
999
|
-
}
|
|
1000
|
-
async updateOrchestrationProgress(orchestration) {
|
|
1001
|
-
// Implementation would update orchestration progress
|
|
1002
|
-
}
|
|
1003
|
-
async identifyConflicts() {
|
|
1004
|
-
// Implementation would identify conflicts between orchestrations
|
|
1005
|
-
return [];
|
|
1006
|
-
}
|
|
1007
|
-
async resolveConflict(conflict) {
|
|
1008
|
-
// Implementation would resolve the conflict
|
|
1009
|
-
this.logger.info('Resolving conflict', {
|
|
1010
|
-
conflictId: conflict.id,
|
|
1011
|
-
type: conflict.type
|
|
1012
|
-
});
|
|
1013
|
-
}
|
|
1014
|
-
async updateSystemMetrics() {
|
|
1015
|
-
// Update system health metrics
|
|
1016
|
-
this.state.systemHealth = {
|
|
1017
|
-
overall: await this.getSystemHealthScore(),
|
|
1018
|
-
availability: Math.random() * 100,
|
|
1019
|
-
performance: Math.random() * 100,
|
|
1020
|
-
reliability: Math.random() * 100
|
|
1021
|
-
};
|
|
1022
|
-
// Store metrics in Redis
|
|
1023
|
-
await this.redis.setEx('swarm:error-recovery-final:coordinator:metrics', 300, JSON.stringify({
|
|
1024
|
-
systemHealth: this.state.systemHealth,
|
|
1025
|
-
resources: this.state.resources,
|
|
1026
|
-
activeOrchestrations: this.state.activeOrchestrations.size,
|
|
1027
|
-
timestamp: new Date().toISOString()
|
|
1028
|
-
}));
|
|
1029
|
-
}
|
|
1030
|
-
async evaluateTargetAchievement() {
|
|
1031
|
-
// Evaluate if targets are being achieved
|
|
1032
|
-
this.state.targets.current = {
|
|
1033
|
-
errorDetectionEffectiveness: await this.calculateDetectionEffectiveness(),
|
|
1034
|
-
systemAvailability: this.state.systemHealth.availability,
|
|
1035
|
-
detectionLatency: await this.calculateDetectionLatency(),
|
|
1036
|
-
recoveryTime: await this.calculateRecoveryTime()
|
|
1037
|
-
};
|
|
1038
|
-
// Check if targets are achieved
|
|
1039
|
-
for (const [target, value] of Object.entries(this.state.targets.current)){
|
|
1040
|
-
const targetValue = this.config.targets[target];
|
|
1041
|
-
this.state.targets.achieved[target] = value >= targetValue;
|
|
1042
|
-
}
|
|
1043
|
-
}
|
|
1044
|
-
async publishSystemStatus() {
|
|
1045
|
-
const status = {
|
|
1046
|
-
systemHealth: this.state.systemHealth,
|
|
1047
|
-
targets: this.state.targets,
|
|
1048
|
-
resources: this.state.resources,
|
|
1049
|
-
activeOrchestrations: this.state.activeOrchestrations.size,
|
|
1050
|
-
timestamp: new Date().toISOString()
|
|
1051
|
-
};
|
|
1052
|
-
await this.redis.publish('swarm:error-recovery-final', JSON.stringify({
|
|
1053
|
-
type: 'SYSTEM_STATUS',
|
|
1054
|
-
data: status,
|
|
1055
|
-
timestamp: new Date().toISOString()
|
|
1056
|
-
}));
|
|
1057
|
-
}
|
|
1058
|
-
async checkTargetAchievement(orchestration) {
|
|
1059
|
-
// Check if orchestration contributed to target achievement
|
|
1060
|
-
if (orchestration.result.effectiveness >= 0.9) {
|
|
1061
|
-
this.logger.info('High effectiveness orchestration completed', {
|
|
1062
|
-
orchestrationId: orchestration.id,
|
|
1063
|
-
effectiveness: orchestration.result.effectiveness
|
|
1064
|
-
});
|
|
1065
|
-
}
|
|
1066
|
-
}
|
|
1067
|
-
// Helper methods for metrics calculation
|
|
1068
|
-
async calculateDetectionEffectiveness() {
|
|
1069
|
-
// Implementation would calculate actual detection effectiveness
|
|
1070
|
-
return Math.random() * 100;
|
|
1071
|
-
}
|
|
1072
|
-
async calculateDetectionLatency() {
|
|
1073
|
-
// Implementation would calculate actual detection latency
|
|
1074
|
-
return Math.random() * 1000;
|
|
1075
|
-
}
|
|
1076
|
-
async calculateRecoveryTime() {
|
|
1077
|
-
if (this.completedOrchestrations.length === 0) {
|
|
1078
|
-
return 0;
|
|
1079
|
-
}
|
|
1080
|
-
const totalTime = this.completedOrchestrations.reduce((sum, o)=>sum + o.metrics.totalDuration, 0);
|
|
1081
|
-
return totalTime / this.completedOrchestrations.length;
|
|
1082
|
-
}
|
|
1083
|
-
async getCpuUtilization() {
|
|
1084
|
-
// Implementation would get actual CPU utilization
|
|
1085
|
-
return Math.random() * 100;
|
|
1086
|
-
}
|
|
1087
|
-
async getMemoryUtilization() {
|
|
1088
|
-
// Implementation would get actual memory utilization
|
|
1089
|
-
return Math.random() * 100;
|
|
1090
|
-
}
|
|
1091
|
-
async getNetworkUtilization() {
|
|
1092
|
-
// Implementation would get actual network utilization
|
|
1093
|
-
return Math.random() * 100;
|
|
1094
|
-
}
|
|
1095
|
-
// Public API methods
|
|
1096
|
-
async getOrchestration(orchestrationId) {
|
|
1097
|
-
const orchestration = this.state.activeOrchestrations.get(orchestrationId);
|
|
1098
|
-
if (orchestration) return orchestration;
|
|
1099
|
-
const completed = this.completedOrchestrations.find((o)=>o.id === orchestrationId);
|
|
1100
|
-
if (completed) return completed;
|
|
1101
|
-
// Try loading from Redis
|
|
1102
|
-
const data = await this.redis.get(`swarm:error-recovery-final:orchestrations:${orchestrationId}`);
|
|
1103
|
-
return data ? JSON.parse(data) : null;
|
|
1104
|
-
}
|
|
1105
|
-
async getActiveOrchestrations() {
|
|
1106
|
-
return Array.from(this.state.activeOrchestrations.values());
|
|
1107
|
-
}
|
|
1108
|
-
async getCompletedOrchestrations(limit = 50) {
|
|
1109
|
-
return this.completedOrchestrations.sort((a, b)=>b.execution.completedAt.getTime() - a.execution.completedAt.getTime()).slice(0, limit);
|
|
1110
|
-
}
|
|
1111
|
-
async getSystemStatus() {
|
|
1112
|
-
return {
|
|
1113
|
-
...this.state,
|
|
1114
|
-
activeOrchestrations: new Map(this.state.activeOrchestrations),
|
|
1115
|
-
completedOrchestrations: [
|
|
1116
|
-
...this.state.completedOrchestrations
|
|
1117
|
-
]
|
|
1118
|
-
};
|
|
1119
|
-
}
|
|
1120
|
-
async getMetrics() {
|
|
1121
|
-
return {
|
|
1122
|
-
systemHealth: this.state.systemHealth,
|
|
1123
|
-
targets: this.state.targets,
|
|
1124
|
-
resources: this.state.resources,
|
|
1125
|
-
orchestrations: {
|
|
1126
|
-
active: this.state.activeOrchestrations.size,
|
|
1127
|
-
completed: this.completedOrchestrations.length,
|
|
1128
|
-
successRate: this.completedOrchestrations.length > 0 ? this.completedOrchestrations.filter((o)=>o.result.success).length / this.completedOrchestrations.length : 0
|
|
1129
|
-
}
|
|
1130
|
-
};
|
|
1131
|
-
}
|
|
1132
|
-
async manualTrigger(error) {
|
|
1133
|
-
// Create a synthetic error for manual trigger
|
|
1134
|
-
const syntheticError = {
|
|
1135
|
-
id: `manual-${Date.now()}`,
|
|
1136
|
-
type: error.type || 'manual_trigger',
|
|
1137
|
-
severity: error.severity || 'medium',
|
|
1138
|
-
category: error.category || 'system',
|
|
1139
|
-
message: error.message || 'Manually triggered error recovery',
|
|
1140
|
-
timestamp: new Date(),
|
|
1141
|
-
source: 'manual_trigger',
|
|
1142
|
-
context: error.context || {},
|
|
1143
|
-
predictive: false,
|
|
1144
|
-
confidence: 1.0,
|
|
1145
|
-
metrics: {
|
|
1146
|
-
timestamp: new Date(),
|
|
1147
|
-
cpu: 0,
|
|
1148
|
-
memory: 0,
|
|
1149
|
-
disk: 0,
|
|
1150
|
-
network: 0,
|
|
1151
|
-
agentHealth: 0,
|
|
1152
|
-
taskSuccessRate: 0,
|
|
1153
|
-
responseTime: 0,
|
|
1154
|
-
errorRate: 0,
|
|
1155
|
-
activeConnections: 0,
|
|
1156
|
-
queueSize: 0
|
|
1157
|
-
}
|
|
1158
|
-
};
|
|
1159
|
-
const orchestration = await this.createRecoveryOrchestration(syntheticError);
|
|
1160
|
-
await this.executeRecoveryOrchestration(orchestration);
|
|
1161
|
-
return orchestration.id;
|
|
1162
|
-
}
|
|
1163
|
-
constructor(logger, config){
|
|
1164
|
-
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, "state", void 0), // Component systems
|
|
1165
|
-
_define_property(this, "errorDetection", void 0), _define_property(this, "recoveryWorkflows", void 0), _define_property(this, "resilienceArchitecture", void 0), _define_property(this, "recoveryMonitoring", void 0), _define_property(this, "selfHealing", void 0), // Coordination
|
|
1166
|
-
_define_property(this, "orchestrationTimer", void 0), _define_property(this, "metricsTimer", void 0);
|
|
1167
|
-
this.logger = logger;
|
|
1168
|
-
this.config = config;
|
|
1169
|
-
this.redis = createClient(config.redis);
|
|
1170
|
-
// Initialize state
|
|
1171
|
-
this.state = {
|
|
1172
|
-
activeOrchestrations: new Map(),
|
|
1173
|
-
completedOrchestrations: [],
|
|
1174
|
-
systemHealth: {
|
|
1175
|
-
overall: 0,
|
|
1176
|
-
availability: 0,
|
|
1177
|
-
performance: 0,
|
|
1178
|
-
reliability: 0
|
|
1179
|
-
},
|
|
1180
|
-
targets: {
|
|
1181
|
-
current: {},
|
|
1182
|
-
achieved: {}
|
|
1183
|
-
},
|
|
1184
|
-
conflicts: [],
|
|
1185
|
-
resources: {
|
|
1186
|
-
cpu: 0,
|
|
1187
|
-
memory: 0,
|
|
1188
|
-
network: 0,
|
|
1189
|
-
activeRecoveries: 0,
|
|
1190
|
-
queuedOperations: 0
|
|
1191
|
-
}
|
|
1192
|
-
};
|
|
1193
|
-
// Initialize component systems
|
|
1194
|
-
this.initializeComponents();
|
|
1195
|
-
}
|
|
1196
|
-
}
|
|
1197
|
-
export { ErrorRecoveryCoordinator };
|