snow-flow 1.4.49 → 2.0.0
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/.claude/helpers/github-setup.sh +28 -0
- package/.claude/helpers/quick-start.sh +19 -0
- package/.claude/helpers/setup-mcp.sh +18 -0
- package/.claude/settings.local.json +33 -0
- package/.claude-flow/metrics/system-metrics.json +1992 -0
- package/.env.example +21 -0
- package/.roo/README.md +402 -0
- package/.roo/mcp-list.txt +257 -0
- package/.roo/mcp.json +32 -0
- package/.roo/workflows/basic-tdd.json +32 -0
- package/.roomodes +201 -0
- package/README.md +114 -628
- package/activate-mcp.sh +15 -0
- package/dist/cli.js.bak +2052 -0
- package/manual-register-mcp.js +134 -0
- package/mcp-wrapper.sh +12 -0
- package/package.json +2 -2
- package/scripts/create-env.js +6 -1
- package/scripts/reset-mcp-servers.js +246 -0
- package/scripts/update-version.js +31 -0
- package/src/agents/README.md +192 -0
- package/src/agents/base-agent.ts +251 -0
- package/src/agents/coordinator.ts +971 -0
- package/src/agents/index.ts +18 -0
- package/src/agents/queen-403-handler.ts +230 -0
- package/src/agents/queen-agent.ts +1399 -0
- package/src/agents/script-writer-agent.ts +769 -0
- package/src/agents/security-agent.ts +726 -0
- package/src/agents/widget-creator-agent.ts +568 -0
- package/src/api/error-handling.ts +1758 -0
- package/src/api/natural-language-mapper.ts +630 -0
- package/src/api/performance-optimizer.ts +891 -0
- package/src/api/transaction-manager.ts +754 -0
- package/src/cli/deploy-artifact.ts +304 -0
- package/src/cli/snow-flow-cli-integration.ts +434 -0
- package/src/cli.ts +4455 -0
- package/src/cli.ts.bak +5616 -0
- package/src/compliance/advanced-compliance-system.ts +1268 -0
- package/src/compliance/index.ts +19 -0
- package/src/config/snow-flow-config.ts +1019 -0
- package/src/documentation/index.ts +16 -0
- package/src/documentation/self-documenting-system.ts +1421 -0
- package/src/dynamic-version.ts +44 -0
- package/src/healing/index.ts +20 -0
- package/src/healing/self-healing-system.ts +1435 -0
- package/src/health/README.md +161 -0
- package/src/health/system-health.ts +995 -0
- package/src/index.ts +60 -0
- package/src/intelligence/acl-analyzer.ts +377 -0
- package/src/intelligence/auto-resolution-engine.ts +643 -0
- package/src/intelligence/gap-analysis-engine.ts +488 -0
- package/src/intelligence/manual-instructions-generator.ts +744 -0
- package/src/intelligence/mcp-coverage-analyzer.ts +708 -0
- package/src/intelligence/multi-pass-requirements-analyzer.ts +603 -0
- package/src/intelligence/performance-recommendations-engine.ts +1223 -0
- package/src/intelligence/requirements-analyzer.ts +1148 -0
- package/src/intelligence/task-analyzer.ts +628 -0
- package/src/managers/scope-manager.ts +555 -0
- package/src/mcp/advanced/servicenow-advanced-features-mcp.ts +16110 -0
- package/src/mcp/base-mcp-server.ts +660 -0
- package/src/mcp/http-transport-wrapper.ts +426 -0
- package/src/mcp/service-discovery-client.ts +312 -0
- package/src/mcp/servicenow-automation-mcp-refactored.ts +678 -0
- package/src/mcp/servicenow-automation-mcp.ts +838 -0
- package/src/mcp/servicenow-deployment-mcp-refactored.ts +1292 -0
- package/src/mcp/servicenow-deployment-mcp.ts +7244 -0
- package/src/mcp/servicenow-graph-memory-mcp-refactored.ts +721 -0
- package/src/mcp/servicenow-graph-memory-mcp.ts +832 -0
- package/src/mcp/servicenow-integration-mcp-refactored.ts +655 -0
- package/src/mcp/servicenow-integration-mcp.ts +819 -0
- package/src/mcp/servicenow-intelligent-mcp-refactored.ts +977 -0
- package/src/mcp/servicenow-intelligent-mcp.ts +4638 -0
- package/src/mcp/servicenow-mcp-server.ts +728 -0
- package/src/mcp/servicenow-memory-mcp.ts +474 -0
- package/src/mcp/servicenow-operations-mcp-refactored.ts +1995 -0
- package/src/mcp/servicenow-operations-mcp.ts +3384 -0
- package/src/mcp/servicenow-platform-development-mcp-refactored.ts +611 -0
- package/src/mcp/servicenow-platform-development-mcp.ts +970 -0
- package/src/mcp/servicenow-progressive-indexer.ts +370 -0
- package/src/mcp/servicenow-reporting-analytics-mcp-refactored.ts +695 -0
- package/src/mcp/servicenow-reporting-analytics-mcp.ts +1123 -0
- package/src/mcp/servicenow-security-compliance-mcp-refactored.ts +642 -0
- package/src/mcp/servicenow-security-compliance-mcp.ts +1157 -0
- package/src/mcp/servicenow-update-set-mcp-refactored.ts +751 -0
- package/src/mcp/servicenow-update-set-mcp.ts +811 -0
- package/src/mcp/shared/agent-context-provider.ts +365 -0
- package/src/mcp/shared/base-mcp-server.ts +2463 -0
- package/src/mcp/shared/mcp-memory-manager.ts +540 -0
- package/src/mcp/shared/mcp-resource-manager.ts +367 -0
- package/src/mcp/snow-flow-mcp.ts +911 -0
- package/src/mcp/start-all-mcp-servers.ts +102 -0
- package/src/mcp/start-servicenow-mcp.ts +67 -0
- package/src/monitoring/enhanced-monitoring-system.ts +1345 -0
- package/src/monitoring/performance-tracker.ts +777 -0
- package/src/optimization/cost-optimization-engine.ts +1125 -0
- package/src/optimization/index.ts +10 -0
- package/src/queen/README.md +403 -0
- package/src/queen/agent-factory.ts +574 -0
- package/src/queen/index.ts +94 -0
- package/src/queen/mcp-execution-bridge.ts +681 -0
- package/src/queen/neural-learning.ts +319 -0
- package/src/queen/parallel-agent-engine.ts +848 -0
- package/src/queen/queen-memory-system.ts +490 -0
- package/src/queen/queen-memory.ts +456 -0
- package/src/queen/servicenow-queen.ts +1029 -0
- package/src/queen/types.ts +87 -0
- package/src/rollback/smart-rollback-system.ts +866 -0
- package/src/schemas/deployment.schema.json +58 -0
- package/src/schemas/flow.schema.json +79 -0
- package/src/schemas/widget.schema.json +72 -0
- package/src/snow-flow-system.ts +541 -0
- package/src/sparc/sparc-help.ts +49 -0
- package/src/sparc/team-sparc.ts +88 -0
- package/src/strategies/global-scope-strategy.ts +736 -0
- package/src/templates/base/application.template.json +45 -0
- package/src/templates/base/business_rule.template.json +33 -0
- package/src/templates/base/script_include.template.json +18 -0
- package/src/templates/base/table.template.json +64 -0
- package/src/templates/base/widget.template.json +25 -0
- package/src/templates/patterns/composite.incident-management.template.json +140 -0
- package/src/templates/patterns/widget.dashboard.template.json +238 -0
- package/src/templates/patterns/widget.datatable.template.json +292 -0
- package/src/testing/integration-test-suite.ts +1276 -0
- package/src/types/index.ts +183 -0
- package/src/types/neo4j-driver.d.ts +23 -0
- package/src/types/servicenow.types.ts +307 -0
- package/src/types/snow-flow.types.ts +186 -0
- package/src/types/todo.types.ts +70 -0
- package/src/utils/action-type-cache.ts +286 -0
- package/src/utils/agent-detector.ts +573 -0
- package/src/utils/artifact-tracker.ts +379 -0
- package/src/utils/dependency-detector.ts +233 -0
- package/src/utils/deployment-metadata-handler.ts +518 -0
- package/src/utils/error-recovery.ts +680 -0
- package/src/utils/logger.ts +60 -0
- package/src/utils/mcp-auth-middleware.ts +262 -0
- package/src/utils/mcp-config-manager.ts +270 -0
- package/src/utils/mcp-server-manager.ts +446 -0
- package/src/utils/mcp-tool-registry.ts +298 -0
- package/src/utils/migrate-snow-flow.ts +98 -0
- package/src/utils/oauth-html-templates.ts +188 -0
- package/src/utils/scope-utils.ts +443 -0
- package/src/utils/servicenow-client.ts +3321 -0
- package/src/utils/servicenow-id-generator.ts +181 -0
- package/src/utils/snow-memory-manager.ts +605 -0
- package/src/utils/snow-oauth.ts +797 -0
- package/src/utils/template-engine.ts +463 -0
- package/src/utils/theme-manager.ts +295 -0
- package/src/utils/unified-auth-store.ts +222 -0
- package/src/utils/update-set-importer.ts +422 -0
- package/src/utils/update-set-xml-packager.ts +371 -0
- package/src/utils/widget-template-generator.ts +1744 -0
- package/src/version.ts +1950 -0
- package/.claude/commands/memory/README.md +0 -9
- package/dist/agents/app-creator.agent.d.ts.map +0 -1
- package/dist/agents/app-creator.agent.js.map +0 -1
- package/dist/agents/base/base-snow-agent.d.ts.map +0 -1
- package/dist/agents/base/base-snow-agent.js.map +0 -1
- package/dist/agents/base-agent.d.ts.map +0 -1
- package/dist/agents/base-agent.js.map +0 -1
- package/dist/agents/base-snow-agent.d.ts.map +0 -1
- package/dist/agents/base-snow-agent.js.map +0 -1
- package/dist/agents/coordinator.d.ts.map +0 -1
- package/dist/agents/coordinator.js.map +0 -1
- package/dist/agents/flow-builder-agent.d.ts.map +0 -1
- package/dist/agents/flow-builder-agent.js.map +0 -1
- package/dist/agents/index.d.ts.map +0 -1
- package/dist/agents/index.js.map +0 -1
- package/dist/agents/queen-403-handler.d.ts.map +0 -1
- package/dist/agents/queen-403-handler.js.map +0 -1
- package/dist/agents/queen-agent-example.d.ts.map +0 -1
- package/dist/agents/queen-agent-example.js.map +0 -1
- package/dist/agents/queen-agent.d.ts.map +0 -1
- package/dist/agents/queen-agent.js.map +0 -1
- package/dist/agents/queen-agent.test.d.ts.map +0 -1
- package/dist/agents/queen-agent.test.js.map +0 -1
- package/dist/agents/script-generator.agent.d.ts.map +0 -1
- package/dist/agents/script-generator.agent.js.map +0 -1
- package/dist/agents/script-writer-agent.d.ts.map +0 -1
- package/dist/agents/script-writer-agent.js.map +0 -1
- package/dist/agents/security-agent.d.ts.map +0 -1
- package/dist/agents/security-agent.js.map +0 -1
- package/dist/agents/specialists/automation-specialist.agent.d.ts.map +0 -1
- package/dist/agents/specialists/automation-specialist.agent.js.map +0 -1
- package/dist/agents/specialists/data-specialist.agent.d.ts.map +0 -1
- package/dist/agents/specialists/data-specialist.agent.js.map +0 -1
- package/dist/agents/specialists/integration-specialist.agent.d.ts.map +0 -1
- package/dist/agents/specialists/integration-specialist.agent.js.map +0 -1
- package/dist/agents/specialists/reporting-specialist.agent.d.ts.map +0 -1
- package/dist/agents/specialists/reporting-specialist.agent.js.map +0 -1
- package/dist/agents/specialists/security-specialist.agent.d.ts.map +0 -1
- package/dist/agents/specialists/security-specialist.agent.js.map +0 -1
- package/dist/agents/teams/adaptive/adaptive-coordinator.agent.d.ts.map +0 -1
- package/dist/agents/teams/adaptive/adaptive-coordinator.agent.js.map +0 -1
- package/dist/agents/teams/base-team.d.ts.map +0 -1
- package/dist/agents/teams/base-team.js.map +0 -1
- package/dist/agents/teams/team-types.d.ts.map +0 -1
- package/dist/agents/teams/team-types.js.map +0 -1
- package/dist/agents/teams/widget/widget-architect.agent.d.ts.map +0 -1
- package/dist/agents/teams/widget/widget-architect.agent.js.map +0 -1
- package/dist/agents/teams/widget/widget-backend.agent.d.ts.map +0 -1
- package/dist/agents/teams/widget/widget-backend.agent.js.map +0 -1
- package/dist/agents/teams/widget/widget-frontend.agent.d.ts.map +0 -1
- package/dist/agents/teams/widget/widget-frontend.agent.js.map +0 -1
- package/dist/agents/teams/widget/widget-platform.agent.d.ts.map +0 -1
- package/dist/agents/teams/widget/widget-platform.agent.js.map +0 -1
- package/dist/agents/teams/widget/widget-uiux.agent.d.ts.map +0 -1
- package/dist/agents/teams/widget/widget-uiux.agent.js.map +0 -1
- package/dist/agents/test-agent.d.ts.map +0 -1
- package/dist/agents/test-agent.js.map +0 -1
- package/dist/agents/test-agents.d.ts.map +0 -1
- package/dist/agents/test-agents.js.map +0 -1
- package/dist/agents/ui-builder.agent.d.ts.map +0 -1
- package/dist/agents/ui-builder.agent.js.map +0 -1
- package/dist/agents/widget-builder.agent.d.ts.map +0 -1
- package/dist/agents/widget-builder.agent.js.map +0 -1
- package/dist/agents/widget-creator-agent.d.ts.map +0 -1
- package/dist/agents/widget-creator-agent.js.map +0 -1
- package/dist/agents/workflow-designer.agent.d.ts.map +0 -1
- package/dist/agents/workflow-designer.agent.js.map +0 -1
- package/dist/api/error-handling.d.ts.map +0 -1
- package/dist/api/error-handling.js.map +0 -1
- package/dist/api/flow-designer-api.d.ts.map +0 -1
- package/dist/api/flow-designer-api.js.map +0 -1
- package/dist/api/natural-language-mapper.d.ts.map +0 -1
- package/dist/api/natural-language-mapper.js.map +0 -1
- package/dist/api/performance-optimizer.d.ts.map +0 -1
- package/dist/api/performance-optimizer.js.map +0 -1
- package/dist/api/transaction-manager.d.ts.map +0 -1
- package/dist/api/transaction-manager.js.map +0 -1
- package/dist/assembly/team-assembler.d.ts.map +0 -1
- package/dist/assembly/team-assembler.js.map +0 -1
- package/dist/cli/deploy-artifact.d.ts.map +0 -1
- package/dist/cli/deploy-artifact.js.map +0 -1
- package/dist/cli/snow-flow-cli-integration.d.ts.map +0 -1
- package/dist/cli/snow-flow-cli-integration.js.map +0 -1
- package/dist/cli.d.ts.map +0 -1
- package/dist/cli.js.map +0 -1
- package/dist/compliance/advanced-compliance-system.d.ts.map +0 -1
- package/dist/compliance/advanced-compliance-system.js.map +0 -1
- package/dist/compliance/index.d.ts.map +0 -1
- package/dist/compliance/index.js.map +0 -1
- package/dist/config/snow-flow-config.d.ts.map +0 -1
- package/dist/config/snow-flow-config.js.map +0 -1
- package/dist/documentation/index.d.ts.map +0 -1
- package/dist/documentation/index.js.map +0 -1
- package/dist/documentation/self-documenting-system.d.ts.map +0 -1
- package/dist/documentation/self-documenting-system.js.map +0 -1
- package/dist/dynamic-version.d.ts.map +0 -1
- package/dist/dynamic-version.js.map +0 -1
- package/dist/healing/index.d.ts.map +0 -1
- package/dist/healing/index.js.map +0 -1
- package/dist/healing/self-healing-system.d.ts.map +0 -1
- package/dist/healing/self-healing-system.js.map +0 -1
- package/dist/health/system-health.d.ts.map +0 -1
- package/dist/health/system-health.js.map +0 -1
- package/dist/index.d.ts.map +0 -1
- package/dist/index.js.map +0 -1
- package/dist/intelligence/acl-analyzer.d.ts.map +0 -1
- package/dist/intelligence/acl-analyzer.js.map +0 -1
- package/dist/intelligence/auto-resolution-engine.d.ts.map +0 -1
- package/dist/intelligence/auto-resolution-engine.js.map +0 -1
- package/dist/intelligence/gap-analysis-engine.d.ts.map +0 -1
- package/dist/intelligence/gap-analysis-engine.js.map +0 -1
- package/dist/intelligence/manual-instructions-generator.d.ts.map +0 -1
- package/dist/intelligence/manual-instructions-generator.js.map +0 -1
- package/dist/intelligence/mcp-coverage-analyzer.d.ts.map +0 -1
- package/dist/intelligence/mcp-coverage-analyzer.js.map +0 -1
- package/dist/intelligence/multi-pass-requirements-analyzer.d.ts.map +0 -1
- package/dist/intelligence/multi-pass-requirements-analyzer.js.map +0 -1
- package/dist/intelligence/performance-recommendations-engine.d.ts.map +0 -1
- package/dist/intelligence/performance-recommendations-engine.js.map +0 -1
- package/dist/intelligence/requirements-analyzer.d.ts.map +0 -1
- package/dist/intelligence/requirements-analyzer.js.map +0 -1
- package/dist/intelligence/task-analyzer.d.ts.map +0 -1
- package/dist/intelligence/task-analyzer.js.map +0 -1
- package/dist/managers/scope-manager.d.ts.map +0 -1
- package/dist/managers/scope-manager.js.map +0 -1
- package/dist/mcp/advanced/servicenow-advanced-features-mcp.d.ts.map +0 -1
- package/dist/mcp/advanced/servicenow-advanced-features-mcp.js.map +0 -1
- package/dist/mcp/base-mcp-server.d.ts.map +0 -1
- package/dist/mcp/base-mcp-server.js.map +0 -1
- package/dist/mcp/example-refactored-server.d.ts.map +0 -1
- package/dist/mcp/example-refactored-server.js.map +0 -1
- package/dist/mcp/http-transport-wrapper.d.ts.map +0 -1
- package/dist/mcp/http-transport-wrapper.js.map +0 -1
- package/dist/mcp/mcp-wrapper.d.ts.map +0 -1
- package/dist/mcp/mcp-wrapper.js.map +0 -1
- package/dist/mcp/service-discovery-client.d.ts.map +0 -1
- package/dist/mcp/service-discovery-client.js.map +0 -1
- package/dist/mcp/servicenow-automation-mcp-refactored.d.ts.map +0 -1
- package/dist/mcp/servicenow-automation-mcp-refactored.js.map +0 -1
- package/dist/mcp/servicenow-automation-mcp.d.ts.map +0 -1
- package/dist/mcp/servicenow-automation-mcp.js.map +0 -1
- package/dist/mcp/servicenow-deployment-mcp-refactored.d.ts.map +0 -1
- package/dist/mcp/servicenow-deployment-mcp-refactored.js.map +0 -1
- package/dist/mcp/servicenow-deployment-mcp.d.ts.map +0 -1
- package/dist/mcp/servicenow-deployment-mcp.js.map +0 -1
- package/dist/mcp/servicenow-flow-composer-mcp-refactored.d.ts.map +0 -1
- package/dist/mcp/servicenow-flow-composer-mcp-refactored.js.map +0 -1
- package/dist/mcp/servicenow-flow-composer-mcp.d.ts.map +0 -1
- package/dist/mcp/servicenow-flow-composer-mcp.js.map +0 -1
- package/dist/mcp/servicenow-graph-memory-mcp-refactored.d.ts.map +0 -1
- package/dist/mcp/servicenow-graph-memory-mcp-refactored.js.map +0 -1
- package/dist/mcp/servicenow-graph-memory-mcp.d.ts.map +0 -1
- package/dist/mcp/servicenow-graph-memory-mcp.js.map +0 -1
- package/dist/mcp/servicenow-integration-mcp-refactored.d.ts.map +0 -1
- package/dist/mcp/servicenow-integration-mcp-refactored.js.map +0 -1
- package/dist/mcp/servicenow-integration-mcp.d.ts.map +0 -1
- package/dist/mcp/servicenow-integration-mcp.js.map +0 -1
- package/dist/mcp/servicenow-intelligent-mcp-refactored.d.ts.map +0 -1
- package/dist/mcp/servicenow-intelligent-mcp-refactored.js.map +0 -1
- package/dist/mcp/servicenow-intelligent-mcp.d.ts.map +0 -1
- package/dist/mcp/servicenow-intelligent-mcp.js.map +0 -1
- package/dist/mcp/servicenow-mcp-server.d.ts.map +0 -1
- package/dist/mcp/servicenow-mcp-server.js.map +0 -1
- package/dist/mcp/servicenow-memory-mcp.d.ts.map +0 -1
- package/dist/mcp/servicenow-memory-mcp.js.map +0 -1
- package/dist/mcp/servicenow-operations-mcp-refactored.d.ts.map +0 -1
- package/dist/mcp/servicenow-operations-mcp-refactored.js.map +0 -1
- package/dist/mcp/servicenow-operations-mcp.d.ts.map +0 -1
- package/dist/mcp/servicenow-operations-mcp.js.map +0 -1
- package/dist/mcp/servicenow-platform-development-mcp-refactored.d.ts.map +0 -1
- package/dist/mcp/servicenow-platform-development-mcp-refactored.js.map +0 -1
- package/dist/mcp/servicenow-platform-development-mcp.d.ts.map +0 -1
- package/dist/mcp/servicenow-platform-development-mcp.js.map +0 -1
- package/dist/mcp/servicenow-progressive-indexer.d.ts.map +0 -1
- package/dist/mcp/servicenow-progressive-indexer.js.map +0 -1
- package/dist/mcp/servicenow-reporting-analytics-mcp-refactored.d.ts.map +0 -1
- package/dist/mcp/servicenow-reporting-analytics-mcp-refactored.js.map +0 -1
- package/dist/mcp/servicenow-reporting-analytics-mcp.d.ts.map +0 -1
- package/dist/mcp/servicenow-reporting-analytics-mcp.js.map +0 -1
- package/dist/mcp/servicenow-security-compliance-mcp-refactored.d.ts.map +0 -1
- package/dist/mcp/servicenow-security-compliance-mcp-refactored.js.map +0 -1
- package/dist/mcp/servicenow-security-compliance-mcp.d.ts.map +0 -1
- package/dist/mcp/servicenow-security-compliance-mcp.js.map +0 -1
- package/dist/mcp/servicenow-update-set-mcp-refactored.d.ts.map +0 -1
- package/dist/mcp/servicenow-update-set-mcp-refactored.js.map +0 -1
- package/dist/mcp/servicenow-update-set-mcp.d.ts.map +0 -1
- package/dist/mcp/servicenow-update-set-mcp.js.map +0 -1
- package/dist/mcp/servicenow-xml-flow-mcp.d.ts.map +0 -1
- package/dist/mcp/servicenow-xml-flow-mcp.js.map +0 -1
- package/dist/mcp/shared/agent-context-provider.d.ts.map +0 -1
- package/dist/mcp/shared/agent-context-provider.js.map +0 -1
- package/dist/mcp/shared/base-mcp-server.d.ts.map +0 -1
- package/dist/mcp/shared/base-mcp-server.js.map +0 -1
- package/dist/mcp/shared/mcp-memory-manager.d.ts.map +0 -1
- package/dist/mcp/shared/mcp-memory-manager.js.map +0 -1
- package/dist/mcp/shared/mcp-resource-manager.d.ts.map +0 -1
- package/dist/mcp/shared/mcp-resource-manager.js.map +0 -1
- package/dist/mcp/snow-flow-mcp.d.ts.map +0 -1
- package/dist/mcp/snow-flow-mcp.js.map +0 -1
- package/dist/mcp/start-all-mcp-servers.d.ts.map +0 -1
- package/dist/mcp/start-all-mcp-servers.js.map +0 -1
- package/dist/mcp/start-servicenow-mcp.d.ts.map +0 -1
- package/dist/mcp/start-servicenow-mcp.js.map +0 -1
- package/dist/mcp/test-simple-mcp.d.ts.map +0 -1
- package/dist/mcp/test-simple-mcp.js.map +0 -1
- package/dist/memory/hierarchical-memory-system.d.ts +0 -90
- package/dist/memory/hierarchical-memory-system.d.ts.map +0 -1
- package/dist/memory/hierarchical-memory-system.js +0 -400
- package/dist/memory/hierarchical-memory-system.js.map +0 -1
- package/dist/memory/index.d.ts +0 -9
- package/dist/memory/index.d.ts.map +0 -1
- package/dist/memory/index.js +0 -20
- package/dist/memory/index.js.map +0 -1
- package/dist/memory/mcp-integration-example.d.ts +0 -6
- package/dist/memory/mcp-integration-example.d.ts.map +0 -1
- package/dist/memory/mcp-integration-example.js +0 -281
- package/dist/memory/mcp-integration-example.js.map +0 -1
- package/dist/memory/memory-client.d.ts +0 -199
- package/dist/memory/memory-client.d.ts.map +0 -1
- package/dist/memory/memory-client.js +0 -364
- package/dist/memory/memory-client.js.map +0 -1
- package/dist/memory/memory-manager.d.ts +0 -29
- package/dist/memory/memory-manager.d.ts.map +0 -1
- package/dist/memory/memory-manager.js +0 -280
- package/dist/memory/memory-manager.js.map +0 -1
- package/dist/memory/memory-operations.d.ts +0 -179
- package/dist/memory/memory-operations.d.ts.map +0 -1
- package/dist/memory/memory-operations.js +0 -691
- package/dist/memory/memory-operations.js.map +0 -1
- package/dist/memory/memory-system.d.ts +0 -152
- package/dist/memory/memory-system.d.ts.map +0 -1
- package/dist/memory/memory-system.js +0 -632
- package/dist/memory/memory-system.js.map +0 -1
- package/dist/memory/memory-test.d.ts +0 -6
- package/dist/memory/memory-test.d.ts.map +0 -1
- package/dist/memory/memory-test.js +0 -161
- package/dist/memory/memory-test.js.map +0 -1
- package/dist/memory/servicenow-artifact-indexer.d.ts +0 -119
- package/dist/memory/servicenow-artifact-indexer.d.ts.map +0 -1
- package/dist/memory/servicenow-artifact-indexer.js +0 -560
- package/dist/memory/servicenow-artifact-indexer.js.map +0 -1
- package/dist/memory/snow-flow-memory-patterns.d.ts +0 -213
- package/dist/memory/snow-flow-memory-patterns.d.ts.map +0 -1
- package/dist/memory/snow-flow-memory-patterns.js +0 -200
- package/dist/memory/snow-flow-memory-patterns.js.map +0 -1
- package/dist/memory/snow-memory.d.ts +0 -54
- package/dist/memory/snow-memory.d.ts.map +0 -1
- package/dist/memory/snow-memory.js +0 -301
- package/dist/memory/snow-memory.js.map +0 -1
- package/dist/memory/swarm-memory.d.ts +0 -135
- package/dist/memory/swarm-memory.d.ts.map +0 -1
- package/dist/memory/swarm-memory.js +0 -378
- package/dist/memory/swarm-memory.js.map +0 -1
- package/dist/monitoring/enhanced-monitoring-system.d.ts.map +0 -1
- package/dist/monitoring/enhanced-monitoring-system.js.map +0 -1
- package/dist/monitoring/performance-tracker.d.ts.map +0 -1
- package/dist/monitoring/performance-tracker.js.map +0 -1
- package/dist/optimization/cost-optimization-engine.d.ts.map +0 -1
- package/dist/optimization/cost-optimization-engine.js.map +0 -1
- package/dist/optimization/index.d.ts.map +0 -1
- package/dist/optimization/index.js.map +0 -1
- package/dist/orchestration/discovery/service-discovery.d.ts.map +0 -1
- package/dist/orchestration/discovery/service-discovery.js.map +0 -1
- package/dist/orchestration/distributed-orchestrator.d.ts.map +0 -1
- package/dist/orchestration/distributed-orchestrator.js.map +0 -1
- package/dist/orchestration/distribution/task-distribution-engine.d.ts.map +0 -1
- package/dist/orchestration/distribution/task-distribution-engine.js.map +0 -1
- package/dist/orchestration/interfaces/distributed-orchestration.interface.d.ts.map +0 -1
- package/dist/orchestration/interfaces/distributed-orchestration.interface.js.map +0 -1
- package/dist/orchestration/protocols/mcpx-protocol.d.ts.map +0 -1
- package/dist/orchestration/protocols/mcpx-protocol.js.map +0 -1
- package/dist/orchestration/state/distributed-state-manager.d.ts.map +0 -1
- package/dist/orchestration/state/distributed-state-manager.js.map +0 -1
- package/dist/orchestrator/flow-composer.d.ts.map +0 -1
- package/dist/orchestrator/flow-composer.js.map +0 -1
- package/dist/orchestrator/flow-pattern-templates.d.ts.map +0 -1
- package/dist/orchestrator/flow-pattern-templates.js.map +0 -1
- package/dist/orchestrator/flow-subflow-decision-engine.d.ts.map +0 -1
- package/dist/orchestrator/flow-subflow-decision-engine.js.map +0 -1
- package/dist/orchestrator/flow-validation-engine.d.ts.map +0 -1
- package/dist/orchestrator/flow-validation-engine.js.map +0 -1
- package/dist/orchestrator/snow-orchestrator.d.ts.map +0 -1
- package/dist/orchestrator/snow-orchestrator.js.map +0 -1
- package/dist/orchestrator/subflow-creation-handler.d.ts.map +0 -1
- package/dist/orchestrator/subflow-creation-handler.js.map +0 -1
- package/dist/patterns/adaptive-patterns.d.ts.map +0 -1
- package/dist/patterns/adaptive-patterns.js.map +0 -1
- package/dist/queen/advanced-integration-test.d.ts.map +0 -1
- package/dist/queen/advanced-integration-test.js.map +0 -1
- package/dist/queen/agent-factory.d.ts.map +0 -1
- package/dist/queen/agent-factory.js.map +0 -1
- package/dist/queen/index.d.ts.map +0 -1
- package/dist/queen/index.js.map +0 -1
- package/dist/queen/integration-example.d.ts.map +0 -1
- package/dist/queen/integration-example.js.map +0 -1
- package/dist/queen/integration-test.d.ts.map +0 -1
- package/dist/queen/integration-test.js.map +0 -1
- package/dist/queen/mcp-execution-bridge.d.ts.map +0 -1
- package/dist/queen/mcp-execution-bridge.js.map +0 -1
- package/dist/queen/mock-mcp-client.d.ts.map +0 -1
- package/dist/queen/mock-mcp-client.js.map +0 -1
- package/dist/queen/neural-learning.d.ts.map +0 -1
- package/dist/queen/neural-learning.js.map +0 -1
- package/dist/queen/parallel-agent-engine.d.ts.map +0 -1
- package/dist/queen/parallel-agent-engine.js.map +0 -1
- package/dist/queen/queen-memory-system.d.ts.map +0 -1
- package/dist/queen/queen-memory-system.js.map +0 -1
- package/dist/queen/queen-memory.d.ts.map +0 -1
- package/dist/queen/queen-memory.js.map +0 -1
- package/dist/queen/run-integration-tests.d.ts.map +0 -1
- package/dist/queen/run-integration-tests.js.map +0 -1
- package/dist/queen/servicenow-queen.d.ts.map +0 -1
- package/dist/queen/servicenow-queen.js.map +0 -1
- package/dist/queen/types.d.ts.map +0 -1
- package/dist/queen/types.js.map +0 -1
- package/dist/rollback/smart-rollback-system.d.ts.map +0 -1
- package/dist/rollback/smart-rollback-system.js.map +0 -1
- package/dist/snow-flow-system.d.ts.map +0 -1
- package/dist/snow-flow-system.js.map +0 -1
- package/dist/sparc/coordinators/adaptive-coordinator.d.ts.map +0 -1
- package/dist/sparc/coordinators/adaptive-coordinator.js.map +0 -1
- package/dist/sparc/coordinators/team-coordinator.d.ts.map +0 -1
- package/dist/sparc/coordinators/team-coordinator.js.map +0 -1
- package/dist/sparc/modes/team-modes.d.ts.map +0 -1
- package/dist/sparc/modes/team-modes.js.map +0 -1
- package/dist/sparc/sparc-help.d.ts.map +0 -1
- package/dist/sparc/sparc-help.js.map +0 -1
- package/dist/sparc/team-sparc.d.ts.map +0 -1
- package/dist/sparc/team-sparc.js.map +0 -1
- package/dist/sparc/teams/application-team.d.ts.map +0 -1
- package/dist/sparc/teams/application-team.js.map +0 -1
- package/dist/sparc/teams/flow-team.d.ts.map +0 -1
- package/dist/sparc/teams/flow-team.js.map +0 -1
- package/dist/sparc/teams/widget-team.d.ts.map +0 -1
- package/dist/sparc/teams/widget-team.js.map +0 -1
- package/dist/specialists/app-specialists.d.ts.map +0 -1
- package/dist/specialists/app-specialists.js.map +0 -1
- package/dist/specialists/base-specialist.d.ts.map +0 -1
- package/dist/specialists/base-specialist.js.map +0 -1
- package/dist/specialists/flow-specialists.d.ts.map +0 -1
- package/dist/specialists/flow-specialists.js.map +0 -1
- package/dist/specialists/individual-specialists.d.ts.map +0 -1
- package/dist/specialists/individual-specialists.js.map +0 -1
- package/dist/specialists/widget-specialists.d.ts.map +0 -1
- package/dist/specialists/widget-specialists.js.map +0 -1
- package/dist/strategies/global-scope-strategy.d.ts.map +0 -1
- package/dist/strategies/global-scope-strategy.js.map +0 -1
- package/dist/teams/adaptive-team.d.ts.map +0 -1
- package/dist/teams/adaptive-team.js.map +0 -1
- package/dist/teams/application-team.d.ts.map +0 -1
- package/dist/teams/application-team.js.map +0 -1
- package/dist/teams/base-team.d.ts.map +0 -1
- package/dist/teams/base-team.js.map +0 -1
- package/dist/teams/flow-team.d.ts.map +0 -1
- package/dist/teams/flow-team.js.map +0 -1
- package/dist/teams/widget-team.d.ts.map +0 -1
- package/dist/teams/widget-team.js.map +0 -1
- package/dist/testing/integration-test-suite.d.ts.map +0 -1
- package/dist/testing/integration-test-suite.js.map +0 -1
- package/dist/types/index.d.ts.map +0 -1
- package/dist/types/index.js.map +0 -1
- package/dist/types/servicenow.types.d.ts.map +0 -1
- package/dist/types/servicenow.types.js.map +0 -1
- package/dist/types/snow-flow.types.d.ts.map +0 -1
- package/dist/types/snow-flow.types.js.map +0 -1
- package/dist/types/todo.types.d.ts.map +0 -1
- package/dist/types/todo.types.js.map +0 -1
- package/dist/utils/action-type-cache.d.ts.map +0 -1
- package/dist/utils/action-type-cache.js.map +0 -1
- package/dist/utils/agent-detector.d.ts.map +0 -1
- package/dist/utils/agent-detector.js.map +0 -1
- package/dist/utils/artifact-tracker.d.ts.map +0 -1
- package/dist/utils/artifact-tracker.js.map +0 -1
- package/dist/utils/dependency-detector.d.ts.map +0 -1
- package/dist/utils/dependency-detector.js.map +0 -1
- package/dist/utils/deployment-metadata-handler.d.ts.map +0 -1
- package/dist/utils/deployment-metadata-handler.js.map +0 -1
- package/dist/utils/error-recovery.d.ts.map +0 -1
- package/dist/utils/error-recovery.js.map +0 -1
- package/dist/utils/flow-api-discovery.d.ts.map +0 -1
- package/dist/utils/flow-api-discovery.js.map +0 -1
- package/dist/utils/flow-xml-generator.d.ts.map +0 -1
- package/dist/utils/flow-xml-generator.js.map +0 -1
- package/dist/utils/logger.d.ts.map +0 -1
- package/dist/utils/logger.js.map +0 -1
- package/dist/utils/mcp-auth-middleware.d.ts.map +0 -1
- package/dist/utils/mcp-auth-middleware.js.map +0 -1
- package/dist/utils/mcp-config-manager.d.ts.map +0 -1
- package/dist/utils/mcp-config-manager.js.map +0 -1
- package/dist/utils/mcp-server-manager.d.ts.map +0 -1
- package/dist/utils/mcp-server-manager.js.map +0 -1
- package/dist/utils/mcp-tool-registry.d.ts.map +0 -1
- package/dist/utils/mcp-tool-registry.js.map +0 -1
- package/dist/utils/migrate-claude-flow.d.ts.map +0 -1
- package/dist/utils/migrate-claude-flow.js.map +0 -1
- package/dist/utils/migrate-snow-flow.d.ts.map +0 -1
- package/dist/utils/migrate-snow-flow.js.map +0 -1
- package/dist/utils/oauth-html-templates.d.ts.map +0 -1
- package/dist/utils/oauth-html-templates.js.map +0 -1
- package/dist/utils/scope-utils.d.ts.map +0 -1
- package/dist/utils/scope-utils.js.map +0 -1
- package/dist/utils/servicenow-client.d.ts.map +0 -1
- package/dist/utils/servicenow-client.js.map +0 -1
- package/dist/utils/servicenow-id-generator.d.ts.map +0 -1
- package/dist/utils/servicenow-id-generator.js.map +0 -1
- package/dist/utils/snow-memory-manager.d.ts.map +0 -1
- package/dist/utils/snow-memory-manager.js.map +0 -1
- package/dist/utils/snow-oauth-old.d.ts.map +0 -1
- package/dist/utils/snow-oauth-old.js.map +0 -1
- package/dist/utils/snow-oauth.d.ts.map +0 -1
- package/dist/utils/snow-oauth.js.map +0 -1
- package/dist/utils/template-engine.d.ts.map +0 -1
- package/dist/utils/template-engine.js.map +0 -1
- package/dist/utils/theme-manager.d.ts.map +0 -1
- package/dist/utils/theme-manager.js.map +0 -1
- package/dist/utils/unified-auth-store.d.ts.map +0 -1
- package/dist/utils/unified-auth-store.js.map +0 -1
- package/dist/utils/update-set-importer.d.ts.map +0 -1
- package/dist/utils/update-set-importer.js.map +0 -1
- package/dist/utils/update-set-xml-packager.d.ts.map +0 -1
- package/dist/utils/update-set-xml-packager.js.map +0 -1
- package/dist/utils/widget-template-generator.d.ts.map +0 -1
- package/dist/utils/widget-template-generator.js.map +0 -1
- package/dist/version.d.ts.map +0 -1
- package/dist/version.js.map +0 -1
- package/memory/agents/README.md +0 -31
- package/memory/claude-flow-data.json +0 -5
- package/memory/servicenow_artifacts/000d9224c895221055906c7518aa2d3d.json +0 -30
- package/memory/servicenow_artifacts/0196b66173303010e46b4a2214f6a7a2.json +0 -36
- package/memory/servicenow_artifacts/125e5d1d837e2a102a7ea130ceaad397.json +0 -30
- package/memory/servicenow_artifacts/7637c1f2b7112210a5e5911cde11a972.json +0 -30
- package/memory/servicenow_artifacts/default_documentation_tables_1754056582292.json +0 -55
- package/memory/servicenow_artifacts/default_documentation_tables_1754057477189.json +0 -55
- package/memory/sessions/README.md +0 -32
- package/memory/update-set-sessions/01f82af583faea102a7ea130ceaad3d4.json +0 -9
- package/memory/update-set-sessions/27718fb983faea102a7ea130ceaad34b.json +0 -9
- package/memory/update-set-sessions/412e9bf6833e22502a7ea130ceaad30a.json +0 -8
- package/memory/update-set-sessions/66fc5a79837aea102a7ea130ceaad3ab.json +0 -9
- package/memory/update-set-sessions/71a30ff5837eea102a7ea130ceaad37f.json +0 -9
- package/memory/update-set-sessions/74fba27983faea102a7ea130ceaad3bd.json +0 -9
- package/memory/update-set-sessions/a0b147b5837eea102a7ea130ceaad344.json +0 -58
- package/memory/update-set-sessions/b13f5eb983baea102a7ea130ceaad33e.json +0 -9
|
@@ -0,0 +1,995 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Snow-Flow System Health Monitoring
|
|
3
|
+
* Comprehensive health checks for all components
|
|
4
|
+
*/
|
|
5
|
+
|
|
6
|
+
import { EventEmitter } from 'events';
|
|
7
|
+
import { MemorySystem } from '../memory/memory-system';
|
|
8
|
+
import { MCPServerManager } from '../utils/mcp-server-manager';
|
|
9
|
+
import { ServiceNowClient } from '../utils/servicenow-client';
|
|
10
|
+
import { Logger } from '../utils/logger';
|
|
11
|
+
import os from 'os';
|
|
12
|
+
import fs from 'fs';
|
|
13
|
+
import { execSync } from 'child_process';
|
|
14
|
+
|
|
15
|
+
export interface HealthCheckResult {
|
|
16
|
+
component: string;
|
|
17
|
+
status: 'healthy' | 'degraded' | 'unhealthy' | 'unknown';
|
|
18
|
+
message: string;
|
|
19
|
+
details?: Record<string, any>;
|
|
20
|
+
timestamp: Date;
|
|
21
|
+
responseTime?: number;
|
|
22
|
+
error?: string;
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
export interface SystemHealthStatus {
|
|
26
|
+
healthy: boolean;
|
|
27
|
+
status: 'healthy' | 'degraded' | 'unhealthy';
|
|
28
|
+
timestamp: Date;
|
|
29
|
+
components: {
|
|
30
|
+
memory: HealthCheckResult;
|
|
31
|
+
mcp: HealthCheckResult;
|
|
32
|
+
servicenow: HealthCheckResult;
|
|
33
|
+
queen: HealthCheckResult;
|
|
34
|
+
system: HealthCheckResult;
|
|
35
|
+
performance: HealthCheckResult;
|
|
36
|
+
};
|
|
37
|
+
metrics: {
|
|
38
|
+
uptime: number;
|
|
39
|
+
totalChecks: number;
|
|
40
|
+
failedChecks: number;
|
|
41
|
+
avgResponseTime: number;
|
|
42
|
+
systemResources: SystemResources;
|
|
43
|
+
};
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
export interface SystemResources {
|
|
47
|
+
cpuUsage: number;
|
|
48
|
+
memoryUsage: number;
|
|
49
|
+
memoryTotal: number;
|
|
50
|
+
diskUsage: number;
|
|
51
|
+
diskTotal: number;
|
|
52
|
+
loadAverage: number[];
|
|
53
|
+
processCount: number;
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
export interface HealthThresholds {
|
|
57
|
+
responseTime: number;
|
|
58
|
+
memoryUsage: number;
|
|
59
|
+
cpuUsage: number;
|
|
60
|
+
queueSize: number;
|
|
61
|
+
errorRate: number;
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
interface HealthConfig {
|
|
65
|
+
memory: MemorySystem;
|
|
66
|
+
mcpManager: MCPServerManager;
|
|
67
|
+
config: {
|
|
68
|
+
checks: {
|
|
69
|
+
memory: boolean;
|
|
70
|
+
mcp: boolean;
|
|
71
|
+
servicenow: boolean;
|
|
72
|
+
queen: boolean;
|
|
73
|
+
};
|
|
74
|
+
thresholds: HealthThresholds;
|
|
75
|
+
};
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
export class SystemHealth extends EventEmitter {
|
|
79
|
+
private memory: MemorySystem;
|
|
80
|
+
private mcpManager: MCPServerManager;
|
|
81
|
+
private logger: Logger;
|
|
82
|
+
private config: HealthConfig['config'];
|
|
83
|
+
private serviceNowClient?: ServiceNowClient;
|
|
84
|
+
private checkInterval?: NodeJS.Timeout;
|
|
85
|
+
private checkHistory: HealthCheckResult[] = [];
|
|
86
|
+
private startTime: number;
|
|
87
|
+
private totalChecks = 0;
|
|
88
|
+
private failedChecks = 0;
|
|
89
|
+
private lastCPUInfo: any = null;
|
|
90
|
+
private cpuCheckInterval?: NodeJS.Timeout;
|
|
91
|
+
|
|
92
|
+
constructor(options: HealthConfig) {
|
|
93
|
+
super();
|
|
94
|
+
this.memory = options.memory;
|
|
95
|
+
this.mcpManager = options.mcpManager;
|
|
96
|
+
this.config = options.config;
|
|
97
|
+
this.logger = new Logger('SystemHealth');
|
|
98
|
+
this.startTime = Date.now();
|
|
99
|
+
}
|
|
100
|
+
|
|
101
|
+
/**
|
|
102
|
+
* Initialize health monitoring
|
|
103
|
+
*/
|
|
104
|
+
async initialize(): Promise<void> {
|
|
105
|
+
this.logger.info('Initializing System Health monitoring...');
|
|
106
|
+
|
|
107
|
+
// Initialize ServiceNow client for health checks
|
|
108
|
+
try {
|
|
109
|
+
this.serviceNowClient = new ServiceNowClient();
|
|
110
|
+
// Note: ServiceNowClient may not have an initialize method
|
|
111
|
+
// await this.serviceNowClient.initialize();
|
|
112
|
+
} catch (error) {
|
|
113
|
+
this.logger.warn('ServiceNow client initialization failed:', error);
|
|
114
|
+
}
|
|
115
|
+
|
|
116
|
+
// Create health check tables
|
|
117
|
+
await this.createHealthTables();
|
|
118
|
+
|
|
119
|
+
// Perform initial health check
|
|
120
|
+
await this.performHealthCheck();
|
|
121
|
+
|
|
122
|
+
this.logger.info('System Health monitoring initialized');
|
|
123
|
+
}
|
|
124
|
+
|
|
125
|
+
/**
|
|
126
|
+
* Start periodic health monitoring
|
|
127
|
+
*/
|
|
128
|
+
async startMonitoring(intervalMs: number = 60000): Promise<void> {
|
|
129
|
+
if (this.checkInterval) {
|
|
130
|
+
this.logger.warn('Health monitoring already started');
|
|
131
|
+
return;
|
|
132
|
+
}
|
|
133
|
+
|
|
134
|
+
this.logger.info(`Starting health monitoring with ${intervalMs}ms interval`);
|
|
135
|
+
|
|
136
|
+
this.checkInterval = setInterval(async () => {
|
|
137
|
+
try {
|
|
138
|
+
await this.performHealthCheck();
|
|
139
|
+
} catch (error) {
|
|
140
|
+
this.logger.error('Health check failed:', error);
|
|
141
|
+
}
|
|
142
|
+
}, intervalMs);
|
|
143
|
+
|
|
144
|
+
// Perform immediate check
|
|
145
|
+
await this.performHealthCheck();
|
|
146
|
+
}
|
|
147
|
+
|
|
148
|
+
/**
|
|
149
|
+
* Stop health monitoring
|
|
150
|
+
*/
|
|
151
|
+
async stopMonitoring(): Promise<void> {
|
|
152
|
+
if (this.checkInterval) {
|
|
153
|
+
clearInterval(this.checkInterval);
|
|
154
|
+
this.checkInterval = undefined;
|
|
155
|
+
this.logger.info('Health monitoring stopped');
|
|
156
|
+
}
|
|
157
|
+
|
|
158
|
+
if (this.cpuCheckInterval) {
|
|
159
|
+
clearInterval(this.cpuCheckInterval);
|
|
160
|
+
this.cpuCheckInterval = undefined;
|
|
161
|
+
}
|
|
162
|
+
}
|
|
163
|
+
|
|
164
|
+
/**
|
|
165
|
+
* Perform comprehensive health check
|
|
166
|
+
*/
|
|
167
|
+
async performHealthCheck(): Promise<SystemHealthStatus> {
|
|
168
|
+
this.totalChecks++;
|
|
169
|
+
const startTime = Date.now();
|
|
170
|
+
|
|
171
|
+
this.logger.debug('Performing system health check...');
|
|
172
|
+
|
|
173
|
+
// Run all health checks in parallel
|
|
174
|
+
const [memory, mcp, servicenow, queen, system, performance] = await Promise.all([
|
|
175
|
+
this.config.checks.memory ? this.checkMemory() : this.createSkippedResult('memory'),
|
|
176
|
+
this.config.checks.mcp ? this.checkMCP() : this.createSkippedResult('mcp'),
|
|
177
|
+
this.config.checks.servicenow ? this.checkServiceNow() : this.createSkippedResult('servicenow'),
|
|
178
|
+
this.config.checks.queen ? this.checkQueen() : this.createSkippedResult('queen'),
|
|
179
|
+
this.checkSystem(),
|
|
180
|
+
this.checkPerformance()
|
|
181
|
+
]);
|
|
182
|
+
|
|
183
|
+
const components = { memory, mcp, servicenow, queen, system, performance };
|
|
184
|
+
|
|
185
|
+
// Determine overall health status
|
|
186
|
+
const unhealthyCount = Object.values(components).filter(c => c.status === 'unhealthy').length;
|
|
187
|
+
const degradedCount = Object.values(components).filter(c => c.status === 'degraded').length;
|
|
188
|
+
|
|
189
|
+
let overallStatus: 'healthy' | 'degraded' | 'unhealthy';
|
|
190
|
+
if (unhealthyCount > 0) {
|
|
191
|
+
overallStatus = 'unhealthy';
|
|
192
|
+
this.failedChecks++;
|
|
193
|
+
} else if (degradedCount > 0) {
|
|
194
|
+
overallStatus = 'degraded';
|
|
195
|
+
} else {
|
|
196
|
+
overallStatus = 'healthy';
|
|
197
|
+
}
|
|
198
|
+
|
|
199
|
+
const status: SystemHealthStatus = {
|
|
200
|
+
healthy: overallStatus === 'healthy',
|
|
201
|
+
status: overallStatus,
|
|
202
|
+
timestamp: new Date(),
|
|
203
|
+
components,
|
|
204
|
+
metrics: {
|
|
205
|
+
uptime: Date.now() - this.startTime,
|
|
206
|
+
totalChecks: this.totalChecks,
|
|
207
|
+
failedChecks: this.failedChecks,
|
|
208
|
+
avgResponseTime: this.calculateAverageResponseTime(),
|
|
209
|
+
systemResources: await this.getSystemResources()
|
|
210
|
+
}
|
|
211
|
+
};
|
|
212
|
+
|
|
213
|
+
// Store health check result
|
|
214
|
+
await this.storeHealthResult(status);
|
|
215
|
+
|
|
216
|
+
// Emit health status
|
|
217
|
+
this.emit('health:check', status);
|
|
218
|
+
|
|
219
|
+
// Check for alerts
|
|
220
|
+
this.checkAlerts(status);
|
|
221
|
+
|
|
222
|
+
const duration = Date.now() - startTime;
|
|
223
|
+
this.logger.debug(`Health check completed in ${duration}ms - Status: ${overallStatus}`);
|
|
224
|
+
|
|
225
|
+
return status;
|
|
226
|
+
}
|
|
227
|
+
|
|
228
|
+
/**
|
|
229
|
+
* Get full health status
|
|
230
|
+
*/
|
|
231
|
+
async getFullStatus(): Promise<SystemHealthStatus> {
|
|
232
|
+
return this.performHealthCheck();
|
|
233
|
+
}
|
|
234
|
+
|
|
235
|
+
/**
|
|
236
|
+
* Get health history
|
|
237
|
+
*/
|
|
238
|
+
async getHealthHistory(limit: number = 100): Promise<HealthCheckResult[]> {
|
|
239
|
+
return this.memory.query<HealthCheckResult>(`
|
|
240
|
+
SELECT * FROM health_checks
|
|
241
|
+
ORDER BY timestamp DESC
|
|
242
|
+
LIMIT ?
|
|
243
|
+
`, [limit]);
|
|
244
|
+
}
|
|
245
|
+
|
|
246
|
+
/**
|
|
247
|
+
* Check if system is healthy
|
|
248
|
+
*/
|
|
249
|
+
async isHealthy(): Promise<boolean> {
|
|
250
|
+
const status = await this.performHealthCheck();
|
|
251
|
+
return status.healthy;
|
|
252
|
+
}
|
|
253
|
+
|
|
254
|
+
/**
|
|
255
|
+
* Private health check methods
|
|
256
|
+
*/
|
|
257
|
+
private async checkMemory(): Promise<HealthCheckResult> {
|
|
258
|
+
const startTime = Date.now();
|
|
259
|
+
|
|
260
|
+
try {
|
|
261
|
+
// Check if memory system is responsive
|
|
262
|
+
const testKey = `health_check_${Date.now()}`;
|
|
263
|
+
await this.memory.store(testKey, { test: true }, 60000); // 1 minute TTL
|
|
264
|
+
const retrieved = await this.memory.get(testKey);
|
|
265
|
+
await this.memory.delete(testKey);
|
|
266
|
+
|
|
267
|
+
if (!retrieved) {
|
|
268
|
+
throw new Error('Memory store/retrieve test failed');
|
|
269
|
+
}
|
|
270
|
+
|
|
271
|
+
// Check memory database size
|
|
272
|
+
const dbStats = await this.memory.getDatabaseStats();
|
|
273
|
+
const dbSizeMB = dbStats.size / 1024 / 1024;
|
|
274
|
+
|
|
275
|
+
// Check cache performance
|
|
276
|
+
const cacheStats = await this.memory.getCacheStats();
|
|
277
|
+
const cacheHitRate = cacheStats.hits / (cacheStats.hits + cacheStats.misses) || 0;
|
|
278
|
+
|
|
279
|
+
const responseTime = Date.now() - startTime;
|
|
280
|
+
|
|
281
|
+
// Determine status
|
|
282
|
+
let status: 'healthy' | 'degraded' | 'unhealthy' = 'healthy';
|
|
283
|
+
let message = 'Memory system operating normally';
|
|
284
|
+
|
|
285
|
+
if (dbSizeMB > 1000) { // > 1GB
|
|
286
|
+
status = 'degraded';
|
|
287
|
+
message = 'Database size exceeding recommended limits';
|
|
288
|
+
}
|
|
289
|
+
|
|
290
|
+
if (cacheHitRate < 0.5 && cacheStats.hits + cacheStats.misses > 100) {
|
|
291
|
+
status = 'degraded';
|
|
292
|
+
message = 'Low cache hit rate';
|
|
293
|
+
}
|
|
294
|
+
|
|
295
|
+
if (responseTime > this.config.thresholds.responseTime) {
|
|
296
|
+
status = 'unhealthy';
|
|
297
|
+
message = 'Memory system response time too high';
|
|
298
|
+
}
|
|
299
|
+
|
|
300
|
+
return {
|
|
301
|
+
component: 'memory',
|
|
302
|
+
status,
|
|
303
|
+
message,
|
|
304
|
+
details: {
|
|
305
|
+
dbSizeMB,
|
|
306
|
+
cacheHitRate,
|
|
307
|
+
cacheStats,
|
|
308
|
+
responseTime
|
|
309
|
+
},
|
|
310
|
+
timestamp: new Date(),
|
|
311
|
+
responseTime
|
|
312
|
+
};
|
|
313
|
+
|
|
314
|
+
} catch (error) {
|
|
315
|
+
return {
|
|
316
|
+
component: 'memory',
|
|
317
|
+
status: 'unhealthy',
|
|
318
|
+
message: 'Memory system check failed',
|
|
319
|
+
error: (error as Error).message,
|
|
320
|
+
timestamp: new Date(),
|
|
321
|
+
responseTime: Date.now() - startTime
|
|
322
|
+
};
|
|
323
|
+
}
|
|
324
|
+
}
|
|
325
|
+
|
|
326
|
+
private async checkMCP(): Promise<HealthCheckResult> {
|
|
327
|
+
const startTime = Date.now();
|
|
328
|
+
|
|
329
|
+
try {
|
|
330
|
+
const serverStatuses = this.mcpManager.getServerStatus();
|
|
331
|
+
const totalServers = serverStatuses.length;
|
|
332
|
+
const healthyServers = serverStatuses.filter(s => s.status === 'running').length;
|
|
333
|
+
const unhealthyServers = serverStatuses.filter(s => s.status === 'error').length;
|
|
334
|
+
|
|
335
|
+
const responseTime = Date.now() - startTime;
|
|
336
|
+
|
|
337
|
+
let status: 'healthy' | 'degraded' | 'unhealthy' = 'healthy';
|
|
338
|
+
let message = `All ${totalServers} MCP servers running`;
|
|
339
|
+
|
|
340
|
+
if (unhealthyServers > 0) {
|
|
341
|
+
status = unhealthyServers >= totalServers / 2 ? 'unhealthy' : 'degraded';
|
|
342
|
+
message = `${unhealthyServers} of ${totalServers} MCP servers not running`;
|
|
343
|
+
}
|
|
344
|
+
|
|
345
|
+
return {
|
|
346
|
+
component: 'mcp',
|
|
347
|
+
status,
|
|
348
|
+
message,
|
|
349
|
+
details: {
|
|
350
|
+
totalServers,
|
|
351
|
+
healthyServers,
|
|
352
|
+
unhealthyServers,
|
|
353
|
+
serverStatuses
|
|
354
|
+
},
|
|
355
|
+
timestamp: new Date(),
|
|
356
|
+
responseTime
|
|
357
|
+
};
|
|
358
|
+
|
|
359
|
+
} catch (error) {
|
|
360
|
+
return {
|
|
361
|
+
component: 'mcp',
|
|
362
|
+
status: 'unhealthy',
|
|
363
|
+
message: 'MCP server check failed',
|
|
364
|
+
error: (error as Error).message,
|
|
365
|
+
timestamp: new Date(),
|
|
366
|
+
responseTime: Date.now() - startTime
|
|
367
|
+
};
|
|
368
|
+
}
|
|
369
|
+
}
|
|
370
|
+
|
|
371
|
+
private async checkServiceNow(): Promise<HealthCheckResult> {
|
|
372
|
+
const startTime = Date.now();
|
|
373
|
+
|
|
374
|
+
try {
|
|
375
|
+
if (!this.serviceNowClient) {
|
|
376
|
+
return {
|
|
377
|
+
component: 'servicenow',
|
|
378
|
+
status: 'unknown',
|
|
379
|
+
message: 'ServiceNow client not initialized',
|
|
380
|
+
timestamp: new Date(),
|
|
381
|
+
responseTime: Date.now() - startTime
|
|
382
|
+
};
|
|
383
|
+
}
|
|
384
|
+
|
|
385
|
+
// Perform a simple API call to check connectivity
|
|
386
|
+
const testResult = await this.serviceNowClient.testConnection();
|
|
387
|
+
const responseTime = Date.now() - startTime;
|
|
388
|
+
|
|
389
|
+
if (!testResult.success) {
|
|
390
|
+
return {
|
|
391
|
+
component: 'servicenow',
|
|
392
|
+
status: 'unhealthy',
|
|
393
|
+
message: 'ServiceNow connection test failed',
|
|
394
|
+
error: testResult.error,
|
|
395
|
+
timestamp: new Date(),
|
|
396
|
+
responseTime
|
|
397
|
+
};
|
|
398
|
+
}
|
|
399
|
+
|
|
400
|
+
let status: 'healthy' | 'degraded' | 'unhealthy' = 'healthy';
|
|
401
|
+
let message = 'ServiceNow connection healthy';
|
|
402
|
+
|
|
403
|
+
if (responseTime > this.config.thresholds.responseTime) {
|
|
404
|
+
status = 'degraded';
|
|
405
|
+
message = 'ServiceNow response time high';
|
|
406
|
+
}
|
|
407
|
+
|
|
408
|
+
return {
|
|
409
|
+
component: 'servicenow',
|
|
410
|
+
status,
|
|
411
|
+
message,
|
|
412
|
+
details: {
|
|
413
|
+
connected: true,
|
|
414
|
+
responseTime
|
|
415
|
+
},
|
|
416
|
+
timestamp: new Date(),
|
|
417
|
+
responseTime
|
|
418
|
+
};
|
|
419
|
+
|
|
420
|
+
} catch (error) {
|
|
421
|
+
return {
|
|
422
|
+
component: 'servicenow',
|
|
423
|
+
status: 'unhealthy',
|
|
424
|
+
message: 'ServiceNow check failed',
|
|
425
|
+
error: (error as Error).message,
|
|
426
|
+
timestamp: new Date(),
|
|
427
|
+
responseTime: Date.now() - startTime
|
|
428
|
+
};
|
|
429
|
+
}
|
|
430
|
+
}
|
|
431
|
+
|
|
432
|
+
private async checkQueen(): Promise<HealthCheckResult> {
|
|
433
|
+
const startTime = Date.now();
|
|
434
|
+
|
|
435
|
+
try {
|
|
436
|
+
// Check active queen sessions
|
|
437
|
+
const activeSessions = await this.memory.query<any>(`
|
|
438
|
+
SELECT COUNT(*) as count FROM swarm_sessions
|
|
439
|
+
WHERE status = 'active'
|
|
440
|
+
`);
|
|
441
|
+
|
|
442
|
+
// Check agent coordination
|
|
443
|
+
const activeAgents = await this.memory.query<any>(`
|
|
444
|
+
SELECT COUNT(*) as count FROM agent_coordination
|
|
445
|
+
WHERE status IN ('spawned', 'active')
|
|
446
|
+
`);
|
|
447
|
+
|
|
448
|
+
const responseTime = Date.now() - startTime;
|
|
449
|
+
|
|
450
|
+
let status: 'healthy' | 'degraded' | 'unhealthy' = 'healthy';
|
|
451
|
+
let message = 'Queen coordination system healthy';
|
|
452
|
+
|
|
453
|
+
const sessionCount = activeSessions[0]?.count || 0;
|
|
454
|
+
const agentCount = activeAgents[0]?.count || 0;
|
|
455
|
+
|
|
456
|
+
if (agentCount > this.config.thresholds.queueSize) {
|
|
457
|
+
status = 'degraded';
|
|
458
|
+
message = 'High number of active agents';
|
|
459
|
+
}
|
|
460
|
+
|
|
461
|
+
return {
|
|
462
|
+
component: 'queen',
|
|
463
|
+
status,
|
|
464
|
+
message,
|
|
465
|
+
details: {
|
|
466
|
+
activeSessions: sessionCount,
|
|
467
|
+
activeAgents: agentCount,
|
|
468
|
+
responseTime
|
|
469
|
+
},
|
|
470
|
+
timestamp: new Date(),
|
|
471
|
+
responseTime
|
|
472
|
+
};
|
|
473
|
+
|
|
474
|
+
} catch (error) {
|
|
475
|
+
return {
|
|
476
|
+
component: 'queen',
|
|
477
|
+
status: 'unhealthy',
|
|
478
|
+
message: 'Queen system check failed',
|
|
479
|
+
error: (error as Error).message,
|
|
480
|
+
timestamp: new Date(),
|
|
481
|
+
responseTime: Date.now() - startTime
|
|
482
|
+
};
|
|
483
|
+
}
|
|
484
|
+
}
|
|
485
|
+
|
|
486
|
+
private async checkSystem(): Promise<HealthCheckResult> {
|
|
487
|
+
const startTime = Date.now();
|
|
488
|
+
|
|
489
|
+
try {
|
|
490
|
+
const resources = await this.getSystemResources();
|
|
491
|
+
const enhancedMetrics = await this.getEnhancedSystemMetrics();
|
|
492
|
+
const responseTime = Date.now() - startTime;
|
|
493
|
+
|
|
494
|
+
let status: 'healthy' | 'degraded' | 'unhealthy' = 'healthy';
|
|
495
|
+
let message = 'System resources within normal limits';
|
|
496
|
+
const issues: string[] = [];
|
|
497
|
+
|
|
498
|
+
// Check CPU usage
|
|
499
|
+
if (resources.cpuUsage > this.config.thresholds.cpuUsage * 100) {
|
|
500
|
+
status = 'degraded';
|
|
501
|
+
issues.push(`High CPU usage: ${resources.cpuUsage.toFixed(1)}%`);
|
|
502
|
+
}
|
|
503
|
+
|
|
504
|
+
// Check memory usage
|
|
505
|
+
const memoryUsagePercent = (resources.memoryUsage / resources.memoryTotal) * 100;
|
|
506
|
+
if (memoryUsagePercent > this.config.thresholds.memoryUsage * 100) {
|
|
507
|
+
status = status === 'degraded' ? 'unhealthy' : 'degraded';
|
|
508
|
+
issues.push(`High memory usage: ${memoryUsagePercent.toFixed(1)}%`);
|
|
509
|
+
}
|
|
510
|
+
|
|
511
|
+
// Check disk usage
|
|
512
|
+
if (resources.diskUsage > 90) {
|
|
513
|
+
status = 'unhealthy';
|
|
514
|
+
issues.push(`Critical disk usage: ${resources.diskUsage.toFixed(1)}%`);
|
|
515
|
+
} else if (resources.diskUsage > 80) {
|
|
516
|
+
status = status === 'healthy' ? 'degraded' : status;
|
|
517
|
+
issues.push(`High disk usage: ${resources.diskUsage.toFixed(1)}%`);
|
|
518
|
+
}
|
|
519
|
+
|
|
520
|
+
// Check process memory
|
|
521
|
+
const heapUsagePercent = (enhancedMetrics.process.memory.heapUsed / enhancedMetrics.process.memory.heapTotal) * 100;
|
|
522
|
+
if (heapUsagePercent > 90) {
|
|
523
|
+
status = status === 'degraded' ? 'unhealthy' : 'degraded';
|
|
524
|
+
issues.push(`High heap usage: ${heapUsagePercent.toFixed(1)}%`);
|
|
525
|
+
}
|
|
526
|
+
|
|
527
|
+
// Check network connectivity
|
|
528
|
+
if (!enhancedMetrics.network.connected) {
|
|
529
|
+
status = 'degraded';
|
|
530
|
+
issues.push('Network connectivity issues detected');
|
|
531
|
+
}
|
|
532
|
+
|
|
533
|
+
if (issues.length > 0) {
|
|
534
|
+
message = issues.join(', ');
|
|
535
|
+
}
|
|
536
|
+
|
|
537
|
+
return {
|
|
538
|
+
component: 'system',
|
|
539
|
+
status,
|
|
540
|
+
message,
|
|
541
|
+
details: {
|
|
542
|
+
...resources,
|
|
543
|
+
enhanced: enhancedMetrics
|
|
544
|
+
},
|
|
545
|
+
timestamp: new Date(),
|
|
546
|
+
responseTime
|
|
547
|
+
};
|
|
548
|
+
|
|
549
|
+
} catch (error) {
|
|
550
|
+
return {
|
|
551
|
+
component: 'system',
|
|
552
|
+
status: 'unhealthy',
|
|
553
|
+
message: 'System resource check failed',
|
|
554
|
+
error: (error as Error).message,
|
|
555
|
+
timestamp: new Date(),
|
|
556
|
+
responseTime: Date.now() - startTime
|
|
557
|
+
};
|
|
558
|
+
}
|
|
559
|
+
}
|
|
560
|
+
|
|
561
|
+
private async checkPerformance(): Promise<HealthCheckResult> {
|
|
562
|
+
const startTime = Date.now();
|
|
563
|
+
|
|
564
|
+
try {
|
|
565
|
+
// Get recent performance metrics
|
|
566
|
+
const recentMetrics = await this.memory.query<any>(`
|
|
567
|
+
SELECT
|
|
568
|
+
COUNT(*) as total_operations,
|
|
569
|
+
SUM(CASE WHEN success = 1 THEN 1 ELSE 0 END) as successful_operations,
|
|
570
|
+
AVG(duration) as avg_duration,
|
|
571
|
+
MAX(duration) as max_duration
|
|
572
|
+
FROM performance_metrics
|
|
573
|
+
WHERE start_time > ?
|
|
574
|
+
`, [Date.now() - 300000]); // Last 5 minutes
|
|
575
|
+
|
|
576
|
+
const metrics = recentMetrics[0] || {};
|
|
577
|
+
const errorRate = metrics.total_operations > 0
|
|
578
|
+
? (metrics.total_operations - metrics.successful_operations) / metrics.total_operations
|
|
579
|
+
: 0;
|
|
580
|
+
|
|
581
|
+
const responseTime = Date.now() - startTime;
|
|
582
|
+
|
|
583
|
+
let status: 'healthy' | 'degraded' | 'unhealthy' = 'healthy';
|
|
584
|
+
let message = 'Performance metrics within normal limits';
|
|
585
|
+
|
|
586
|
+
if (errorRate > this.config.thresholds.errorRate) {
|
|
587
|
+
status = 'degraded';
|
|
588
|
+
message = `High error rate: ${(errorRate * 100).toFixed(1)}%`;
|
|
589
|
+
}
|
|
590
|
+
|
|
591
|
+
if (metrics.avg_duration > this.config.thresholds.responseTime) {
|
|
592
|
+
status = status === 'degraded' ? 'unhealthy' : 'degraded';
|
|
593
|
+
message = `High average response time: ${metrics.avg_duration}ms`;
|
|
594
|
+
}
|
|
595
|
+
|
|
596
|
+
return {
|
|
597
|
+
component: 'performance',
|
|
598
|
+
status,
|
|
599
|
+
message,
|
|
600
|
+
details: {
|
|
601
|
+
totalOperations: metrics.total_operations || 0,
|
|
602
|
+
successfulOperations: metrics.successful_operations || 0,
|
|
603
|
+
errorRate,
|
|
604
|
+
avgDuration: metrics.avg_duration || 0,
|
|
605
|
+
maxDuration: metrics.max_duration || 0
|
|
606
|
+
},
|
|
607
|
+
timestamp: new Date(),
|
|
608
|
+
responseTime
|
|
609
|
+
};
|
|
610
|
+
|
|
611
|
+
} catch (error) {
|
|
612
|
+
return {
|
|
613
|
+
component: 'performance',
|
|
614
|
+
status: 'unhealthy',
|
|
615
|
+
message: 'Performance check failed',
|
|
616
|
+
error: (error as Error).message,
|
|
617
|
+
timestamp: new Date(),
|
|
618
|
+
responseTime: Date.now() - startTime
|
|
619
|
+
};
|
|
620
|
+
}
|
|
621
|
+
}
|
|
622
|
+
|
|
623
|
+
private createSkippedResult(component: string): HealthCheckResult {
|
|
624
|
+
return {
|
|
625
|
+
component,
|
|
626
|
+
status: 'unknown',
|
|
627
|
+
message: 'Health check skipped',
|
|
628
|
+
timestamp: new Date()
|
|
629
|
+
};
|
|
630
|
+
}
|
|
631
|
+
|
|
632
|
+
private async getSystemResources(): Promise<SystemResources> {
|
|
633
|
+
const cpus = os.cpus();
|
|
634
|
+
const totalMemory = os.totalmem();
|
|
635
|
+
const freeMemory = os.freemem();
|
|
636
|
+
const usedMemory = totalMemory - freeMemory;
|
|
637
|
+
|
|
638
|
+
// Calculate CPU usage with averaging
|
|
639
|
+
const cpuUsage = await this.calculateCPUUsage();
|
|
640
|
+
|
|
641
|
+
// Get real disk usage
|
|
642
|
+
const { diskUsage, diskTotal } = await this.getDiskUsage();
|
|
643
|
+
|
|
644
|
+
return {
|
|
645
|
+
cpuUsage,
|
|
646
|
+
memoryUsage: usedMemory / 1024 / 1024, // MB
|
|
647
|
+
memoryTotal: totalMemory / 1024 / 1024, // MB
|
|
648
|
+
diskUsage,
|
|
649
|
+
diskTotal,
|
|
650
|
+
loadAverage: os.loadavg(),
|
|
651
|
+
processCount: cpus.length
|
|
652
|
+
};
|
|
653
|
+
}
|
|
654
|
+
|
|
655
|
+
private async createHealthTables(): Promise<void> {
|
|
656
|
+
await this.memory.execute(`
|
|
657
|
+
CREATE TABLE IF NOT EXISTS health_checks (
|
|
658
|
+
id TEXT PRIMARY KEY,
|
|
659
|
+
component TEXT NOT NULL,
|
|
660
|
+
status TEXT NOT NULL,
|
|
661
|
+
message TEXT,
|
|
662
|
+
details TEXT,
|
|
663
|
+
error TEXT,
|
|
664
|
+
response_time INTEGER,
|
|
665
|
+
timestamp TIMESTAMP DEFAULT CURRENT_TIMESTAMP
|
|
666
|
+
);
|
|
667
|
+
|
|
668
|
+
CREATE INDEX IF NOT EXISTS idx_health_component ON health_checks(component);
|
|
669
|
+
CREATE INDEX IF NOT EXISTS idx_health_timestamp ON health_checks(timestamp);
|
|
670
|
+
|
|
671
|
+
CREATE TABLE IF NOT EXISTS health_alerts (
|
|
672
|
+
id TEXT PRIMARY KEY,
|
|
673
|
+
alert_type TEXT NOT NULL,
|
|
674
|
+
severity TEXT NOT NULL,
|
|
675
|
+
message TEXT NOT NULL,
|
|
676
|
+
details TEXT,
|
|
677
|
+
timestamp TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
|
678
|
+
acknowledged BOOLEAN DEFAULT FALSE
|
|
679
|
+
);
|
|
680
|
+
`);
|
|
681
|
+
}
|
|
682
|
+
|
|
683
|
+
private async storeHealthResult(status: SystemHealthStatus): Promise<void> {
|
|
684
|
+
// Store individual component results
|
|
685
|
+
for (const [component, result] of Object.entries(status.components)) {
|
|
686
|
+
await this.memory.insert('health_checks', {
|
|
687
|
+
id: `${component}_${Date.now()}`,
|
|
688
|
+
component,
|
|
689
|
+
status: result.status,
|
|
690
|
+
message: result.message,
|
|
691
|
+
details: JSON.stringify(result.details),
|
|
692
|
+
error: result.error,
|
|
693
|
+
response_time: result.responseTime,
|
|
694
|
+
timestamp: result.timestamp
|
|
695
|
+
});
|
|
696
|
+
}
|
|
697
|
+
|
|
698
|
+
// Add to history
|
|
699
|
+
this.checkHistory.push(...Object.values(status.components));
|
|
700
|
+
|
|
701
|
+
// Limit history size
|
|
702
|
+
if (this.checkHistory.length > 1000) {
|
|
703
|
+
this.checkHistory = this.checkHistory.slice(-500);
|
|
704
|
+
}
|
|
705
|
+
}
|
|
706
|
+
|
|
707
|
+
private checkAlerts(status: SystemHealthStatus): void {
|
|
708
|
+
// Check for critical conditions
|
|
709
|
+
const unhealthyComponents = Object.entries(status.components)
|
|
710
|
+
.filter(([_, result]) => result.status === 'unhealthy');
|
|
711
|
+
|
|
712
|
+
if (unhealthyComponents.length > 0) {
|
|
713
|
+
this.emit('health:alert', {
|
|
714
|
+
type: 'component_failure',
|
|
715
|
+
severity: 'critical',
|
|
716
|
+
message: `${unhealthyComponents.length} components unhealthy`,
|
|
717
|
+
components: unhealthyComponents.map(([name]) => name)
|
|
718
|
+
});
|
|
719
|
+
}
|
|
720
|
+
|
|
721
|
+
// Check system resources
|
|
722
|
+
const resources = status.metrics.systemResources;
|
|
723
|
+
if (resources.cpuUsage > 90) {
|
|
724
|
+
this.emit('health:alert', {
|
|
725
|
+
type: 'resource_critical',
|
|
726
|
+
severity: 'critical',
|
|
727
|
+
message: `CPU usage critical: ${resources.cpuUsage}%`
|
|
728
|
+
});
|
|
729
|
+
}
|
|
730
|
+
|
|
731
|
+
if ((resources.memoryUsage / resources.memoryTotal) > 0.9) {
|
|
732
|
+
this.emit('health:alert', {
|
|
733
|
+
type: 'resource_critical',
|
|
734
|
+
severity: 'critical',
|
|
735
|
+
message: `Memory usage critical: ${(resources.memoryUsage / resources.memoryTotal * 100).toFixed(1)}%`
|
|
736
|
+
});
|
|
737
|
+
}
|
|
738
|
+
}
|
|
739
|
+
|
|
740
|
+
private calculateAverageResponseTime(): number {
|
|
741
|
+
if (this.checkHistory.length === 0) return 0;
|
|
742
|
+
|
|
743
|
+
const responseTimes = this.checkHistory
|
|
744
|
+
.map(h => h.responseTime || 0)
|
|
745
|
+
.filter(t => t > 0);
|
|
746
|
+
|
|
747
|
+
if (responseTimes.length === 0) return 0;
|
|
748
|
+
|
|
749
|
+
return responseTimes.reduce((a, b) => a + b, 0) / responseTimes.length;
|
|
750
|
+
}
|
|
751
|
+
|
|
752
|
+
/**
|
|
753
|
+
* Calculate real CPU usage with averaging
|
|
754
|
+
*/
|
|
755
|
+
private async calculateCPUUsage(): Promise<number> {
|
|
756
|
+
const cpus = os.cpus();
|
|
757
|
+
|
|
758
|
+
const currentCPUInfo = cpus.map(cpu => {
|
|
759
|
+
const total = Object.values(cpu.times).reduce((acc, time) => acc + time, 0);
|
|
760
|
+
return {
|
|
761
|
+
idle: cpu.times.idle,
|
|
762
|
+
total: total
|
|
763
|
+
};
|
|
764
|
+
});
|
|
765
|
+
|
|
766
|
+
if (!this.lastCPUInfo) {
|
|
767
|
+
this.lastCPUInfo = currentCPUInfo;
|
|
768
|
+
// Wait a bit and calculate again for initial reading
|
|
769
|
+
await new Promise(resolve => setTimeout(resolve, 100));
|
|
770
|
+
return this.calculateCPUUsage();
|
|
771
|
+
}
|
|
772
|
+
|
|
773
|
+
let totalIdleDiff = 0;
|
|
774
|
+
let totalDiff = 0;
|
|
775
|
+
|
|
776
|
+
for (let i = 0; i < cpus.length; i++) {
|
|
777
|
+
const lastCPU = this.lastCPUInfo[i];
|
|
778
|
+
const currentCPU = currentCPUInfo[i];
|
|
779
|
+
|
|
780
|
+
const idleDiff = currentCPU.idle - lastCPU.idle;
|
|
781
|
+
const totalCPUDiff = currentCPU.total - lastCPU.total;
|
|
782
|
+
|
|
783
|
+
totalIdleDiff += idleDiff;
|
|
784
|
+
totalDiff += totalCPUDiff;
|
|
785
|
+
}
|
|
786
|
+
|
|
787
|
+
this.lastCPUInfo = currentCPUInfo;
|
|
788
|
+
|
|
789
|
+
if (totalDiff === 0) return 0;
|
|
790
|
+
|
|
791
|
+
const idlePercentage = (totalIdleDiff / totalDiff) * 100;
|
|
792
|
+
const usagePercentage = 100 - idlePercentage;
|
|
793
|
+
|
|
794
|
+
return Math.max(0, Math.min(100, usagePercentage));
|
|
795
|
+
}
|
|
796
|
+
|
|
797
|
+
/**
|
|
798
|
+
* Get real disk usage statistics
|
|
799
|
+
*/
|
|
800
|
+
private async getDiskUsage(): Promise<{ diskUsage: number; diskTotal: number }> {
|
|
801
|
+
try {
|
|
802
|
+
// Platform-specific disk usage calculation
|
|
803
|
+
if (process.platform === 'darwin' || process.platform === 'linux') {
|
|
804
|
+
return this.getUnixDiskUsage();
|
|
805
|
+
} else if (process.platform === 'win32') {
|
|
806
|
+
return this.getWindowsDiskUsage();
|
|
807
|
+
} else {
|
|
808
|
+
// Fallback for unsupported platforms
|
|
809
|
+
return { diskUsage: 0, diskTotal: 0 };
|
|
810
|
+
}
|
|
811
|
+
} catch (error) {
|
|
812
|
+
this.logger.warn('Failed to get disk usage:', error);
|
|
813
|
+
return { diskUsage: 0, diskTotal: 0 };
|
|
814
|
+
}
|
|
815
|
+
}
|
|
816
|
+
|
|
817
|
+
/**
|
|
818
|
+
* Get disk usage for Unix-based systems (macOS, Linux)
|
|
819
|
+
*/
|
|
820
|
+
private getUnixDiskUsage(): { diskUsage: number; diskTotal: number } {
|
|
821
|
+
try {
|
|
822
|
+
// Get current working directory's mount point
|
|
823
|
+
const cwd = process.cwd();
|
|
824
|
+
|
|
825
|
+
// Get disk usage for the filesystem containing the current directory
|
|
826
|
+
const output = execSync(`df -k "${cwd}"`, { encoding: 'utf8' });
|
|
827
|
+
const lines = output.trim().split('\n');
|
|
828
|
+
|
|
829
|
+
if (lines.length < 2) {
|
|
830
|
+
throw new Error('Unexpected df output format');
|
|
831
|
+
}
|
|
832
|
+
|
|
833
|
+
// Handle cases where the output might span multiple lines
|
|
834
|
+
let dataLine = lines[1];
|
|
835
|
+
if (lines.length > 2 && !lines[1].includes('/')) {
|
|
836
|
+
// Some systems split long filesystem names across lines
|
|
837
|
+
dataLine = lines[1] + ' ' + lines[2];
|
|
838
|
+
}
|
|
839
|
+
|
|
840
|
+
// Parse the data line
|
|
841
|
+
const parts = dataLine.split(/\s+/);
|
|
842
|
+
|
|
843
|
+
// Find the numeric values (skip filesystem name)
|
|
844
|
+
let totalBlocks = 0;
|
|
845
|
+
let usedBlocks = 0;
|
|
846
|
+
let foundNumbers = false;
|
|
847
|
+
|
|
848
|
+
for (let i = 0; i < parts.length; i++) {
|
|
849
|
+
const num = parseInt(parts[i], 10);
|
|
850
|
+
if (!isNaN(num) && !foundNumbers) {
|
|
851
|
+
totalBlocks = num;
|
|
852
|
+
if (i + 1 < parts.length) {
|
|
853
|
+
usedBlocks = parseInt(parts[i + 1], 10);
|
|
854
|
+
foundNumbers = true;
|
|
855
|
+
break;
|
|
856
|
+
}
|
|
857
|
+
}
|
|
858
|
+
}
|
|
859
|
+
|
|
860
|
+
if (!foundNumbers || isNaN(totalBlocks) || isNaN(usedBlocks)) {
|
|
861
|
+
throw new Error('Failed to parse disk usage numbers');
|
|
862
|
+
}
|
|
863
|
+
|
|
864
|
+
const diskTotal = totalBlocks / 1024 / 1024; // Convert to GB
|
|
865
|
+
const diskUsed = usedBlocks / 1024 / 1024; // Convert to GB
|
|
866
|
+
const diskUsage = (diskUsed / diskTotal) * 100;
|
|
867
|
+
|
|
868
|
+
return {
|
|
869
|
+
diskUsage: Math.round(diskUsage * 10) / 10, // Round to 1 decimal
|
|
870
|
+
diskTotal: Math.round(diskTotal * 10) / 10
|
|
871
|
+
};
|
|
872
|
+
} catch (error) {
|
|
873
|
+
this.logger.error('Unix disk usage check failed:', error);
|
|
874
|
+
throw error;
|
|
875
|
+
}
|
|
876
|
+
}
|
|
877
|
+
|
|
878
|
+
/**
|
|
879
|
+
* Get disk usage for Windows systems
|
|
880
|
+
*/
|
|
881
|
+
private getWindowsDiskUsage(): { diskUsage: number; diskTotal: number } {
|
|
882
|
+
try {
|
|
883
|
+
// Get disk usage for C: drive using WMIC
|
|
884
|
+
const output = execSync('wmic logicaldisk where caption="C:" get size,freespace /value', { encoding: 'utf8' });
|
|
885
|
+
|
|
886
|
+
const sizeMatch = output.match(/Size=(\d+)/);
|
|
887
|
+
const freeMatch = output.match(/FreeSpace=(\d+)/);
|
|
888
|
+
|
|
889
|
+
if (!sizeMatch || !freeMatch) {
|
|
890
|
+
throw new Error('Failed to parse Windows disk usage');
|
|
891
|
+
}
|
|
892
|
+
|
|
893
|
+
const totalBytes = parseInt(sizeMatch[1], 10);
|
|
894
|
+
const freeBytes = parseInt(freeMatch[1], 10);
|
|
895
|
+
const usedBytes = totalBytes - freeBytes;
|
|
896
|
+
|
|
897
|
+
const diskTotal = totalBytes / 1024 / 1024 / 1024; // Convert to GB
|
|
898
|
+
const diskUsed = usedBytes / 1024 / 1024 / 1024; // Convert to GB
|
|
899
|
+
const diskUsage = (diskUsed / diskTotal) * 100;
|
|
900
|
+
|
|
901
|
+
return {
|
|
902
|
+
diskUsage: Math.round(diskUsage * 10) / 10,
|
|
903
|
+
diskTotal: Math.round(diskTotal * 10) / 10
|
|
904
|
+
};
|
|
905
|
+
} catch (error) {
|
|
906
|
+
this.logger.error('Windows disk usage check failed:', error);
|
|
907
|
+
throw error;
|
|
908
|
+
}
|
|
909
|
+
}
|
|
910
|
+
|
|
911
|
+
/**
|
|
912
|
+
* Get process-specific memory usage
|
|
913
|
+
*/
|
|
914
|
+
private getProcessMemoryUsage() {
|
|
915
|
+
const usage = process.memoryUsage();
|
|
916
|
+
return {
|
|
917
|
+
heapUsed: usage.heapUsed / 1024 / 1024, // MB
|
|
918
|
+
heapTotal: usage.heapTotal / 1024 / 1024, // MB
|
|
919
|
+
rss: usage.rss / 1024 / 1024, // MB
|
|
920
|
+
external: usage.external / 1024 / 1024, // MB
|
|
921
|
+
arrayBuffers: usage.arrayBuffers / 1024 / 1024 // MB
|
|
922
|
+
};
|
|
923
|
+
}
|
|
924
|
+
|
|
925
|
+
/**
|
|
926
|
+
* Check network connectivity
|
|
927
|
+
*/
|
|
928
|
+
private async checkNetworkConnectivity(): Promise<boolean> {
|
|
929
|
+
try {
|
|
930
|
+
// Simple DNS lookup to check network connectivity
|
|
931
|
+
const dns = await import('dns').then(m => m.promises);
|
|
932
|
+
await dns.lookup('google.com');
|
|
933
|
+
return true;
|
|
934
|
+
} catch (error) {
|
|
935
|
+
return false;
|
|
936
|
+
}
|
|
937
|
+
}
|
|
938
|
+
|
|
939
|
+
/**
|
|
940
|
+
* Get additional SQLite database statistics
|
|
941
|
+
*/
|
|
942
|
+
private async getExtendedDatabaseStats(): Promise<any> {
|
|
943
|
+
try {
|
|
944
|
+
// Use the existing memory system stats
|
|
945
|
+
const dbStats = await this.memory.getDatabaseStats();
|
|
946
|
+
|
|
947
|
+
// Get additional table information if possible
|
|
948
|
+
try {
|
|
949
|
+
const tableInfo = await this.memory.query(`
|
|
950
|
+
SELECT
|
|
951
|
+
COUNT(DISTINCT name) as table_count,
|
|
952
|
+
SUM(CASE WHEN type = 'index' THEN 1 ELSE 0 END) as index_count
|
|
953
|
+
FROM sqlite_master
|
|
954
|
+
WHERE type IN ('table', 'index')
|
|
955
|
+
`);
|
|
956
|
+
|
|
957
|
+
return {
|
|
958
|
+
...dbStats,
|
|
959
|
+
tables: tableInfo[0]?.table_count || 0,
|
|
960
|
+
indexes: tableInfo[0]?.index_count || 0
|
|
961
|
+
};
|
|
962
|
+
} catch (error) {
|
|
963
|
+
// If query fails, just return basic stats
|
|
964
|
+
return dbStats;
|
|
965
|
+
}
|
|
966
|
+
} catch (error) {
|
|
967
|
+
this.logger.warn('Failed to get extended database stats:', error);
|
|
968
|
+
return null;
|
|
969
|
+
}
|
|
970
|
+
}
|
|
971
|
+
|
|
972
|
+
/**
|
|
973
|
+
* Enhanced system check with more detailed metrics
|
|
974
|
+
*/
|
|
975
|
+
private async getEnhancedSystemMetrics() {
|
|
976
|
+
const processMemory = this.getProcessMemoryUsage();
|
|
977
|
+
const networkConnected = await this.checkNetworkConnectivity();
|
|
978
|
+
const dbStats = await this.getExtendedDatabaseStats();
|
|
979
|
+
|
|
980
|
+
return {
|
|
981
|
+
process: {
|
|
982
|
+
memory: processMemory,
|
|
983
|
+
uptime: process.uptime(),
|
|
984
|
+
pid: process.pid,
|
|
985
|
+
version: process.version,
|
|
986
|
+
platform: process.platform,
|
|
987
|
+
arch: process.arch
|
|
988
|
+
},
|
|
989
|
+
network: {
|
|
990
|
+
connected: networkConnected
|
|
991
|
+
},
|
|
992
|
+
database: dbStats
|
|
993
|
+
};
|
|
994
|
+
}
|
|
995
|
+
}
|