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.
Files changed (595) hide show
  1. package/.claude/helpers/github-setup.sh +28 -0
  2. package/.claude/helpers/quick-start.sh +19 -0
  3. package/.claude/helpers/setup-mcp.sh +18 -0
  4. package/.claude/settings.local.json +33 -0
  5. package/.claude-flow/metrics/system-metrics.json +1992 -0
  6. package/.env.example +21 -0
  7. package/.roo/README.md +402 -0
  8. package/.roo/mcp-list.txt +257 -0
  9. package/.roo/mcp.json +32 -0
  10. package/.roo/workflows/basic-tdd.json +32 -0
  11. package/.roomodes +201 -0
  12. package/README.md +114 -628
  13. package/activate-mcp.sh +15 -0
  14. package/dist/cli.js.bak +2052 -0
  15. package/manual-register-mcp.js +134 -0
  16. package/mcp-wrapper.sh +12 -0
  17. package/package.json +2 -2
  18. package/scripts/create-env.js +6 -1
  19. package/scripts/reset-mcp-servers.js +246 -0
  20. package/scripts/update-version.js +31 -0
  21. package/src/agents/README.md +192 -0
  22. package/src/agents/base-agent.ts +251 -0
  23. package/src/agents/coordinator.ts +971 -0
  24. package/src/agents/index.ts +18 -0
  25. package/src/agents/queen-403-handler.ts +230 -0
  26. package/src/agents/queen-agent.ts +1399 -0
  27. package/src/agents/script-writer-agent.ts +769 -0
  28. package/src/agents/security-agent.ts +726 -0
  29. package/src/agents/widget-creator-agent.ts +568 -0
  30. package/src/api/error-handling.ts +1758 -0
  31. package/src/api/natural-language-mapper.ts +630 -0
  32. package/src/api/performance-optimizer.ts +891 -0
  33. package/src/api/transaction-manager.ts +754 -0
  34. package/src/cli/deploy-artifact.ts +304 -0
  35. package/src/cli/snow-flow-cli-integration.ts +434 -0
  36. package/src/cli.ts +4455 -0
  37. package/src/cli.ts.bak +5616 -0
  38. package/src/compliance/advanced-compliance-system.ts +1268 -0
  39. package/src/compliance/index.ts +19 -0
  40. package/src/config/snow-flow-config.ts +1019 -0
  41. package/src/documentation/index.ts +16 -0
  42. package/src/documentation/self-documenting-system.ts +1421 -0
  43. package/src/dynamic-version.ts +44 -0
  44. package/src/healing/index.ts +20 -0
  45. package/src/healing/self-healing-system.ts +1435 -0
  46. package/src/health/README.md +161 -0
  47. package/src/health/system-health.ts +995 -0
  48. package/src/index.ts +60 -0
  49. package/src/intelligence/acl-analyzer.ts +377 -0
  50. package/src/intelligence/auto-resolution-engine.ts +643 -0
  51. package/src/intelligence/gap-analysis-engine.ts +488 -0
  52. package/src/intelligence/manual-instructions-generator.ts +744 -0
  53. package/src/intelligence/mcp-coverage-analyzer.ts +708 -0
  54. package/src/intelligence/multi-pass-requirements-analyzer.ts +603 -0
  55. package/src/intelligence/performance-recommendations-engine.ts +1223 -0
  56. package/src/intelligence/requirements-analyzer.ts +1148 -0
  57. package/src/intelligence/task-analyzer.ts +628 -0
  58. package/src/managers/scope-manager.ts +555 -0
  59. package/src/mcp/advanced/servicenow-advanced-features-mcp.ts +16110 -0
  60. package/src/mcp/base-mcp-server.ts +660 -0
  61. package/src/mcp/http-transport-wrapper.ts +426 -0
  62. package/src/mcp/service-discovery-client.ts +312 -0
  63. package/src/mcp/servicenow-automation-mcp-refactored.ts +678 -0
  64. package/src/mcp/servicenow-automation-mcp.ts +838 -0
  65. package/src/mcp/servicenow-deployment-mcp-refactored.ts +1292 -0
  66. package/src/mcp/servicenow-deployment-mcp.ts +7244 -0
  67. package/src/mcp/servicenow-graph-memory-mcp-refactored.ts +721 -0
  68. package/src/mcp/servicenow-graph-memory-mcp.ts +832 -0
  69. package/src/mcp/servicenow-integration-mcp-refactored.ts +655 -0
  70. package/src/mcp/servicenow-integration-mcp.ts +819 -0
  71. package/src/mcp/servicenow-intelligent-mcp-refactored.ts +977 -0
  72. package/src/mcp/servicenow-intelligent-mcp.ts +4638 -0
  73. package/src/mcp/servicenow-mcp-server.ts +728 -0
  74. package/src/mcp/servicenow-memory-mcp.ts +474 -0
  75. package/src/mcp/servicenow-operations-mcp-refactored.ts +1995 -0
  76. package/src/mcp/servicenow-operations-mcp.ts +3384 -0
  77. package/src/mcp/servicenow-platform-development-mcp-refactored.ts +611 -0
  78. package/src/mcp/servicenow-platform-development-mcp.ts +970 -0
  79. package/src/mcp/servicenow-progressive-indexer.ts +370 -0
  80. package/src/mcp/servicenow-reporting-analytics-mcp-refactored.ts +695 -0
  81. package/src/mcp/servicenow-reporting-analytics-mcp.ts +1123 -0
  82. package/src/mcp/servicenow-security-compliance-mcp-refactored.ts +642 -0
  83. package/src/mcp/servicenow-security-compliance-mcp.ts +1157 -0
  84. package/src/mcp/servicenow-update-set-mcp-refactored.ts +751 -0
  85. package/src/mcp/servicenow-update-set-mcp.ts +811 -0
  86. package/src/mcp/shared/agent-context-provider.ts +365 -0
  87. package/src/mcp/shared/base-mcp-server.ts +2463 -0
  88. package/src/mcp/shared/mcp-memory-manager.ts +540 -0
  89. package/src/mcp/shared/mcp-resource-manager.ts +367 -0
  90. package/src/mcp/snow-flow-mcp.ts +911 -0
  91. package/src/mcp/start-all-mcp-servers.ts +102 -0
  92. package/src/mcp/start-servicenow-mcp.ts +67 -0
  93. package/src/monitoring/enhanced-monitoring-system.ts +1345 -0
  94. package/src/monitoring/performance-tracker.ts +777 -0
  95. package/src/optimization/cost-optimization-engine.ts +1125 -0
  96. package/src/optimization/index.ts +10 -0
  97. package/src/queen/README.md +403 -0
  98. package/src/queen/agent-factory.ts +574 -0
  99. package/src/queen/index.ts +94 -0
  100. package/src/queen/mcp-execution-bridge.ts +681 -0
  101. package/src/queen/neural-learning.ts +319 -0
  102. package/src/queen/parallel-agent-engine.ts +848 -0
  103. package/src/queen/queen-memory-system.ts +490 -0
  104. package/src/queen/queen-memory.ts +456 -0
  105. package/src/queen/servicenow-queen.ts +1029 -0
  106. package/src/queen/types.ts +87 -0
  107. package/src/rollback/smart-rollback-system.ts +866 -0
  108. package/src/schemas/deployment.schema.json +58 -0
  109. package/src/schemas/flow.schema.json +79 -0
  110. package/src/schemas/widget.schema.json +72 -0
  111. package/src/snow-flow-system.ts +541 -0
  112. package/src/sparc/sparc-help.ts +49 -0
  113. package/src/sparc/team-sparc.ts +88 -0
  114. package/src/strategies/global-scope-strategy.ts +736 -0
  115. package/src/templates/base/application.template.json +45 -0
  116. package/src/templates/base/business_rule.template.json +33 -0
  117. package/src/templates/base/script_include.template.json +18 -0
  118. package/src/templates/base/table.template.json +64 -0
  119. package/src/templates/base/widget.template.json +25 -0
  120. package/src/templates/patterns/composite.incident-management.template.json +140 -0
  121. package/src/templates/patterns/widget.dashboard.template.json +238 -0
  122. package/src/templates/patterns/widget.datatable.template.json +292 -0
  123. package/src/testing/integration-test-suite.ts +1276 -0
  124. package/src/types/index.ts +183 -0
  125. package/src/types/neo4j-driver.d.ts +23 -0
  126. package/src/types/servicenow.types.ts +307 -0
  127. package/src/types/snow-flow.types.ts +186 -0
  128. package/src/types/todo.types.ts +70 -0
  129. package/src/utils/action-type-cache.ts +286 -0
  130. package/src/utils/agent-detector.ts +573 -0
  131. package/src/utils/artifact-tracker.ts +379 -0
  132. package/src/utils/dependency-detector.ts +233 -0
  133. package/src/utils/deployment-metadata-handler.ts +518 -0
  134. package/src/utils/error-recovery.ts +680 -0
  135. package/src/utils/logger.ts +60 -0
  136. package/src/utils/mcp-auth-middleware.ts +262 -0
  137. package/src/utils/mcp-config-manager.ts +270 -0
  138. package/src/utils/mcp-server-manager.ts +446 -0
  139. package/src/utils/mcp-tool-registry.ts +298 -0
  140. package/src/utils/migrate-snow-flow.ts +98 -0
  141. package/src/utils/oauth-html-templates.ts +188 -0
  142. package/src/utils/scope-utils.ts +443 -0
  143. package/src/utils/servicenow-client.ts +3321 -0
  144. package/src/utils/servicenow-id-generator.ts +181 -0
  145. package/src/utils/snow-memory-manager.ts +605 -0
  146. package/src/utils/snow-oauth.ts +797 -0
  147. package/src/utils/template-engine.ts +463 -0
  148. package/src/utils/theme-manager.ts +295 -0
  149. package/src/utils/unified-auth-store.ts +222 -0
  150. package/src/utils/update-set-importer.ts +422 -0
  151. package/src/utils/update-set-xml-packager.ts +371 -0
  152. package/src/utils/widget-template-generator.ts +1744 -0
  153. package/src/version.ts +1950 -0
  154. package/.claude/commands/memory/README.md +0 -9
  155. package/dist/agents/app-creator.agent.d.ts.map +0 -1
  156. package/dist/agents/app-creator.agent.js.map +0 -1
  157. package/dist/agents/base/base-snow-agent.d.ts.map +0 -1
  158. package/dist/agents/base/base-snow-agent.js.map +0 -1
  159. package/dist/agents/base-agent.d.ts.map +0 -1
  160. package/dist/agents/base-agent.js.map +0 -1
  161. package/dist/agents/base-snow-agent.d.ts.map +0 -1
  162. package/dist/agents/base-snow-agent.js.map +0 -1
  163. package/dist/agents/coordinator.d.ts.map +0 -1
  164. package/dist/agents/coordinator.js.map +0 -1
  165. package/dist/agents/flow-builder-agent.d.ts.map +0 -1
  166. package/dist/agents/flow-builder-agent.js.map +0 -1
  167. package/dist/agents/index.d.ts.map +0 -1
  168. package/dist/agents/index.js.map +0 -1
  169. package/dist/agents/queen-403-handler.d.ts.map +0 -1
  170. package/dist/agents/queen-403-handler.js.map +0 -1
  171. package/dist/agents/queen-agent-example.d.ts.map +0 -1
  172. package/dist/agents/queen-agent-example.js.map +0 -1
  173. package/dist/agents/queen-agent.d.ts.map +0 -1
  174. package/dist/agents/queen-agent.js.map +0 -1
  175. package/dist/agents/queen-agent.test.d.ts.map +0 -1
  176. package/dist/agents/queen-agent.test.js.map +0 -1
  177. package/dist/agents/script-generator.agent.d.ts.map +0 -1
  178. package/dist/agents/script-generator.agent.js.map +0 -1
  179. package/dist/agents/script-writer-agent.d.ts.map +0 -1
  180. package/dist/agents/script-writer-agent.js.map +0 -1
  181. package/dist/agents/security-agent.d.ts.map +0 -1
  182. package/dist/agents/security-agent.js.map +0 -1
  183. package/dist/agents/specialists/automation-specialist.agent.d.ts.map +0 -1
  184. package/dist/agents/specialists/automation-specialist.agent.js.map +0 -1
  185. package/dist/agents/specialists/data-specialist.agent.d.ts.map +0 -1
  186. package/dist/agents/specialists/data-specialist.agent.js.map +0 -1
  187. package/dist/agents/specialists/integration-specialist.agent.d.ts.map +0 -1
  188. package/dist/agents/specialists/integration-specialist.agent.js.map +0 -1
  189. package/dist/agents/specialists/reporting-specialist.agent.d.ts.map +0 -1
  190. package/dist/agents/specialists/reporting-specialist.agent.js.map +0 -1
  191. package/dist/agents/specialists/security-specialist.agent.d.ts.map +0 -1
  192. package/dist/agents/specialists/security-specialist.agent.js.map +0 -1
  193. package/dist/agents/teams/adaptive/adaptive-coordinator.agent.d.ts.map +0 -1
  194. package/dist/agents/teams/adaptive/adaptive-coordinator.agent.js.map +0 -1
  195. package/dist/agents/teams/base-team.d.ts.map +0 -1
  196. package/dist/agents/teams/base-team.js.map +0 -1
  197. package/dist/agents/teams/team-types.d.ts.map +0 -1
  198. package/dist/agents/teams/team-types.js.map +0 -1
  199. package/dist/agents/teams/widget/widget-architect.agent.d.ts.map +0 -1
  200. package/dist/agents/teams/widget/widget-architect.agent.js.map +0 -1
  201. package/dist/agents/teams/widget/widget-backend.agent.d.ts.map +0 -1
  202. package/dist/agents/teams/widget/widget-backend.agent.js.map +0 -1
  203. package/dist/agents/teams/widget/widget-frontend.agent.d.ts.map +0 -1
  204. package/dist/agents/teams/widget/widget-frontend.agent.js.map +0 -1
  205. package/dist/agents/teams/widget/widget-platform.agent.d.ts.map +0 -1
  206. package/dist/agents/teams/widget/widget-platform.agent.js.map +0 -1
  207. package/dist/agents/teams/widget/widget-uiux.agent.d.ts.map +0 -1
  208. package/dist/agents/teams/widget/widget-uiux.agent.js.map +0 -1
  209. package/dist/agents/test-agent.d.ts.map +0 -1
  210. package/dist/agents/test-agent.js.map +0 -1
  211. package/dist/agents/test-agents.d.ts.map +0 -1
  212. package/dist/agents/test-agents.js.map +0 -1
  213. package/dist/agents/ui-builder.agent.d.ts.map +0 -1
  214. package/dist/agents/ui-builder.agent.js.map +0 -1
  215. package/dist/agents/widget-builder.agent.d.ts.map +0 -1
  216. package/dist/agents/widget-builder.agent.js.map +0 -1
  217. package/dist/agents/widget-creator-agent.d.ts.map +0 -1
  218. package/dist/agents/widget-creator-agent.js.map +0 -1
  219. package/dist/agents/workflow-designer.agent.d.ts.map +0 -1
  220. package/dist/agents/workflow-designer.agent.js.map +0 -1
  221. package/dist/api/error-handling.d.ts.map +0 -1
  222. package/dist/api/error-handling.js.map +0 -1
  223. package/dist/api/flow-designer-api.d.ts.map +0 -1
  224. package/dist/api/flow-designer-api.js.map +0 -1
  225. package/dist/api/natural-language-mapper.d.ts.map +0 -1
  226. package/dist/api/natural-language-mapper.js.map +0 -1
  227. package/dist/api/performance-optimizer.d.ts.map +0 -1
  228. package/dist/api/performance-optimizer.js.map +0 -1
  229. package/dist/api/transaction-manager.d.ts.map +0 -1
  230. package/dist/api/transaction-manager.js.map +0 -1
  231. package/dist/assembly/team-assembler.d.ts.map +0 -1
  232. package/dist/assembly/team-assembler.js.map +0 -1
  233. package/dist/cli/deploy-artifact.d.ts.map +0 -1
  234. package/dist/cli/deploy-artifact.js.map +0 -1
  235. package/dist/cli/snow-flow-cli-integration.d.ts.map +0 -1
  236. package/dist/cli/snow-flow-cli-integration.js.map +0 -1
  237. package/dist/cli.d.ts.map +0 -1
  238. package/dist/cli.js.map +0 -1
  239. package/dist/compliance/advanced-compliance-system.d.ts.map +0 -1
  240. package/dist/compliance/advanced-compliance-system.js.map +0 -1
  241. package/dist/compliance/index.d.ts.map +0 -1
  242. package/dist/compliance/index.js.map +0 -1
  243. package/dist/config/snow-flow-config.d.ts.map +0 -1
  244. package/dist/config/snow-flow-config.js.map +0 -1
  245. package/dist/documentation/index.d.ts.map +0 -1
  246. package/dist/documentation/index.js.map +0 -1
  247. package/dist/documentation/self-documenting-system.d.ts.map +0 -1
  248. package/dist/documentation/self-documenting-system.js.map +0 -1
  249. package/dist/dynamic-version.d.ts.map +0 -1
  250. package/dist/dynamic-version.js.map +0 -1
  251. package/dist/healing/index.d.ts.map +0 -1
  252. package/dist/healing/index.js.map +0 -1
  253. package/dist/healing/self-healing-system.d.ts.map +0 -1
  254. package/dist/healing/self-healing-system.js.map +0 -1
  255. package/dist/health/system-health.d.ts.map +0 -1
  256. package/dist/health/system-health.js.map +0 -1
  257. package/dist/index.d.ts.map +0 -1
  258. package/dist/index.js.map +0 -1
  259. package/dist/intelligence/acl-analyzer.d.ts.map +0 -1
  260. package/dist/intelligence/acl-analyzer.js.map +0 -1
  261. package/dist/intelligence/auto-resolution-engine.d.ts.map +0 -1
  262. package/dist/intelligence/auto-resolution-engine.js.map +0 -1
  263. package/dist/intelligence/gap-analysis-engine.d.ts.map +0 -1
  264. package/dist/intelligence/gap-analysis-engine.js.map +0 -1
  265. package/dist/intelligence/manual-instructions-generator.d.ts.map +0 -1
  266. package/dist/intelligence/manual-instructions-generator.js.map +0 -1
  267. package/dist/intelligence/mcp-coverage-analyzer.d.ts.map +0 -1
  268. package/dist/intelligence/mcp-coverage-analyzer.js.map +0 -1
  269. package/dist/intelligence/multi-pass-requirements-analyzer.d.ts.map +0 -1
  270. package/dist/intelligence/multi-pass-requirements-analyzer.js.map +0 -1
  271. package/dist/intelligence/performance-recommendations-engine.d.ts.map +0 -1
  272. package/dist/intelligence/performance-recommendations-engine.js.map +0 -1
  273. package/dist/intelligence/requirements-analyzer.d.ts.map +0 -1
  274. package/dist/intelligence/requirements-analyzer.js.map +0 -1
  275. package/dist/intelligence/task-analyzer.d.ts.map +0 -1
  276. package/dist/intelligence/task-analyzer.js.map +0 -1
  277. package/dist/managers/scope-manager.d.ts.map +0 -1
  278. package/dist/managers/scope-manager.js.map +0 -1
  279. package/dist/mcp/advanced/servicenow-advanced-features-mcp.d.ts.map +0 -1
  280. package/dist/mcp/advanced/servicenow-advanced-features-mcp.js.map +0 -1
  281. package/dist/mcp/base-mcp-server.d.ts.map +0 -1
  282. package/dist/mcp/base-mcp-server.js.map +0 -1
  283. package/dist/mcp/example-refactored-server.d.ts.map +0 -1
  284. package/dist/mcp/example-refactored-server.js.map +0 -1
  285. package/dist/mcp/http-transport-wrapper.d.ts.map +0 -1
  286. package/dist/mcp/http-transport-wrapper.js.map +0 -1
  287. package/dist/mcp/mcp-wrapper.d.ts.map +0 -1
  288. package/dist/mcp/mcp-wrapper.js.map +0 -1
  289. package/dist/mcp/service-discovery-client.d.ts.map +0 -1
  290. package/dist/mcp/service-discovery-client.js.map +0 -1
  291. package/dist/mcp/servicenow-automation-mcp-refactored.d.ts.map +0 -1
  292. package/dist/mcp/servicenow-automation-mcp-refactored.js.map +0 -1
  293. package/dist/mcp/servicenow-automation-mcp.d.ts.map +0 -1
  294. package/dist/mcp/servicenow-automation-mcp.js.map +0 -1
  295. package/dist/mcp/servicenow-deployment-mcp-refactored.d.ts.map +0 -1
  296. package/dist/mcp/servicenow-deployment-mcp-refactored.js.map +0 -1
  297. package/dist/mcp/servicenow-deployment-mcp.d.ts.map +0 -1
  298. package/dist/mcp/servicenow-deployment-mcp.js.map +0 -1
  299. package/dist/mcp/servicenow-flow-composer-mcp-refactored.d.ts.map +0 -1
  300. package/dist/mcp/servicenow-flow-composer-mcp-refactored.js.map +0 -1
  301. package/dist/mcp/servicenow-flow-composer-mcp.d.ts.map +0 -1
  302. package/dist/mcp/servicenow-flow-composer-mcp.js.map +0 -1
  303. package/dist/mcp/servicenow-graph-memory-mcp-refactored.d.ts.map +0 -1
  304. package/dist/mcp/servicenow-graph-memory-mcp-refactored.js.map +0 -1
  305. package/dist/mcp/servicenow-graph-memory-mcp.d.ts.map +0 -1
  306. package/dist/mcp/servicenow-graph-memory-mcp.js.map +0 -1
  307. package/dist/mcp/servicenow-integration-mcp-refactored.d.ts.map +0 -1
  308. package/dist/mcp/servicenow-integration-mcp-refactored.js.map +0 -1
  309. package/dist/mcp/servicenow-integration-mcp.d.ts.map +0 -1
  310. package/dist/mcp/servicenow-integration-mcp.js.map +0 -1
  311. package/dist/mcp/servicenow-intelligent-mcp-refactored.d.ts.map +0 -1
  312. package/dist/mcp/servicenow-intelligent-mcp-refactored.js.map +0 -1
  313. package/dist/mcp/servicenow-intelligent-mcp.d.ts.map +0 -1
  314. package/dist/mcp/servicenow-intelligent-mcp.js.map +0 -1
  315. package/dist/mcp/servicenow-mcp-server.d.ts.map +0 -1
  316. package/dist/mcp/servicenow-mcp-server.js.map +0 -1
  317. package/dist/mcp/servicenow-memory-mcp.d.ts.map +0 -1
  318. package/dist/mcp/servicenow-memory-mcp.js.map +0 -1
  319. package/dist/mcp/servicenow-operations-mcp-refactored.d.ts.map +0 -1
  320. package/dist/mcp/servicenow-operations-mcp-refactored.js.map +0 -1
  321. package/dist/mcp/servicenow-operations-mcp.d.ts.map +0 -1
  322. package/dist/mcp/servicenow-operations-mcp.js.map +0 -1
  323. package/dist/mcp/servicenow-platform-development-mcp-refactored.d.ts.map +0 -1
  324. package/dist/mcp/servicenow-platform-development-mcp-refactored.js.map +0 -1
  325. package/dist/mcp/servicenow-platform-development-mcp.d.ts.map +0 -1
  326. package/dist/mcp/servicenow-platform-development-mcp.js.map +0 -1
  327. package/dist/mcp/servicenow-progressive-indexer.d.ts.map +0 -1
  328. package/dist/mcp/servicenow-progressive-indexer.js.map +0 -1
  329. package/dist/mcp/servicenow-reporting-analytics-mcp-refactored.d.ts.map +0 -1
  330. package/dist/mcp/servicenow-reporting-analytics-mcp-refactored.js.map +0 -1
  331. package/dist/mcp/servicenow-reporting-analytics-mcp.d.ts.map +0 -1
  332. package/dist/mcp/servicenow-reporting-analytics-mcp.js.map +0 -1
  333. package/dist/mcp/servicenow-security-compliance-mcp-refactored.d.ts.map +0 -1
  334. package/dist/mcp/servicenow-security-compliance-mcp-refactored.js.map +0 -1
  335. package/dist/mcp/servicenow-security-compliance-mcp.d.ts.map +0 -1
  336. package/dist/mcp/servicenow-security-compliance-mcp.js.map +0 -1
  337. package/dist/mcp/servicenow-update-set-mcp-refactored.d.ts.map +0 -1
  338. package/dist/mcp/servicenow-update-set-mcp-refactored.js.map +0 -1
  339. package/dist/mcp/servicenow-update-set-mcp.d.ts.map +0 -1
  340. package/dist/mcp/servicenow-update-set-mcp.js.map +0 -1
  341. package/dist/mcp/servicenow-xml-flow-mcp.d.ts.map +0 -1
  342. package/dist/mcp/servicenow-xml-flow-mcp.js.map +0 -1
  343. package/dist/mcp/shared/agent-context-provider.d.ts.map +0 -1
  344. package/dist/mcp/shared/agent-context-provider.js.map +0 -1
  345. package/dist/mcp/shared/base-mcp-server.d.ts.map +0 -1
  346. package/dist/mcp/shared/base-mcp-server.js.map +0 -1
  347. package/dist/mcp/shared/mcp-memory-manager.d.ts.map +0 -1
  348. package/dist/mcp/shared/mcp-memory-manager.js.map +0 -1
  349. package/dist/mcp/shared/mcp-resource-manager.d.ts.map +0 -1
  350. package/dist/mcp/shared/mcp-resource-manager.js.map +0 -1
  351. package/dist/mcp/snow-flow-mcp.d.ts.map +0 -1
  352. package/dist/mcp/snow-flow-mcp.js.map +0 -1
  353. package/dist/mcp/start-all-mcp-servers.d.ts.map +0 -1
  354. package/dist/mcp/start-all-mcp-servers.js.map +0 -1
  355. package/dist/mcp/start-servicenow-mcp.d.ts.map +0 -1
  356. package/dist/mcp/start-servicenow-mcp.js.map +0 -1
  357. package/dist/mcp/test-simple-mcp.d.ts.map +0 -1
  358. package/dist/mcp/test-simple-mcp.js.map +0 -1
  359. package/dist/memory/hierarchical-memory-system.d.ts +0 -90
  360. package/dist/memory/hierarchical-memory-system.d.ts.map +0 -1
  361. package/dist/memory/hierarchical-memory-system.js +0 -400
  362. package/dist/memory/hierarchical-memory-system.js.map +0 -1
  363. package/dist/memory/index.d.ts +0 -9
  364. package/dist/memory/index.d.ts.map +0 -1
  365. package/dist/memory/index.js +0 -20
  366. package/dist/memory/index.js.map +0 -1
  367. package/dist/memory/mcp-integration-example.d.ts +0 -6
  368. package/dist/memory/mcp-integration-example.d.ts.map +0 -1
  369. package/dist/memory/mcp-integration-example.js +0 -281
  370. package/dist/memory/mcp-integration-example.js.map +0 -1
  371. package/dist/memory/memory-client.d.ts +0 -199
  372. package/dist/memory/memory-client.d.ts.map +0 -1
  373. package/dist/memory/memory-client.js +0 -364
  374. package/dist/memory/memory-client.js.map +0 -1
  375. package/dist/memory/memory-manager.d.ts +0 -29
  376. package/dist/memory/memory-manager.d.ts.map +0 -1
  377. package/dist/memory/memory-manager.js +0 -280
  378. package/dist/memory/memory-manager.js.map +0 -1
  379. package/dist/memory/memory-operations.d.ts +0 -179
  380. package/dist/memory/memory-operations.d.ts.map +0 -1
  381. package/dist/memory/memory-operations.js +0 -691
  382. package/dist/memory/memory-operations.js.map +0 -1
  383. package/dist/memory/memory-system.d.ts +0 -152
  384. package/dist/memory/memory-system.d.ts.map +0 -1
  385. package/dist/memory/memory-system.js +0 -632
  386. package/dist/memory/memory-system.js.map +0 -1
  387. package/dist/memory/memory-test.d.ts +0 -6
  388. package/dist/memory/memory-test.d.ts.map +0 -1
  389. package/dist/memory/memory-test.js +0 -161
  390. package/dist/memory/memory-test.js.map +0 -1
  391. package/dist/memory/servicenow-artifact-indexer.d.ts +0 -119
  392. package/dist/memory/servicenow-artifact-indexer.d.ts.map +0 -1
  393. package/dist/memory/servicenow-artifact-indexer.js +0 -560
  394. package/dist/memory/servicenow-artifact-indexer.js.map +0 -1
  395. package/dist/memory/snow-flow-memory-patterns.d.ts +0 -213
  396. package/dist/memory/snow-flow-memory-patterns.d.ts.map +0 -1
  397. package/dist/memory/snow-flow-memory-patterns.js +0 -200
  398. package/dist/memory/snow-flow-memory-patterns.js.map +0 -1
  399. package/dist/memory/snow-memory.d.ts +0 -54
  400. package/dist/memory/snow-memory.d.ts.map +0 -1
  401. package/dist/memory/snow-memory.js +0 -301
  402. package/dist/memory/snow-memory.js.map +0 -1
  403. package/dist/memory/swarm-memory.d.ts +0 -135
  404. package/dist/memory/swarm-memory.d.ts.map +0 -1
  405. package/dist/memory/swarm-memory.js +0 -378
  406. package/dist/memory/swarm-memory.js.map +0 -1
  407. package/dist/monitoring/enhanced-monitoring-system.d.ts.map +0 -1
  408. package/dist/monitoring/enhanced-monitoring-system.js.map +0 -1
  409. package/dist/monitoring/performance-tracker.d.ts.map +0 -1
  410. package/dist/monitoring/performance-tracker.js.map +0 -1
  411. package/dist/optimization/cost-optimization-engine.d.ts.map +0 -1
  412. package/dist/optimization/cost-optimization-engine.js.map +0 -1
  413. package/dist/optimization/index.d.ts.map +0 -1
  414. package/dist/optimization/index.js.map +0 -1
  415. package/dist/orchestration/discovery/service-discovery.d.ts.map +0 -1
  416. package/dist/orchestration/discovery/service-discovery.js.map +0 -1
  417. package/dist/orchestration/distributed-orchestrator.d.ts.map +0 -1
  418. package/dist/orchestration/distributed-orchestrator.js.map +0 -1
  419. package/dist/orchestration/distribution/task-distribution-engine.d.ts.map +0 -1
  420. package/dist/orchestration/distribution/task-distribution-engine.js.map +0 -1
  421. package/dist/orchestration/interfaces/distributed-orchestration.interface.d.ts.map +0 -1
  422. package/dist/orchestration/interfaces/distributed-orchestration.interface.js.map +0 -1
  423. package/dist/orchestration/protocols/mcpx-protocol.d.ts.map +0 -1
  424. package/dist/orchestration/protocols/mcpx-protocol.js.map +0 -1
  425. package/dist/orchestration/state/distributed-state-manager.d.ts.map +0 -1
  426. package/dist/orchestration/state/distributed-state-manager.js.map +0 -1
  427. package/dist/orchestrator/flow-composer.d.ts.map +0 -1
  428. package/dist/orchestrator/flow-composer.js.map +0 -1
  429. package/dist/orchestrator/flow-pattern-templates.d.ts.map +0 -1
  430. package/dist/orchestrator/flow-pattern-templates.js.map +0 -1
  431. package/dist/orchestrator/flow-subflow-decision-engine.d.ts.map +0 -1
  432. package/dist/orchestrator/flow-subflow-decision-engine.js.map +0 -1
  433. package/dist/orchestrator/flow-validation-engine.d.ts.map +0 -1
  434. package/dist/orchestrator/flow-validation-engine.js.map +0 -1
  435. package/dist/orchestrator/snow-orchestrator.d.ts.map +0 -1
  436. package/dist/orchestrator/snow-orchestrator.js.map +0 -1
  437. package/dist/orchestrator/subflow-creation-handler.d.ts.map +0 -1
  438. package/dist/orchestrator/subflow-creation-handler.js.map +0 -1
  439. package/dist/patterns/adaptive-patterns.d.ts.map +0 -1
  440. package/dist/patterns/adaptive-patterns.js.map +0 -1
  441. package/dist/queen/advanced-integration-test.d.ts.map +0 -1
  442. package/dist/queen/advanced-integration-test.js.map +0 -1
  443. package/dist/queen/agent-factory.d.ts.map +0 -1
  444. package/dist/queen/agent-factory.js.map +0 -1
  445. package/dist/queen/index.d.ts.map +0 -1
  446. package/dist/queen/index.js.map +0 -1
  447. package/dist/queen/integration-example.d.ts.map +0 -1
  448. package/dist/queen/integration-example.js.map +0 -1
  449. package/dist/queen/integration-test.d.ts.map +0 -1
  450. package/dist/queen/integration-test.js.map +0 -1
  451. package/dist/queen/mcp-execution-bridge.d.ts.map +0 -1
  452. package/dist/queen/mcp-execution-bridge.js.map +0 -1
  453. package/dist/queen/mock-mcp-client.d.ts.map +0 -1
  454. package/dist/queen/mock-mcp-client.js.map +0 -1
  455. package/dist/queen/neural-learning.d.ts.map +0 -1
  456. package/dist/queen/neural-learning.js.map +0 -1
  457. package/dist/queen/parallel-agent-engine.d.ts.map +0 -1
  458. package/dist/queen/parallel-agent-engine.js.map +0 -1
  459. package/dist/queen/queen-memory-system.d.ts.map +0 -1
  460. package/dist/queen/queen-memory-system.js.map +0 -1
  461. package/dist/queen/queen-memory.d.ts.map +0 -1
  462. package/dist/queen/queen-memory.js.map +0 -1
  463. package/dist/queen/run-integration-tests.d.ts.map +0 -1
  464. package/dist/queen/run-integration-tests.js.map +0 -1
  465. package/dist/queen/servicenow-queen.d.ts.map +0 -1
  466. package/dist/queen/servicenow-queen.js.map +0 -1
  467. package/dist/queen/types.d.ts.map +0 -1
  468. package/dist/queen/types.js.map +0 -1
  469. package/dist/rollback/smart-rollback-system.d.ts.map +0 -1
  470. package/dist/rollback/smart-rollback-system.js.map +0 -1
  471. package/dist/snow-flow-system.d.ts.map +0 -1
  472. package/dist/snow-flow-system.js.map +0 -1
  473. package/dist/sparc/coordinators/adaptive-coordinator.d.ts.map +0 -1
  474. package/dist/sparc/coordinators/adaptive-coordinator.js.map +0 -1
  475. package/dist/sparc/coordinators/team-coordinator.d.ts.map +0 -1
  476. package/dist/sparc/coordinators/team-coordinator.js.map +0 -1
  477. package/dist/sparc/modes/team-modes.d.ts.map +0 -1
  478. package/dist/sparc/modes/team-modes.js.map +0 -1
  479. package/dist/sparc/sparc-help.d.ts.map +0 -1
  480. package/dist/sparc/sparc-help.js.map +0 -1
  481. package/dist/sparc/team-sparc.d.ts.map +0 -1
  482. package/dist/sparc/team-sparc.js.map +0 -1
  483. package/dist/sparc/teams/application-team.d.ts.map +0 -1
  484. package/dist/sparc/teams/application-team.js.map +0 -1
  485. package/dist/sparc/teams/flow-team.d.ts.map +0 -1
  486. package/dist/sparc/teams/flow-team.js.map +0 -1
  487. package/dist/sparc/teams/widget-team.d.ts.map +0 -1
  488. package/dist/sparc/teams/widget-team.js.map +0 -1
  489. package/dist/specialists/app-specialists.d.ts.map +0 -1
  490. package/dist/specialists/app-specialists.js.map +0 -1
  491. package/dist/specialists/base-specialist.d.ts.map +0 -1
  492. package/dist/specialists/base-specialist.js.map +0 -1
  493. package/dist/specialists/flow-specialists.d.ts.map +0 -1
  494. package/dist/specialists/flow-specialists.js.map +0 -1
  495. package/dist/specialists/individual-specialists.d.ts.map +0 -1
  496. package/dist/specialists/individual-specialists.js.map +0 -1
  497. package/dist/specialists/widget-specialists.d.ts.map +0 -1
  498. package/dist/specialists/widget-specialists.js.map +0 -1
  499. package/dist/strategies/global-scope-strategy.d.ts.map +0 -1
  500. package/dist/strategies/global-scope-strategy.js.map +0 -1
  501. package/dist/teams/adaptive-team.d.ts.map +0 -1
  502. package/dist/teams/adaptive-team.js.map +0 -1
  503. package/dist/teams/application-team.d.ts.map +0 -1
  504. package/dist/teams/application-team.js.map +0 -1
  505. package/dist/teams/base-team.d.ts.map +0 -1
  506. package/dist/teams/base-team.js.map +0 -1
  507. package/dist/teams/flow-team.d.ts.map +0 -1
  508. package/dist/teams/flow-team.js.map +0 -1
  509. package/dist/teams/widget-team.d.ts.map +0 -1
  510. package/dist/teams/widget-team.js.map +0 -1
  511. package/dist/testing/integration-test-suite.d.ts.map +0 -1
  512. package/dist/testing/integration-test-suite.js.map +0 -1
  513. package/dist/types/index.d.ts.map +0 -1
  514. package/dist/types/index.js.map +0 -1
  515. package/dist/types/servicenow.types.d.ts.map +0 -1
  516. package/dist/types/servicenow.types.js.map +0 -1
  517. package/dist/types/snow-flow.types.d.ts.map +0 -1
  518. package/dist/types/snow-flow.types.js.map +0 -1
  519. package/dist/types/todo.types.d.ts.map +0 -1
  520. package/dist/types/todo.types.js.map +0 -1
  521. package/dist/utils/action-type-cache.d.ts.map +0 -1
  522. package/dist/utils/action-type-cache.js.map +0 -1
  523. package/dist/utils/agent-detector.d.ts.map +0 -1
  524. package/dist/utils/agent-detector.js.map +0 -1
  525. package/dist/utils/artifact-tracker.d.ts.map +0 -1
  526. package/dist/utils/artifact-tracker.js.map +0 -1
  527. package/dist/utils/dependency-detector.d.ts.map +0 -1
  528. package/dist/utils/dependency-detector.js.map +0 -1
  529. package/dist/utils/deployment-metadata-handler.d.ts.map +0 -1
  530. package/dist/utils/deployment-metadata-handler.js.map +0 -1
  531. package/dist/utils/error-recovery.d.ts.map +0 -1
  532. package/dist/utils/error-recovery.js.map +0 -1
  533. package/dist/utils/flow-api-discovery.d.ts.map +0 -1
  534. package/dist/utils/flow-api-discovery.js.map +0 -1
  535. package/dist/utils/flow-xml-generator.d.ts.map +0 -1
  536. package/dist/utils/flow-xml-generator.js.map +0 -1
  537. package/dist/utils/logger.d.ts.map +0 -1
  538. package/dist/utils/logger.js.map +0 -1
  539. package/dist/utils/mcp-auth-middleware.d.ts.map +0 -1
  540. package/dist/utils/mcp-auth-middleware.js.map +0 -1
  541. package/dist/utils/mcp-config-manager.d.ts.map +0 -1
  542. package/dist/utils/mcp-config-manager.js.map +0 -1
  543. package/dist/utils/mcp-server-manager.d.ts.map +0 -1
  544. package/dist/utils/mcp-server-manager.js.map +0 -1
  545. package/dist/utils/mcp-tool-registry.d.ts.map +0 -1
  546. package/dist/utils/mcp-tool-registry.js.map +0 -1
  547. package/dist/utils/migrate-claude-flow.d.ts.map +0 -1
  548. package/dist/utils/migrate-claude-flow.js.map +0 -1
  549. package/dist/utils/migrate-snow-flow.d.ts.map +0 -1
  550. package/dist/utils/migrate-snow-flow.js.map +0 -1
  551. package/dist/utils/oauth-html-templates.d.ts.map +0 -1
  552. package/dist/utils/oauth-html-templates.js.map +0 -1
  553. package/dist/utils/scope-utils.d.ts.map +0 -1
  554. package/dist/utils/scope-utils.js.map +0 -1
  555. package/dist/utils/servicenow-client.d.ts.map +0 -1
  556. package/dist/utils/servicenow-client.js.map +0 -1
  557. package/dist/utils/servicenow-id-generator.d.ts.map +0 -1
  558. package/dist/utils/servicenow-id-generator.js.map +0 -1
  559. package/dist/utils/snow-memory-manager.d.ts.map +0 -1
  560. package/dist/utils/snow-memory-manager.js.map +0 -1
  561. package/dist/utils/snow-oauth-old.d.ts.map +0 -1
  562. package/dist/utils/snow-oauth-old.js.map +0 -1
  563. package/dist/utils/snow-oauth.d.ts.map +0 -1
  564. package/dist/utils/snow-oauth.js.map +0 -1
  565. package/dist/utils/template-engine.d.ts.map +0 -1
  566. package/dist/utils/template-engine.js.map +0 -1
  567. package/dist/utils/theme-manager.d.ts.map +0 -1
  568. package/dist/utils/theme-manager.js.map +0 -1
  569. package/dist/utils/unified-auth-store.d.ts.map +0 -1
  570. package/dist/utils/unified-auth-store.js.map +0 -1
  571. package/dist/utils/update-set-importer.d.ts.map +0 -1
  572. package/dist/utils/update-set-importer.js.map +0 -1
  573. package/dist/utils/update-set-xml-packager.d.ts.map +0 -1
  574. package/dist/utils/update-set-xml-packager.js.map +0 -1
  575. package/dist/utils/widget-template-generator.d.ts.map +0 -1
  576. package/dist/utils/widget-template-generator.js.map +0 -1
  577. package/dist/version.d.ts.map +0 -1
  578. package/dist/version.js.map +0 -1
  579. package/memory/agents/README.md +0 -31
  580. package/memory/claude-flow-data.json +0 -5
  581. package/memory/servicenow_artifacts/000d9224c895221055906c7518aa2d3d.json +0 -30
  582. package/memory/servicenow_artifacts/0196b66173303010e46b4a2214f6a7a2.json +0 -36
  583. package/memory/servicenow_artifacts/125e5d1d837e2a102a7ea130ceaad397.json +0 -30
  584. package/memory/servicenow_artifacts/7637c1f2b7112210a5e5911cde11a972.json +0 -30
  585. package/memory/servicenow_artifacts/default_documentation_tables_1754056582292.json +0 -55
  586. package/memory/servicenow_artifacts/default_documentation_tables_1754057477189.json +0 -55
  587. package/memory/sessions/README.md +0 -32
  588. package/memory/update-set-sessions/01f82af583faea102a7ea130ceaad3d4.json +0 -9
  589. package/memory/update-set-sessions/27718fb983faea102a7ea130ceaad34b.json +0 -9
  590. package/memory/update-set-sessions/412e9bf6833e22502a7ea130ceaad30a.json +0 -8
  591. package/memory/update-set-sessions/66fc5a79837aea102a7ea130ceaad3ab.json +0 -9
  592. package/memory/update-set-sessions/71a30ff5837eea102a7ea130ceaad37f.json +0 -9
  593. package/memory/update-set-sessions/74fba27983faea102a7ea130ceaad3bd.json +0 -9
  594. package/memory/update-set-sessions/a0b147b5837eea102a7ea130ceaad344.json +0 -58
  595. package/memory/update-set-sessions/b13f5eb983baea102a7ea130ceaad33e.json +0 -9
@@ -0,0 +1,1345 @@
1
+ /**
2
+ * 🚀 PERFORMANCE FIX: Enhanced Monitoring System
3
+ * Advanced real-time monitoring with predictive analytics, alerting, and dashboards
4
+ *
5
+ * Addresses beta testing feedback on performance monitoring gaps
6
+ */
7
+
8
+ import { EventEmitter } from 'events';
9
+ import { PerformanceTracker, PerformanceMetric, PerformanceReport } from './performance-tracker';
10
+ import { MemorySystem } from '../memory/memory-system';
11
+ import { Logger } from '../utils/logger';
12
+ import WebSocket from 'ws';
13
+ import http from 'http';
14
+ import path from 'path';
15
+ import fs from 'fs';
16
+
17
+ export interface MonitoringConfig {
18
+ realTimeEnabled: boolean;
19
+ predictiveAnalyticsEnabled: boolean;
20
+ alertingEnabled: boolean;
21
+ dashboardEnabled: boolean;
22
+ websocketPort: number;
23
+ alertThresholds: AlertThresholds;
24
+ retentionPeriods: RetentionPeriods;
25
+ }
26
+
27
+ export interface AlertThresholds {
28
+ cpuUsage: number;
29
+ memoryUsage: number;
30
+ diskUsage: number;
31
+ responseTime: number;
32
+ errorRate: number;
33
+ cacheHitRate: number;
34
+ queueDepth: number;
35
+ }
36
+
37
+ export interface RetentionPeriods {
38
+ realTimeMetrics: number; // milliseconds
39
+ hourlyAggregates: number;
40
+ dailyAggregates: number;
41
+ weeklyAggregates: number;
42
+ }
43
+
44
+ export interface SystemHealth {
45
+ overall: 'healthy' | 'warning' | 'critical' | 'unknown';
46
+ components: {
47
+ cpu: ComponentHealth;
48
+ memory: ComponentHealth;
49
+ disk: ComponentHealth;
50
+ network: ComponentHealth;
51
+ database: ComponentHealth;
52
+ cache: ComponentHealth;
53
+ api: ComponentHealth;
54
+ };
55
+ alerts: ActiveAlert[];
56
+ recommendations: string[];
57
+ predictedIssues: PredictedIssue[];
58
+ }
59
+
60
+ export interface ComponentHealth {
61
+ status: 'healthy' | 'warning' | 'critical' | 'unknown';
62
+ value: number;
63
+ threshold: number;
64
+ trend: 'improving' | 'stable' | 'degrading';
65
+ lastUpdated: Date;
66
+ details: string;
67
+ }
68
+
69
+ export interface ActiveAlert {
70
+ id: string;
71
+ severity: 'low' | 'medium' | 'high' | 'critical';
72
+ component: string;
73
+ message: string;
74
+ timestamp: Date;
75
+ acknowledged: boolean;
76
+ count: number;
77
+ firstSeen: Date;
78
+ }
79
+
80
+ export interface PredictedIssue {
81
+ type: 'resource_exhaustion' | 'performance_degradation' | 'capacity_limit' | 'error_spike';
82
+ component: string;
83
+ description: string;
84
+ probability: number;
85
+ estimatedTime: Date;
86
+ impact: 'low' | 'medium' | 'high' | 'critical';
87
+ recommendations: string[];
88
+ }
89
+
90
+ export interface PerformanceTrend {
91
+ metric: string;
92
+ period: 'hour' | 'day' | 'week' | 'month';
93
+ trend: 'improving' | 'stable' | 'degrading';
94
+ percentageChange: number;
95
+ currentValue: number;
96
+ historicalAverage: number;
97
+ volatility: number;
98
+ }
99
+
100
+ export interface ResourceForecast {
101
+ resource: string;
102
+ currentUsage: number;
103
+ predictedUsage: number;
104
+ timeHorizon: number; // hours
105
+ confidence: number;
106
+ exhaustionDate?: Date;
107
+ recommendations: string[];
108
+ }
109
+
110
+ export class EnhancedMonitoringSystem extends EventEmitter {
111
+ private performanceTracker: PerformanceTracker;
112
+ private memory: MemorySystem;
113
+ private logger: Logger;
114
+ private config: MonitoringConfig;
115
+ private websocketServer?: WebSocket.Server;
116
+ private httpServer?: http.Server;
117
+ private activeAlerts: Map<string, ActiveAlert> = new Map();
118
+ private metricHistory: Map<string, number[]> = new Map();
119
+ private systemHealth: SystemHealth;
120
+ private monitoringInterval?: NodeJS.Timeout;
121
+ private alertingInterval?: NodeJS.Timeout;
122
+ private predictionInterval?: NodeJS.Timeout;
123
+ private connectedClients: Set<WebSocket> = new Set();
124
+
125
+ constructor(
126
+ performanceTracker: PerformanceTracker,
127
+ memory: MemorySystem,
128
+ config?: Partial<MonitoringConfig>
129
+ ) {
130
+ super();
131
+
132
+ this.performanceTracker = performanceTracker;
133
+ this.memory = memory;
134
+ this.logger = new Logger('EnhancedMonitoringSystem');
135
+
136
+ this.config = {
137
+ realTimeEnabled: true,
138
+ predictiveAnalyticsEnabled: true,
139
+ alertingEnabled: true,
140
+ dashboardEnabled: true,
141
+ websocketPort: 8090,
142
+ alertThresholds: {
143
+ cpuUsage: 80,
144
+ memoryUsage: 85,
145
+ diskUsage: 90,
146
+ responseTime: 5000,
147
+ errorRate: 10,
148
+ cacheHitRate: 50,
149
+ queueDepth: 100
150
+ },
151
+ retentionPeriods: {
152
+ realTimeMetrics: 3600000, // 1 hour
153
+ hourlyAggregates: 2592000000, // 30 days
154
+ dailyAggregates: 7776000000, // 90 days
155
+ weeklyAggregates: 31536000000 // 1 year
156
+ },
157
+ ...config
158
+ };
159
+
160
+ this.systemHealth = this.initializeSystemHealth();
161
+
162
+ this.logger.info('🚀 Enhanced Monitoring System initialized', {
163
+ realTimeEnabled: this.config.realTimeEnabled,
164
+ predictiveAnalyticsEnabled: this.config.predictiveAnalyticsEnabled,
165
+ alertingEnabled: this.config.alertingEnabled,
166
+ dashboardEnabled: this.config.dashboardEnabled
167
+ });
168
+ }
169
+
170
+ /**
171
+ * Start the enhanced monitoring system
172
+ */
173
+ async start(): Promise<void> {
174
+ this.logger.info('🚀 Starting Enhanced Monitoring System...');
175
+
176
+ // Initialize monitoring tables
177
+ await this.createMonitoringTables();
178
+
179
+ // Start real-time monitoring
180
+ if (this.config.realTimeEnabled) {
181
+ this.startRealTimeMonitoring();
182
+ }
183
+
184
+ // Start alerting system
185
+ if (this.config.alertingEnabled) {
186
+ this.startAlertingSystem();
187
+ }
188
+
189
+ // Start predictive analytics
190
+ if (this.config.predictiveAnalyticsEnabled) {
191
+ this.startPredictiveAnalytics();
192
+ }
193
+
194
+ // Start dashboard server
195
+ if (this.config.dashboardEnabled) {
196
+ await this.startDashboardServer();
197
+ }
198
+
199
+ // Set up performance tracker integration
200
+ this.setupPerformanceTrackerIntegration();
201
+
202
+ this.logger.info('✅ Enhanced Monitoring System started successfully');
203
+ }
204
+
205
+ /**
206
+ * Get current system health status
207
+ */
208
+ async getSystemHealth(): Promise<SystemHealth> {
209
+ await this.updateSystemHealth();
210
+ return { ...this.systemHealth };
211
+ }
212
+
213
+ /**
214
+ * Get performance trends for specified periods
215
+ */
216
+ async getPerformanceTrends(periods: string[] = ['hour', 'day', 'week']): Promise<PerformanceTrend[]> {
217
+ const trends: PerformanceTrend[] = [];
218
+
219
+ const metrics = [
220
+ 'response_time',
221
+ 'throughput',
222
+ 'error_rate',
223
+ 'cpu_usage',
224
+ 'memory_usage',
225
+ 'cache_hit_rate'
226
+ ];
227
+
228
+ for (const metric of metrics) {
229
+ for (const period of periods) {
230
+ const trend = await this.calculateTrend(metric, period as 'hour' | 'day' | 'week');
231
+ if (trend) {
232
+ trends.push(trend);
233
+ }
234
+ }
235
+ }
236
+
237
+ return trends.sort((a, b) => {
238
+ // Sort by severity: degrading trends first, then by impact
239
+ if (a.trend === 'degrading' && b.trend !== 'degrading') return -1;
240
+ if (b.trend === 'degrading' && a.trend !== 'degrading') return 1;
241
+ return Math.abs(b.percentageChange) - Math.abs(a.percentageChange);
242
+ });
243
+ }
244
+
245
+ /**
246
+ * Get resource usage forecasts
247
+ */
248
+ async getResourceForecasts(timeHorizonHours: number = 24): Promise<ResourceForecast[]> {
249
+ const forecasts: ResourceForecast[] = [];
250
+
251
+ const resources = ['cpu', 'memory', 'disk', 'network', 'database_connections'];
252
+
253
+ for (const resource of resources) {
254
+ const forecast = await this.generateResourceForecast(resource, timeHorizonHours);
255
+ if (forecast) {
256
+ forecasts.push(forecast);
257
+ }
258
+ }
259
+
260
+ return forecasts.sort((a, b) => {
261
+ // Sort by urgency: resources approaching exhaustion first
262
+ if (a.exhaustionDate && b.exhaustionDate) {
263
+ return a.exhaustionDate.getTime() - b.exhaustionDate.getTime();
264
+ }
265
+ if (a.exhaustionDate && !b.exhaustionDate) return -1;
266
+ if (!a.exhaustionDate && b.exhaustionDate) return 1;
267
+ return b.predictedUsage - a.predictedUsage;
268
+ });
269
+ }
270
+
271
+ /**
272
+ * Generate comprehensive monitoring report
273
+ */
274
+ async generateMonitoringReport(period: 'hour' | 'day' | 'week' | 'month' = 'day'): Promise<any> {
275
+ this.logger.info('📊 Generating comprehensive monitoring report', { period });
276
+
277
+ const [
278
+ systemHealth,
279
+ performanceReport,
280
+ trends,
281
+ forecasts,
282
+ alerts,
283
+ recommendations
284
+ ] = await Promise.all([
285
+ this.getSystemHealth(),
286
+ this.performanceTracker.generateReport(period),
287
+ this.getPerformanceTrends([period]),
288
+ this.getResourceForecasts(period === 'hour' ? 24 : 168), // 24h or 1 week
289
+ this.getActiveAlerts(),
290
+ this.generateSmartRecommendations()
291
+ ]);
292
+
293
+ const report = {
294
+ timestamp: new Date(),
295
+ period,
296
+ summary: {
297
+ overallHealth: systemHealth.overall,
298
+ totalAlerts: alerts.length,
299
+ criticalIssues: alerts.filter(a => a.severity === 'critical').length,
300
+ performanceScore: this.calculatePerformanceScore(performanceReport, systemHealth),
301
+ trendsCount: trends.length,
302
+ forecastsCount: forecasts.length
303
+ },
304
+ systemHealth,
305
+ performance: performanceReport,
306
+ trends: trends.slice(0, 10), // Top 10 trends
307
+ forecasts: forecasts.slice(0, 5), // Top 5 forecasts
308
+ alerts: alerts.slice(0, 20), // Recent 20 alerts
309
+ recommendations: recommendations.slice(0, 10), // Top 10 recommendations
310
+ metadata: {
311
+ monitoringSystemVersion: '2.0.0',
312
+ reportGenerationTime: Date.now() - Date.now(), // Will be updated at end
313
+ includedComponents: Object.keys(systemHealth.components),
314
+ dataPoints: await this.getDataPointCount(period)
315
+ }
316
+ };
317
+
318
+ // Update generation time
319
+ report.metadata.reportGenerationTime = Date.now() - report.timestamp.getTime();
320
+
321
+ // Store report
322
+ await this.memory.store(`monitoring_report_${period}_${Date.now()}`, report,
323
+ this.config.retentionPeriods.dailyAggregates);
324
+
325
+ this.logger.info('✅ Monitoring report generated', {
326
+ period,
327
+ overallHealth: systemHealth.overall,
328
+ alertCount: alerts.length,
329
+ generationTime: report.metadata.reportGenerationTime
330
+ });
331
+
332
+ return report;
333
+ }
334
+
335
+ /**
336
+ * Acknowledge an alert
337
+ */
338
+ async acknowledgeAlert(alertId: string, acknowledgedBy: string): Promise<boolean> {
339
+ const alert = this.activeAlerts.get(alertId);
340
+ if (!alert) {
341
+ return false;
342
+ }
343
+
344
+ alert.acknowledged = true;
345
+
346
+ // Store acknowledgment
347
+ await this.memory.store(`alert_ack_${alertId}`, {
348
+ alertId,
349
+ acknowledgedBy,
350
+ acknowledgedAt: new Date(),
351
+ alert: { ...alert }
352
+ });
353
+
354
+ this.logger.info('🔔 Alert acknowledged', { alertId, acknowledgedBy });
355
+
356
+ // Broadcast to connected clients
357
+ this.broadcastToClients({
358
+ type: 'alert_acknowledged',
359
+ data: { alertId, acknowledgedBy, timestamp: new Date() }
360
+ });
361
+
362
+ return true;
363
+ }
364
+
365
+ /**
366
+ * Get active alerts
367
+ */
368
+ async getActiveAlerts(): Promise<ActiveAlert[]> {
369
+ return Array.from(this.activeAlerts.values())
370
+ .sort((a, b) => {
371
+ // Sort by severity, then by timestamp
372
+ const severityOrder = { critical: 4, high: 3, medium: 2, low: 1 };
373
+ const severityDiff = severityOrder[b.severity] - severityOrder[a.severity];
374
+ if (severityDiff !== 0) return severityDiff;
375
+ return b.timestamp.getTime() - a.timestamp.getTime();
376
+ });
377
+ }
378
+
379
+ /**
380
+ * Private Methods
381
+ */
382
+
383
+ private initializeSystemHealth(): SystemHealth {
384
+ return {
385
+ overall: 'unknown',
386
+ components: {
387
+ cpu: { status: 'unknown', value: 0, threshold: 80, trend: 'stable', lastUpdated: new Date(), details: 'Initializing...' },
388
+ memory: { status: 'unknown', value: 0, threshold: 85, trend: 'stable', lastUpdated: new Date(), details: 'Initializing...' },
389
+ disk: { status: 'unknown', value: 0, threshold: 90, trend: 'stable', lastUpdated: new Date(), details: 'Initializing...' },
390
+ network: { status: 'unknown', value: 0, threshold: 80, trend: 'stable', lastUpdated: new Date(), details: 'Initializing...' },
391
+ database: { status: 'unknown', value: 0, threshold: 75, trend: 'stable', lastUpdated: new Date(), details: 'Initializing...' },
392
+ cache: { status: 'unknown', value: 0, threshold: 50, trend: 'stable', lastUpdated: new Date(), details: 'Initializing...' },
393
+ api: { status: 'unknown', value: 0, threshold: 5000, trend: 'stable', lastUpdated: new Date(), details: 'Initializing...' }
394
+ },
395
+ alerts: [],
396
+ recommendations: [],
397
+ predictedIssues: []
398
+ };
399
+ }
400
+
401
+ private async createMonitoringTables(): Promise<void> {
402
+ await this.memory.execute(`
403
+ CREATE TABLE IF NOT EXISTS monitoring_metrics (
404
+ id TEXT PRIMARY KEY,
405
+ metric_name TEXT NOT NULL,
406
+ metric_value REAL NOT NULL,
407
+ component TEXT NOT NULL,
408
+ timestamp INTEGER NOT NULL,
409
+ metadata TEXT,
410
+ created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
411
+ );
412
+
413
+ CREATE INDEX IF NOT EXISTS idx_monitoring_metrics_name ON monitoring_metrics(metric_name);
414
+ CREATE INDEX IF NOT EXISTS idx_monitoring_metrics_timestamp ON monitoring_metrics(timestamp);
415
+ CREATE INDEX IF NOT EXISTS idx_monitoring_metrics_component ON monitoring_metrics(component);
416
+
417
+ CREATE TABLE IF NOT EXISTS monitoring_alerts (
418
+ id TEXT PRIMARY KEY,
419
+ severity TEXT NOT NULL,
420
+ component TEXT NOT NULL,
421
+ message TEXT NOT NULL,
422
+ timestamp INTEGER NOT NULL,
423
+ acknowledged BOOLEAN DEFAULT FALSE,
424
+ acknowledged_by TEXT,
425
+ acknowledged_at INTEGER,
426
+ count INTEGER DEFAULT 1,
427
+ first_seen INTEGER NOT NULL,
428
+ last_seen INTEGER NOT NULL,
429
+ metadata TEXT,
430
+ created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
431
+ );
432
+
433
+ CREATE INDEX IF NOT EXISTS idx_monitoring_alerts_severity ON monitoring_alerts(severity);
434
+ CREATE INDEX IF NOT EXISTS idx_monitoring_alerts_component ON monitoring_alerts(component);
435
+ CREATE INDEX IF NOT EXISTS idx_monitoring_alerts_timestamp ON monitoring_alerts(timestamp);
436
+
437
+ CREATE TABLE IF NOT EXISTS monitoring_predictions (
438
+ id TEXT PRIMARY KEY,
439
+ prediction_type TEXT NOT NULL,
440
+ component TEXT NOT NULL,
441
+ description TEXT NOT NULL,
442
+ probability REAL NOT NULL,
443
+ estimated_time INTEGER,
444
+ impact TEXT NOT NULL,
445
+ recommendations TEXT,
446
+ confidence REAL NOT NULL,
447
+ created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
448
+ );
449
+ `);
450
+ }
451
+
452
+ private startRealTimeMonitoring(): void {
453
+ this.logger.info('🔄 Starting real-time monitoring...');
454
+
455
+ this.monitoringInterval = setInterval(async () => {
456
+ try {
457
+ await this.collectSystemMetrics();
458
+ await this.updateSystemHealth();
459
+
460
+ // Broadcast to connected clients
461
+ if (this.connectedClients.size > 0) {
462
+ this.broadcastToClients({
463
+ type: 'system_health_update',
464
+ data: this.systemHealth
465
+ });
466
+ }
467
+ } catch (error) {
468
+ this.logger.error('❌ Error in real-time monitoring:', error);
469
+ }
470
+ }, 5000); // Every 5 seconds
471
+ }
472
+
473
+ private startAlertingSystem(): void {
474
+ this.logger.info('🔔 Starting alerting system...');
475
+
476
+ this.alertingInterval = setInterval(async () => {
477
+ try {
478
+ await this.checkAlertConditions();
479
+ await this.cleanupOldAlerts();
480
+ } catch (error) {
481
+ this.logger.error('❌ Error in alerting system:', error);
482
+ }
483
+ }, 10000); // Every 10 seconds
484
+ }
485
+
486
+ private startPredictiveAnalytics(): void {
487
+ this.logger.info('🔮 Starting predictive analytics...');
488
+
489
+ this.predictionInterval = setInterval(async () => {
490
+ try {
491
+ await this.runPredictiveAnalysis();
492
+ } catch (error) {
493
+ this.logger.error('❌ Error in predictive analytics:', error);
494
+ }
495
+ }, 300000); // Every 5 minutes
496
+ }
497
+
498
+ private async startDashboardServer(): Promise<void> {
499
+ this.httpServer = http.createServer((req, res) => {
500
+ this.handleHttpRequest(req, res);
501
+ });
502
+
503
+ this.websocketServer = new WebSocket.Server({
504
+ server: this.httpServer,
505
+ path: '/monitoring-ws'
506
+ });
507
+
508
+ this.websocketServer.on('connection', (ws) => {
509
+ this.handleWebSocketConnection(ws);
510
+ });
511
+
512
+ return new Promise((resolve) => {
513
+ this.httpServer!.listen(this.config.websocketPort, () => {
514
+ this.logger.info(`🌐 Dashboard server started on port ${this.config.websocketPort}`);
515
+ resolve();
516
+ });
517
+ });
518
+ }
519
+
520
+ private setupPerformanceTrackerIntegration(): void {
521
+ // Listen to performance tracker events
522
+ this.performanceTracker.on('performance:slow', (data) => {
523
+ this.createAlert('high', 'api', `Slow operation detected: ${data.operation} (${data.duration}ms)`, data);
524
+ });
525
+
526
+ this.performanceTracker.on('performance:failure', (data) => {
527
+ this.createAlert('medium', 'api', `Operation failed: ${data.operation} - ${data.error}`, data);
528
+ });
529
+
530
+ this.performanceTracker.on('performance:high-memory', (data) => {
531
+ this.createAlert('medium', 'memory', `High memory usage: ${data.operation} (${data.memoryUsage}MB)`, data);
532
+ });
533
+
534
+ this.performanceTracker.on('resource:warning', (data) => {
535
+ this.createAlert('high', data.type, `Resource warning: ${data.type} usage at ${(data.usage * 100).toFixed(1)}%`, data);
536
+ });
537
+ }
538
+
539
+ private async collectSystemMetrics(): Promise<void> {
540
+ const timestamp = Date.now();
541
+
542
+ // Collect Node.js process metrics
543
+ const memUsage = process.memoryUsage();
544
+ const cpuUsage = process.cpuUsage();
545
+
546
+ const metrics = [
547
+ {
548
+ name: 'process_memory_heap_used',
549
+ value: memUsage.heapUsed / 1024 / 1024, // MB
550
+ component: 'memory'
551
+ },
552
+ {
553
+ name: 'process_memory_heap_total',
554
+ value: memUsage.heapTotal / 1024 / 1024, // MB
555
+ component: 'memory'
556
+ },
557
+ {
558
+ name: 'process_memory_rss',
559
+ value: memUsage.rss / 1024 / 1024, // MB
560
+ component: 'memory'
561
+ },
562
+ {
563
+ name: 'process_cpu_user',
564
+ value: cpuUsage.user / 1000, // milliseconds
565
+ component: 'cpu'
566
+ },
567
+ {
568
+ name: 'process_cpu_system',
569
+ value: cpuUsage.system / 1000, // milliseconds
570
+ component: 'cpu'
571
+ }
572
+ ];
573
+
574
+ // Collect memory system metrics
575
+ const memoryStats = await this.memory.getDatabaseStats();
576
+ metrics.push({
577
+ name: 'database_size',
578
+ value: memoryStats.size / 1024 / 1024, // MB
579
+ component: 'database'
580
+ });
581
+
582
+ // Collect cache metrics if available
583
+ try {
584
+ const cacheStats = await this.memory.getCacheStats();
585
+ metrics.push(
586
+ {
587
+ name: 'cache_hit_rate',
588
+ value: cacheStats.hits / (cacheStats.hits + cacheStats.misses) * 100,
589
+ component: 'cache'
590
+ },
591
+ {
592
+ name: 'cache_size',
593
+ value: cacheStats.size,
594
+ component: 'cache'
595
+ }
596
+ );
597
+ } catch (error) {
598
+ // Cache stats may not be available
599
+ }
600
+
601
+ // Store metrics
602
+ for (const metric of metrics) {
603
+ await this.storeMetric(metric.name, metric.value, metric.component, timestamp);
604
+
605
+ // Update history for trend analysis
606
+ const historyKey = `${metric.component}_${metric.name}`;
607
+ if (!this.metricHistory.has(historyKey)) {
608
+ this.metricHistory.set(historyKey, []);
609
+ }
610
+ const history = this.metricHistory.get(historyKey)!;
611
+ history.push(metric.value);
612
+
613
+ // Keep only last 100 values
614
+ if (history.length > 100) {
615
+ history.shift();
616
+ }
617
+ }
618
+ }
619
+
620
+ private async storeMetric(name: string, value: number, component: string, timestamp: number): Promise<void> {
621
+ const id = `${component}_${name}_${timestamp}`;
622
+
623
+ await this.memory.insert('monitoring_metrics', {
624
+ id,
625
+ metric_name: name,
626
+ metric_value: value,
627
+ component,
628
+ timestamp,
629
+ metadata: JSON.stringify({
630
+ node_version: process.version,
631
+ platform: process.platform,
632
+ arch: process.arch
633
+ })
634
+ });
635
+ }
636
+
637
+ private async updateSystemHealth(): Promise<void> {
638
+ const now = new Date();
639
+
640
+ // Update CPU health
641
+ const cpuHistory = this.metricHistory.get('cpu_process_cpu_user') || [];
642
+ if (cpuHistory.length > 0) {
643
+ const currentCpu = cpuHistory[cpuHistory.length - 1] || 0;
644
+ this.systemHealth.components.cpu = {
645
+ status: currentCpu > this.config.alertThresholds.cpuUsage ? 'critical' :
646
+ currentCpu > this.config.alertThresholds.cpuUsage * 0.8 ? 'warning' : 'healthy',
647
+ value: currentCpu,
648
+ threshold: this.config.alertThresholds.cpuUsage,
649
+ trend: this.calculateComponentTrend('cpu', cpuHistory),
650
+ lastUpdated: now,
651
+ details: `CPU usage: ${currentCpu.toFixed(1)}%`
652
+ };
653
+ }
654
+
655
+ // Update Memory health
656
+ const memHistory = this.metricHistory.get('memory_process_memory_heap_used') || [];
657
+ if (memHistory.length > 0) {
658
+ const currentMem = memHistory[memHistory.length - 1] || 0;
659
+ this.systemHealth.components.memory = {
660
+ status: currentMem > 500 ? 'critical' : currentMem > 300 ? 'warning' : 'healthy',
661
+ value: currentMem,
662
+ threshold: 500,
663
+ trend: this.calculateComponentTrend('memory', memHistory),
664
+ lastUpdated: now,
665
+ details: `Heap usage: ${currentMem.toFixed(1)}MB`
666
+ };
667
+ }
668
+
669
+ // Update Database health
670
+ const dbHistory = this.metricHistory.get('database_database_size') || [];
671
+ if (dbHistory.length > 0) {
672
+ const currentDb = dbHistory[dbHistory.length - 1] || 0;
673
+ this.systemHealth.components.database = {
674
+ status: currentDb > 1000 ? 'warning' : 'healthy',
675
+ value: currentDb,
676
+ threshold: 1000,
677
+ trend: this.calculateComponentTrend('database', dbHistory),
678
+ lastUpdated: now,
679
+ details: `Database size: ${currentDb.toFixed(1)}MB`
680
+ };
681
+ }
682
+
683
+ // Update Cache health
684
+ const cacheHitHistory = this.metricHistory.get('cache_cache_hit_rate') || [];
685
+ if (cacheHitHistory.length > 0) {
686
+ const currentHitRate = cacheHitHistory[cacheHitHistory.length - 1] || 0;
687
+ this.systemHealth.components.cache = {
688
+ status: currentHitRate < this.config.alertThresholds.cacheHitRate ? 'warning' : 'healthy',
689
+ value: currentHitRate,
690
+ threshold: this.config.alertThresholds.cacheHitRate,
691
+ trend: this.calculateComponentTrend('cache', cacheHitHistory),
692
+ lastUpdated: now,
693
+ details: `Cache hit rate: ${currentHitRate.toFixed(1)}%`
694
+ };
695
+ }
696
+
697
+ // Calculate overall health
698
+ const componentStatuses = Object.values(this.systemHealth.components).map(c => c.status);
699
+ if (componentStatuses.includes('critical')) {
700
+ this.systemHealth.overall = 'critical';
701
+ } else if (componentStatuses.includes('warning')) {
702
+ this.systemHealth.overall = 'warning';
703
+ } else if (componentStatuses.every(s => s === 'healthy')) {
704
+ this.systemHealth.overall = 'healthy';
705
+ } else {
706
+ this.systemHealth.overall = 'unknown';
707
+ }
708
+
709
+ // Update alerts list
710
+ this.systemHealth.alerts = await this.getActiveAlerts();
711
+ }
712
+
713
+ private calculateComponentTrend(component: string, history: number[]): 'improving' | 'stable' | 'degrading' {
714
+ if (history.length < 10) return 'stable';
715
+
716
+ const recent = history.slice(-5);
717
+ const older = history.slice(-10, -5);
718
+
719
+ const recentAvg = recent.reduce((a, b) => a + b, 0) / recent.length;
720
+ const olderAvg = older.reduce((a, b) => a + b, 0) / older.length;
721
+
722
+ const changePercent = ((recentAvg - olderAvg) / olderAvg) * 100;
723
+
724
+ // For CPU, memory, response time: increasing is degrading
725
+ // For cache hit rate, throughput: increasing is improving
726
+ const isInverseMetric = component.includes('cache') || component.includes('throughput');
727
+
728
+ if (Math.abs(changePercent) < 5) return 'stable';
729
+
730
+ if (isInverseMetric) {
731
+ return changePercent > 0 ? 'improving' : 'degrading';
732
+ } else {
733
+ return changePercent > 0 ? 'degrading' : 'improving';
734
+ }
735
+ }
736
+
737
+ private async checkAlertConditions(): Promise<void> {
738
+ const now = Date.now();
739
+
740
+ // Check each component health
741
+ for (const [componentName, component] of Object.entries(this.systemHealth.components)) {
742
+ if (component.status === 'critical' || component.status === 'warning') {
743
+ const severity = component.status === 'critical' ? 'critical' : 'high';
744
+ const alertId = `${componentName}_${component.status}`;
745
+
746
+ if (this.activeAlerts.has(alertId)) {
747
+ // Update existing alert
748
+ const alert = this.activeAlerts.get(alertId)!;
749
+ alert.count++;
750
+ (alert as any).lastSeen = new Date();
751
+ } else {
752
+ // Create new alert
753
+ await this.createAlert(severity, componentName, component.details, {
754
+ threshold: component.threshold,
755
+ currentValue: component.value,
756
+ trend: component.trend
757
+ });
758
+ }
759
+ }
760
+ }
761
+ }
762
+
763
+ private async createAlert(
764
+ severity: 'low' | 'medium' | 'high' | 'critical',
765
+ component: string,
766
+ message: string,
767
+ metadata?: any
768
+ ): Promise<void> {
769
+ const alertId = `${component}_${severity}_${Date.now()}`;
770
+ const now = new Date();
771
+
772
+ const alert: ActiveAlert = {
773
+ id: alertId,
774
+ severity,
775
+ component,
776
+ message,
777
+ timestamp: now,
778
+ acknowledged: false,
779
+ count: 1,
780
+ firstSeen: now
781
+ };
782
+
783
+ this.activeAlerts.set(alertId, alert);
784
+
785
+ // Store in database
786
+ await this.memory.insert('monitoring_alerts', {
787
+ id: alertId,
788
+ severity,
789
+ component,
790
+ message,
791
+ timestamp: now.getTime(),
792
+ acknowledged: false,
793
+ count: 1,
794
+ first_seen: now.getTime(),
795
+ last_seen: now.getTime(),
796
+ metadata: JSON.stringify(metadata || {})
797
+ });
798
+
799
+ this.logger.warn(`🚨 Alert created: ${severity.toUpperCase()} - ${component} - ${message}`, { alertId });
800
+
801
+ // Emit alert event
802
+ this.emit('alert', alert);
803
+
804
+ // Broadcast to connected clients
805
+ this.broadcastToClients({
806
+ type: 'new_alert',
807
+ data: alert
808
+ });
809
+ }
810
+
811
+ private async cleanupOldAlerts(): Promise<void> {
812
+ const cutoff = Date.now() - (24 * 60 * 60 * 1000); // 24 hours
813
+
814
+ for (const [alertId, alert] of this.activeAlerts) {
815
+ if (alert.timestamp.getTime() < cutoff && alert.acknowledged) {
816
+ this.activeAlerts.delete(alertId);
817
+ }
818
+ }
819
+ }
820
+
821
+ private async runPredictiveAnalysis(): Promise<void> {
822
+ this.logger.debug('🔮 Running predictive _analysis...');
823
+
824
+ const predictions: PredictedIssue[] = [];
825
+
826
+ // Analyze memory growth
827
+ const memHistory = this.metricHistory.get('memory_process_memory_heap_used') || [];
828
+ if (memHistory.length > 20) {
829
+ const memoryPrediction = this.predictResourceExhaustion('memory', memHistory, 1000); // 1GB limit
830
+ if (memoryPrediction) {
831
+ predictions.push(memoryPrediction);
832
+ }
833
+ }
834
+
835
+ // Analyze database growth
836
+ const dbHistory = this.metricHistory.get('database_database_size') || [];
837
+ if (dbHistory.length > 20) {
838
+ const dbPrediction = this.predictResourceExhaustion('database', dbHistory, 5000); // 5GB limit
839
+ if (dbPrediction) {
840
+ predictions.push(dbPrediction);
841
+ }
842
+ }
843
+
844
+ // Store predictions
845
+ for (const prediction of predictions) {
846
+ await this.memory.insert('monitoring_predictions', {
847
+ id: `prediction_${prediction.type}_${prediction.component}_${Date.now()}`,
848
+ prediction_type: prediction.type,
849
+ component: prediction.component,
850
+ description: prediction.description,
851
+ probability: prediction.probability,
852
+ estimated_time: prediction.estimatedTime?.getTime(),
853
+ impact: prediction.impact,
854
+ recommendations: JSON.stringify(prediction.recommendations),
855
+ confidence: prediction.probability
856
+ });
857
+ }
858
+
859
+ // Update system health with predictions
860
+ this.systemHealth.predictedIssues = predictions;
861
+ }
862
+
863
+ private predictResourceExhaustion(
864
+ resource: string,
865
+ history: number[],
866
+ limit: number
867
+ ): PredictedIssue | null {
868
+ if (history.length < 10) return null;
869
+
870
+ // Simple linear regression to predict growth
871
+ const recentHistory = history.slice(-20);
872
+ const n = recentHistory.length;
873
+ const x = Array.from({ length: n }, (_, i) => i);
874
+ const y = recentHistory;
875
+
876
+ const sumX = x.reduce((a, b) => a + b, 0);
877
+ const sumY = y.reduce((a, b) => a + b, 0);
878
+ const sumXY = x.reduce((sum, xi, i) => sum + xi * y[i], 0);
879
+ const sumXX = x.reduce((sum, xi) => sum + xi * xi, 0);
880
+
881
+ const slope = (n * sumXY - sumX * sumY) / (n * sumXX - sumX * sumX);
882
+ const intercept = (sumY - slope * sumX) / n;
883
+
884
+ // Predict when resource will reach limit
885
+ if (slope > 0) {
886
+ const currentValue = y[y.length - 1];
887
+ const timeToLimit = (limit - currentValue) / slope;
888
+
889
+ if (timeToLimit > 0 && timeToLimit < 1000) { // Within 1000 time units
890
+ const probability = Math.min(0.9, Math.max(0.1, 1 - (timeToLimit / 1000)));
891
+ const estimatedTime = new Date(Date.now() + (timeToLimit * 300000)); // 5-minute intervals
892
+
893
+ return {
894
+ type: 'resource_exhaustion',
895
+ component: resource,
896
+ description: `${resource} usage is growing and may reach capacity limits`,
897
+ probability,
898
+ estimatedTime,
899
+ impact: timeToLimit < 100 ? 'critical' : timeToLimit < 300 ? 'high' : 'medium',
900
+ recommendations: [
901
+ `Monitor ${resource} usage closely`,
902
+ `Consider optimizing ${resource} consumption`,
903
+ 'Implement cleanup/archival processes',
904
+ 'Scale resources if necessary'
905
+ ]
906
+ };
907
+ }
908
+ }
909
+
910
+ return null;
911
+ }
912
+
913
+ private async calculateTrend(metric: string, period: 'hour' | 'day' | 'week'): Promise<PerformanceTrend | null> {
914
+ const timeframe = {
915
+ hour: 3600000,
916
+ day: 86400000,
917
+ week: 604800000
918
+ }[period];
919
+
920
+ const since = Date.now() - timeframe;
921
+
922
+ const metrics = await this.memory.query<{ metric_value: number, timestamp: number }>(`
923
+ SELECT metric_value, timestamp FROM monitoring_metrics
924
+ WHERE metric_name = ? AND timestamp > ?
925
+ ORDER BY timestamp
926
+ `, [metric, since]);
927
+
928
+ if (metrics.length < 10) return null;
929
+
930
+ const values = metrics.map(m => m.metric_value);
931
+ const recent = values.slice(-Math.floor(values.length / 3));
932
+ const older = values.slice(0, Math.floor(values.length / 3));
933
+
934
+ const recentAvg = recent.reduce((a, b) => a + b, 0) / recent.length;
935
+ const olderAvg = older.reduce((a, b) => a + b, 0) / older.length;
936
+ const overallAvg = values.reduce((a, b) => a + b, 0) / values.length;
937
+
938
+ const percentageChange = ((recentAvg - olderAvg) / olderAvg) * 100;
939
+ const variance = values.reduce((sum, val) => sum + Math.pow(val - overallAvg, 2), 0) / values.length;
940
+ const volatility = Math.sqrt(variance) / overallAvg;
941
+
942
+ return {
943
+ metric,
944
+ period,
945
+ trend: Math.abs(percentageChange) < 5 ? 'stable' :
946
+ percentageChange > 0 ? 'degrading' : 'improving',
947
+ percentageChange,
948
+ currentValue: recentAvg,
949
+ historicalAverage: overallAvg,
950
+ volatility
951
+ };
952
+ }
953
+
954
+ private async generateResourceForecast(resource: string, timeHorizonHours: number): Promise<ResourceForecast | null> {
955
+ const history = this.metricHistory.get(`${resource}_${resource}_usage`) ||
956
+ this.metricHistory.get(`${resource}_process_memory_heap_used`) ||
957
+ this.metricHistory.get(`${resource}_database_size`) || [];
958
+
959
+ if (history.length < 10) return null;
960
+
961
+ const currentUsage = history[history.length - 1] || 0;
962
+ const trend = this.calculateComponentTrend(resource, history);
963
+
964
+ // Simple prediction based on trend
965
+ let predictedUsage = currentUsage;
966
+ let confidence = 0.5;
967
+
968
+ if (trend === 'degrading') {
969
+ const growthRate = this.calculateGrowthRate(history);
970
+ predictedUsage = currentUsage * (1 + (growthRate * timeHorizonHours / 24));
971
+ confidence = 0.7;
972
+ } else if (trend === 'improving') {
973
+ const reductionRate = this.calculateGrowthRate(history);
974
+ predictedUsage = currentUsage * (1 + (reductionRate * timeHorizonHours / 24));
975
+ confidence = 0.6;
976
+ }
977
+
978
+ const recommendations: string[] = [];
979
+ let exhaustionDate: Date | undefined;
980
+
981
+ if (predictedUsage > currentUsage * 1.5) {
982
+ recommendations.push(`${resource} usage expected to increase significantly`);
983
+ recommendations.push('Consider implementing resource optimization');
984
+ }
985
+
986
+ if (predictedUsage > 1000) { // Arbitrary threshold
987
+ exhaustionDate = new Date(Date.now() + (timeHorizonHours * 3600000));
988
+ recommendations.push('Resource exhaustion predicted - immediate action required');
989
+ }
990
+
991
+ return {
992
+ resource,
993
+ currentUsage,
994
+ predictedUsage,
995
+ timeHorizon: timeHorizonHours,
996
+ confidence,
997
+ exhaustionDate,
998
+ recommendations
999
+ };
1000
+ }
1001
+
1002
+ private calculateGrowthRate(history: number[]): number {
1003
+ if (history.length < 5) return 0;
1004
+
1005
+ const recent = history.slice(-5);
1006
+ const older = history.slice(-10, -5);
1007
+
1008
+ const recentAvg = recent.reduce((a, b) => a + b) / recent.length;
1009
+ const olderAvg = older.reduce((a, b) => a + b) / older.length;
1010
+
1011
+ return (recentAvg - olderAvg) / olderAvg;
1012
+ }
1013
+
1014
+ private calculatePerformanceScore(performanceReport: PerformanceReport, systemHealth: SystemHealth): number {
1015
+ let score = 100;
1016
+
1017
+ // Deduct points for errors
1018
+ score -= performanceReport.summary.errorRate * 2;
1019
+
1020
+ // Deduct points for slow response times
1021
+ if (performanceReport.summary.averageResponseTime > 2000) {
1022
+ score -= (performanceReport.summary.averageResponseTime - 2000) / 100;
1023
+ }
1024
+
1025
+ // Deduct points for unhealthy components
1026
+ const unhealthyComponents = Object.values(systemHealth.components)
1027
+ .filter(c => c.status !== 'healthy').length;
1028
+ score -= unhealthyComponents * 10;
1029
+
1030
+ // Deduct points for critical alerts
1031
+ const criticalAlerts = systemHealth.alerts.filter(a => a.severity === 'critical').length;
1032
+ score -= criticalAlerts * 15;
1033
+
1034
+ return Math.max(0, Math.min(100, score));
1035
+ }
1036
+
1037
+ private async generateSmartRecommendations(): Promise<string[]> {
1038
+ const recommendations: string[] = [];
1039
+
1040
+ // Analyze system health and generate recommendations
1041
+ for (const [componentName, component] of Object.entries(this.systemHealth.components)) {
1042
+ if (component.status !== 'healthy') {
1043
+ if (componentName === 'memory' && component.trend === 'degrading') {
1044
+ recommendations.push('Consider implementing memory optimization strategies');
1045
+ recommendations.push('Review memory leaks in long-running processes');
1046
+ }
1047
+
1048
+ if (componentName === 'cpu' && component.value > 80) {
1049
+ recommendations.push('CPU usage is high - consider scaling or optimization');
1050
+ }
1051
+
1052
+ if (componentName === 'cache' && component.value < 50) {
1053
+ recommendations.push('Cache hit rate is low - review caching strategy');
1054
+ }
1055
+ }
1056
+ }
1057
+
1058
+ // Add predictive recommendations
1059
+ for (const prediction of this.systemHealth.predictedIssues) {
1060
+ recommendations.push(...prediction.recommendations);
1061
+ }
1062
+
1063
+ return [...new Set(recommendations)]; // Remove duplicates
1064
+ }
1065
+
1066
+ private async getDataPointCount(period: string): Promise<number> {
1067
+ const timeframe = {
1068
+ hour: 3600000,
1069
+ day: 86400000,
1070
+ week: 604800000,
1071
+ month: 2592000000
1072
+ }[period] || 86400000;
1073
+
1074
+ const since = Date.now() - timeframe;
1075
+
1076
+ const result = await this.memory.query<{ count: number }>(`
1077
+ SELECT COUNT(*) as count FROM monitoring_metrics
1078
+ WHERE timestamp > ?
1079
+ `, [since]);
1080
+
1081
+ return result[0]?.count || 0;
1082
+ }
1083
+
1084
+ private handleWebSocketConnection(ws: WebSocket): void {
1085
+ this.connectedClients.add(ws);
1086
+ this.logger.info('📱 WebSocket client connected', { totalClients: this.connectedClients.size });
1087
+
1088
+ // Send initial system health
1089
+ ws.send(JSON.stringify({
1090
+ type: 'initial_data',
1091
+ data: {
1092
+ systemHealth: this.systemHealth,
1093
+ timestamp: new Date()
1094
+ }
1095
+ }));
1096
+
1097
+ ws.on('close', () => {
1098
+ this.connectedClients.delete(ws);
1099
+ this.logger.info('📱 WebSocket client disconnected', { totalClients: this.connectedClients.size });
1100
+ });
1101
+
1102
+ ws.on('message', async (message) => {
1103
+ try {
1104
+ const data = JSON.parse(message.toString());
1105
+ await this.handleWebSocketMessage(ws, data);
1106
+ } catch (error) {
1107
+ this.logger.error('❌ Error handling WebSocket message:', error);
1108
+ }
1109
+ });
1110
+ }
1111
+
1112
+ private async handleWebSocketMessage(ws: WebSocket, message: any): Promise<void> {
1113
+ switch (message.type) {
1114
+ case 'acknowledge_alert':
1115
+ if (message.alertId && message.user) {
1116
+ const success = await this.acknowledgeAlert(message.alertId, message.user);
1117
+ ws.send(JSON.stringify({
1118
+ type: 'alert_acknowledged',
1119
+ success,
1120
+ alertId: message.alertId
1121
+ }));
1122
+ }
1123
+ break;
1124
+
1125
+ case 'get_performance_trends':
1126
+ const trends = await this.getPerformanceTrends(message.periods || ['day']);
1127
+ ws.send(JSON.stringify({
1128
+ type: 'performance_trends',
1129
+ data: trends
1130
+ }));
1131
+ break;
1132
+
1133
+ case 'get_resource_forecasts':
1134
+ const forecasts = await this.getResourceForecasts(message.timeHorizon || 24);
1135
+ ws.send(JSON.stringify({
1136
+ type: 'resource_forecasts',
1137
+ data: forecasts
1138
+ }));
1139
+ break;
1140
+ }
1141
+ }
1142
+
1143
+ private handleHttpRequest(req: http.IncomingMessage, res: http.ServerResponse): void {
1144
+ // Serve basic monitoring dashboard
1145
+ const dashboardHtml = this.generateDashboardHtml();
1146
+
1147
+ res.writeHead(200, {
1148
+ 'Content-Type': 'text/html',
1149
+ 'Content-Length': Buffer.byteLength(dashboardHtml)
1150
+ });
1151
+ res.end(dashboardHtml);
1152
+ }
1153
+
1154
+ private generateDashboardHtml(): string {
1155
+ return `
1156
+ <!DOCTYPE html>
1157
+ <html>
1158
+ <head>
1159
+ <title>Snow-Flow Enhanced Monitoring Dashboard</title>
1160
+ <style>
1161
+ body { font-family: Arial, sans-serif; margin: 0; padding: 20px; background: #f5f5f5; }
1162
+ .header { background: #2c3e50; color: white; padding: 20px; border-radius: 5px; margin-bottom: 20px; }
1163
+ .grid { display: grid; grid-template-columns: repeat(auto-fit, minmax(300px, 1fr)); gap: 20px; }
1164
+ .card { background: white; padding: 20px; border-radius: 5px; box-shadow: 0 2px 5px rgba(0,0,0,0.1); }
1165
+ .status-healthy { color: #27ae60; }
1166
+ .status-warning { color: #f39c12; }
1167
+ .status-critical { color: #e74c3c; }
1168
+ .status-unknown { color: #95a5a6; }
1169
+ .metric { display: flex; justify-content: space-between; margin: 10px 0; }
1170
+ .alert { padding: 10px; margin: 5px 0; border-radius: 3px; }
1171
+ .alert-critical { background: #ffebee; border-left: 4px solid #e74c3c; }
1172
+ .alert-high { background: #fff3e0; border-left: 4px solid #ff9800; }
1173
+ .alert-medium { background: #f3e5f5; border-left: 4px solid #9c27b0; }
1174
+ .alert-low { background: #e8f5e8; border-left: 4px solid #4caf50; }
1175
+ #connectionStatus { position: fixed; top: 10px; right: 10px; padding: 5px 10px; border-radius: 3px; }
1176
+ .connected { background: #4caf50; color: white; }
1177
+ .disconnected { background: #f44336; color: white; }
1178
+ </style>
1179
+ </head>
1180
+ <body>
1181
+ <div class="header">
1182
+ <h1>🚀 Snow-Flow Enhanced Monitoring Dashboard</h1>
1183
+ <p>Real-time system health and performance monitoring</p>
1184
+ <div id="connectionStatus" class="disconnected">Connecting...</div>
1185
+ </div>
1186
+
1187
+ <div class="grid">
1188
+ <div class="card">
1189
+ <h3>System Health Overview</h3>
1190
+ <div id="overallHealth">Loading...</div>
1191
+ <div id="componentHealth"></div>
1192
+ </div>
1193
+
1194
+ <div class="card">
1195
+ <h3>Active Alerts</h3>
1196
+ <div id="alerts">Loading...</div>
1197
+ </div>
1198
+
1199
+ <div class="card">
1200
+ <h3>Performance Metrics</h3>
1201
+ <div id="performanceMetrics">Loading...</div>
1202
+ </div>
1203
+
1204
+ <div class="card">
1205
+ <h3>Resource Usage</h3>
1206
+ <div id="resourceUsage">Loading...</div>
1207
+ </div>
1208
+ </div>
1209
+
1210
+ <script>
1211
+ const ws = new WebSocket('ws://localhost:${this.config.websocketPort}/monitoring-ws');
1212
+ const connectionStatus = document.getElementById('connectionStatus');
1213
+
1214
+ ws.onopen = function() {
1215
+ connectionStatus.textContent = 'Connected';
1216
+ connectionStatus.className = 'connected';
1217
+ };
1218
+
1219
+ ws.onclose = function() {
1220
+ connectionStatus.textContent = 'Disconnected';
1221
+ connectionStatus.className = 'disconnected';
1222
+ };
1223
+
1224
+ ws.onmessage = function(event) {
1225
+ const message = JSON.parse(event.data);
1226
+
1227
+ switch(message.type) {
1228
+ case 'initial_data':
1229
+ case 'system_health_update':
1230
+ updateSystemHealth(message.data.systemHealth || message.data);
1231
+ break;
1232
+ case 'new_alert':
1233
+ addAlert(message.data);
1234
+ break;
1235
+ }
1236
+ };
1237
+
1238
+ function updateSystemHealth(health) {
1239
+ // Update overall health
1240
+ const overallHealth = document.getElementById('overallHealth');
1241
+ overallHealth.innerHTML = \`
1242
+ <div class="metric">
1243
+ <span>Overall Status:</span>
1244
+ <span class="status-\${health.overall}">\${health.overall.toUpperCase()}</span>
1245
+ </div>
1246
+ \`;
1247
+
1248
+ // Update component health
1249
+ const componentHealth = document.getElementById('componentHealth');
1250
+ let componentsHtml = '';
1251
+
1252
+ for (const [name, component] of Object.entries(health.components)) {
1253
+ componentsHtml += \`
1254
+ <div class="metric">
1255
+ <span>\${name.charAt(0).toUpperCase() + name.slice(1)}:</span>
1256
+ <span class="status-\${component.status}">
1257
+ \${component.value.toFixed(1)} (\${component.status})
1258
+ </span>
1259
+ </div>
1260
+ \`;
1261
+ }
1262
+ componentHealth.innerHTML = componentsHtml;
1263
+
1264
+ // Update alerts
1265
+ updateAlerts(health.alerts || []);
1266
+ }
1267
+
1268
+ function updateAlerts(alerts) {
1269
+ const alertsDiv = document.getElementById('alerts');
1270
+
1271
+ if (alerts.length === 0) {
1272
+ alertsDiv.innerHTML = '<p>No active alerts</p>';
1273
+ return;
1274
+ }
1275
+
1276
+ let alertsHtml = '';
1277
+ alerts.slice(0, 10).forEach(alert => {
1278
+ alertsHtml += \`
1279
+ <div class="alert alert-\${alert.severity}">
1280
+ <strong>\${alert.component.toUpperCase()}</strong>: \${alert.message}
1281
+ <br><small>\${new Date(alert.timestamp).toLocaleString()}</small>
1282
+ </div>
1283
+ \`;
1284
+ });
1285
+
1286
+ alertsDiv.innerHTML = alertsHtml;
1287
+ }
1288
+
1289
+ function addAlert(alert) {
1290
+ // Add new alert to the top of the list
1291
+ const alertsDiv = document.getElementById('alerts');
1292
+ const newAlertHtml = \`
1293
+ <div class="alert alert-\${alert.severity}">
1294
+ <strong>\${alert.component.toUpperCase()}</strong>: \${alert.message}
1295
+ <br><small>\${new Date(alert.timestamp).toLocaleString()}</small>
1296
+ </div>
1297
+ \`;
1298
+
1299
+ alertsDiv.innerHTML = newAlertHtml + alertsDiv.innerHTML;
1300
+ }
1301
+ </script>
1302
+ </body>
1303
+ </html>
1304
+ `;
1305
+ }
1306
+
1307
+ private broadcastToClients(message: any): void {
1308
+ const messageStr = JSON.stringify(message);
1309
+
1310
+ this.connectedClients.forEach(client => {
1311
+ if (client.readyState === WebSocket.OPEN) {
1312
+ client.send(messageStr);
1313
+ }
1314
+ });
1315
+ }
1316
+
1317
+ /**
1318
+ * Shutdown the monitoring system
1319
+ */
1320
+ async shutdown(): Promise<void> {
1321
+ this.logger.info('🛑 Shutting down Enhanced Monitoring System...');
1322
+
1323
+ // Clear intervals
1324
+ if (this.monitoringInterval) clearInterval(this.monitoringInterval);
1325
+ if (this.alertingInterval) clearInterval(this.alertingInterval);
1326
+ if (this.predictionInterval) clearInterval(this.predictionInterval);
1327
+
1328
+ // Close WebSocket connections
1329
+ this.connectedClients.forEach(client => {
1330
+ client.close();
1331
+ });
1332
+ this.connectedClients.clear();
1333
+
1334
+ // Close servers
1335
+ if (this.websocketServer) {
1336
+ this.websocketServer.close();
1337
+ }
1338
+
1339
+ if (this.httpServer) {
1340
+ this.httpServer.close();
1341
+ }
1342
+
1343
+ this.logger.info('✅ Enhanced Monitoring System shut down');
1344
+ }
1345
+ }