claude-flow-novice 2.2.4 → 2.2.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (288) hide show
  1. package/package.json +9 -8
  2. package/scripts/.claude-flow/metrics/agent-metrics.json +1 -0
  3. package/scripts/.claude-flow/metrics/performance.json +9 -0
  4. package/scripts/.claude-flow/metrics/task-metrics.json +10 -0
  5. package/scripts/CLEANUP_OPTIMIZATION_REPORT.json +312 -0
  6. package/scripts/CLEANUP_PERFORMANCE_OPTIMIZATION.md +387 -0
  7. package/scripts/CLEANUP_QUICK_START.md +268 -0
  8. package/scripts/CLEANUP_TEST_RESULTS.md +205 -0
  9. package/scripts/README.md +339 -0
  10. package/scripts/ace-query.sh +384 -0
  11. package/scripts/agent-token-analysis.js +430 -0
  12. package/scripts/auto-setup.js +332 -0
  13. package/scripts/build/README.md +167 -0
  14. package/scripts/build/build-config.js +27 -0
  15. package/scripts/build/build-prompt-copier.sh +30 -0
  16. package/scripts/build/performance-monitor.js +869 -0
  17. package/scripts/build/prepare-publish.js +150 -0
  18. package/scripts/build/typescript-fixer.js +621 -0
  19. package/scripts/build/unified-builder.sh +428 -0
  20. package/scripts/build/update-bin-version.js +32 -0
  21. package/scripts/build/validate-agents.js +238 -0
  22. package/scripts/build-index.js +43 -0
  23. package/scripts/build-orchestrator.js +320 -0
  24. package/scripts/check-routing-stats.cjs +122 -0
  25. package/scripts/ci-validation.js +375 -0
  26. package/scripts/cleanup-blocking-coordination.sh +420 -0
  27. package/scripts/cleanup-idle-sessions.sh +59 -0
  28. package/scripts/collect-build-metrics.js +65 -0
  29. package/scripts/demo/README.md +79 -0
  30. package/scripts/demo/autoscaling-demo-simplified.js +963 -0
  31. package/scripts/demo/comprehensive-dashboard-test.js +693 -0
  32. package/scripts/demo/confidence-log.js +87 -0
  33. package/scripts/demo/confidence-report.js +82 -0
  34. package/scripts/demo/demo-multi-swarm-coordination.js +325 -0
  35. package/scripts/demo/demo-production-deployment.js +399 -0
  36. package/scripts/demo/demo-visualization-system.js +149 -0
  37. package/scripts/demo/performance-analysis.cjs +71 -0
  38. package/scripts/demo/performance-analysis.js +71 -0
  39. package/scripts/demo/test-autoscaling-demo.js +314 -0
  40. package/scripts/dependency-optimizer.js +349 -0
  41. package/scripts/dependency-security-assessment.js +331 -0
  42. package/scripts/deploy-sdk.sh +176 -0
  43. package/scripts/deployment-readiness-report.json +179 -0
  44. package/scripts/dev/README.md +264 -0
  45. package/scripts/dev/claude-flow-wrapper.sh +35 -0
  46. package/scripts/dev/claude-monitor.py +419 -0
  47. package/scripts/dev/claude-sparc.sh +562 -0
  48. package/scripts/dev/claude-wrapper.sh +17 -0
  49. package/scripts/dev/demo-phase3-compliance.js +172 -0
  50. package/scripts/dev/demo-task-system.ts +224 -0
  51. package/scripts/dev/deployment-validator.js +315 -0
  52. package/scripts/dev/spawn-claude-terminal.sh +32 -0
  53. package/scripts/dev/start-portal.sh +506 -0
  54. package/scripts/dev/start-web-ui.js +15 -0
  55. package/scripts/dev/stop-portal.sh +311 -0
  56. package/scripts/dev/validate-examples.ts +288 -0
  57. package/scripts/dev/validate-phase2.cjs +451 -0
  58. package/scripts/dev/validate-phase2.js +785 -0
  59. package/scripts/dev/validate-phase3.cjs +208 -0
  60. package/scripts/dev/validate-security-remediation.js +1 -0
  61. package/scripts/ecosystem.config.cjs +90 -0
  62. package/scripts/fix-js-extensions.js +167 -0
  63. package/scripts/generate-basic-types.js +73 -0
  64. package/scripts/generate-changelog.js +318 -0
  65. package/scripts/git-hooks/pre-commit.sh +143 -0
  66. package/scripts/health-checks.js +634 -0
  67. package/scripts/hook-wrapper.sh +54 -0
  68. package/scripts/install/README.md +375 -0
  69. package/scripts/install/REDIS_SETUP_VALIDATION.json +245 -0
  70. package/scripts/install/check-prerequisites.js +303 -0
  71. package/scripts/install/config-wizard.js +606 -0
  72. package/scripts/install/dependency-checker.js +385 -0
  73. package/scripts/install/health-check.js +765 -0
  74. package/scripts/install/install.js +256 -0
  75. package/scripts/install/installation-benchmark.js +461 -0
  76. package/scripts/install/quick-install.js +720 -0
  77. package/scripts/install/quick-start-wizard.js +295 -0
  78. package/scripts/install/redis-cli.js +289 -0
  79. package/scripts/install/redis-install-guides.md +407 -0
  80. package/scripts/install/redis-setup.js +559 -0
  81. package/scripts/install/redis-test.js +278 -0
  82. package/scripts/install/service-manager.js +672 -0
  83. package/scripts/install/setup.js +832 -0
  84. package/scripts/install/uninstall.js +526 -0
  85. package/scripts/install/update.js +461 -0
  86. package/scripts/install-pre-commit-hook.sh +127 -0
  87. package/scripts/legacy/README.md +272 -0
  88. package/scripts/legacy/batch-fix-ts.sh +54 -0
  89. package/scripts/legacy/build-migration.sh +105 -0
  90. package/scripts/legacy/build-monitor.js +209 -0
  91. package/scripts/legacy/build-with-filter.sh +84 -0
  92. package/scripts/legacy/build-workaround.sh +71 -0
  93. package/scripts/legacy/fix-ts-advanced.js +358 -0
  94. package/scripts/legacy/fix-ts-final.sh +50 -0
  95. package/scripts/legacy/fix-ts-targeted.sh +49 -0
  96. package/scripts/legacy/fix-typescript-errors.js +305 -0
  97. package/scripts/legacy/force-build.sh +63 -0
  98. package/scripts/legacy/optimize-performance.js +400 -0
  99. package/scripts/legacy/performance-monitor.js +263 -0
  100. package/scripts/legacy/performance-monitoring.js +532 -0
  101. package/scripts/legacy/performance-test-runner.js +645 -0
  102. package/scripts/legacy/quick-fix-ts.js +281 -0
  103. package/scripts/legacy/safe-build.sh +63 -0
  104. package/scripts/memory-monitor-coordinator.js +322 -0
  105. package/scripts/migrate-to-sdk.sh +520 -0
  106. package/scripts/migration/QUICK-START.md +189 -0
  107. package/scripts/migration/QUICK-START.md.backup-1760135091363 +189 -0
  108. package/scripts/migration/README.md +464 -0
  109. package/scripts/migration/TASK-1.3.2-COMPLETION-REPORT.md +500 -0
  110. package/scripts/migration/TASK-1.3.2-COMPLETION-REPORT.md.backup-1760135091348 +500 -0
  111. package/scripts/migration/UPDATE-PATHS-README.md +464 -0
  112. package/scripts/migration/UPDATE-PATHS-README.md.backup-1760135091337 +464 -0
  113. package/scripts/migration/example-patterns.json +19 -0
  114. package/scripts/migration/install-arm64.js +78 -0
  115. package/scripts/migration/install.js +83 -0
  116. package/scripts/migration/migrate-hooks.js +173 -0
  117. package/scripts/migration/migration-examples.ts +318 -0
  118. package/scripts/migration/reorganize-workspace.js +504 -0
  119. package/scripts/migration/test-update-paths.js +359 -0
  120. package/scripts/migration/update-paths.js +664 -0
  121. package/scripts/migration/validate-migration.js +647 -0
  122. package/scripts/monitor-loop.sh +65 -0
  123. package/scripts/monitor-memory.sh +47 -0
  124. package/scripts/monitor-migration.js +339 -0
  125. package/scripts/monitor.py +43 -0
  126. package/scripts/monitoring/README.md +178 -0
  127. package/scripts/monitoring/alert-monitor.sh +220 -0
  128. package/scripts/monitoring/analyze-resources.sh +199 -0
  129. package/scripts/monitoring/dashboards/rate-limiting-dashboard.json +211 -0
  130. package/scripts/monitoring/dynamic-monitor.sh +85 -0
  131. package/scripts/monitoring/launch-stability-test.sh +184 -0
  132. package/scripts/monitoring/monitor-test.sh +93 -0
  133. package/scripts/monitoring/pre-test-validation.sh +208 -0
  134. package/scripts/monitoring/quick-test-alerting.sh +118 -0
  135. package/scripts/monitoring/quick-test-rate-limiting.sh +206 -0
  136. package/scripts/monitoring/rate-limiting-monitor.sh +380 -0
  137. package/scripts/monitoring/resource-monitor.sh +126 -0
  138. package/scripts/monitoring/stability-monitor.js +429 -0
  139. package/scripts/monitoring/test-monitor-quick.sh +54 -0
  140. package/scripts/monitoring/view-alerts.sh +307 -0
  141. package/scripts/npm-metrics-collector.js +482 -0
  142. package/scripts/npm-package-validation.cjs +299 -0
  143. package/scripts/optimization/build-optimizer.js +438 -0
  144. package/scripts/optimization/config-validator.js +761 -0
  145. package/scripts/optimization/test-optimization.js +432 -0
  146. package/scripts/optimization/unified-activation.js +839 -0
  147. package/scripts/optimize-package-swarm.js +54 -0
  148. package/scripts/performance/ACTIVATION_COMMANDS.md +292 -0
  149. package/scripts/performance/sqlite-enhanced-activation.sh +583 -0
  150. package/scripts/performance/test-enhanced-backend.sh +504 -0
  151. package/scripts/performance-monitor.js +644 -0
  152. package/scripts/performance-test-runner.js +698 -0
  153. package/scripts/post-deployment-monitoring.js +350 -0
  154. package/scripts/post-edit-pipeline.js +2091 -0
  155. package/scripts/post-install-claude-md.js +78 -0
  156. package/scripts/postinstall.js +79 -0
  157. package/scripts/pre-publish-validation.cjs +212 -0
  158. package/scripts/pre-publish-validation.js +429 -0
  159. package/scripts/redis-lua/cleanup-blocking-coordination.lua +198 -0
  160. package/scripts/release-announcement.js +425 -0
  161. package/scripts/release-notification.js +248 -0
  162. package/scripts/release-rollback.js +376 -0
  163. package/scripts/release-validation.js +460 -0
  164. package/scripts/rollback-sdk.sh +66 -0
  165. package/scripts/run-production-validation.ts +590 -0
  166. package/scripts/run-stability-validation.sh +687 -0
  167. package/scripts/security/README.md +339 -0
  168. package/scripts/security/deployment-validation.cjs +279 -0
  169. package/scripts/security/envelope-encryption-confidence-report.cjs +422 -0
  170. package/scripts/security/install-git-hooks.sh +132 -0
  171. package/scripts/security/install-git-secrets.sh +295 -0
  172. package/scripts/security/rotate-api-keys.js +469 -0
  173. package/scripts/security/ruv-swarm-safe.js +74 -0
  174. package/scripts/security/security-audit.cjs +538 -0
  175. package/scripts/security/setup-redis-auth.sh +397 -0
  176. package/scripts/security/validate-envelope-encryption.cjs +340 -0
  177. package/scripts/security-scan.js +492 -0
  178. package/scripts/src/web/frontend/.claude-flow/metrics/agent-metrics.json +1 -0
  179. package/scripts/src/web/frontend/.claude-flow/metrics/performance.json +9 -0
  180. package/scripts/src/web/frontend/.claude-flow/metrics/task-metrics.json +10 -0
  181. package/scripts/switch-api.sh +158 -0
  182. package/scripts/sync-agents.js +290 -0
  183. package/scripts/test/50-agent-test.js +625 -0
  184. package/scripts/test/NEW_STABILITY_TEST_GUIDE.md +407 -0
  185. package/scripts/test/README.md +236 -0
  186. package/scripts/test/STABILITY_TEST_EXAMPLE.md +347 -0
  187. package/scripts/test/STABILITY_TEST_README.md +480 -0
  188. package/scripts/test/agent-worker.js +309 -0
  189. package/scripts/test/ai-coordination-test.js +650 -0
  190. package/scripts/test/ai-mesh-coordination-test.js +416 -0
  191. package/scripts/test/check-links.ts +274 -0
  192. package/scripts/test/check-performance-regression.ts +168 -0
  193. package/scripts/test/cli-agent-coordination-test.js +313 -0
  194. package/scripts/test/coordinator-multilingual-test.js +396 -0
  195. package/scripts/test/coordinator-transparency-demo.js +585 -0
  196. package/scripts/test/coverage-report.ts +692 -0
  197. package/scripts/test/generate-swarm-tests.js +633 -0
  198. package/scripts/test/integration-test-validation.cjs +253 -0
  199. package/scripts/test/load-test-swarm.js +576 -0
  200. package/scripts/test/mesh-coordination-zero-overlap-test.js +740 -0
  201. package/scripts/test/multilingual-hello-world-test.js +390 -0
  202. package/scripts/test/quick-multilingual-demo.js +464 -0
  203. package/scripts/test/real-agent-test.js +312 -0
  204. package/scripts/test/run-phase3-compliance-tests.js +427 -0
  205. package/scripts/test/run-stability-test-examples.sh +292 -0
  206. package/scripts/test/stability-results/stability-metrics.jsonl +83 -0
  207. package/scripts/test/stability-results/stability-test-report.json +128 -0
  208. package/scripts/test/stability-results/stability-test.log +1827 -0
  209. package/scripts/test/stability-test-50-agents.js +734 -0
  210. package/scripts/test/test-batch-tasks.ts +29 -0
  211. package/scripts/test/test-byzantine-resolution.js +246 -0
  212. package/scripts/test/test-claude-spawn-options.sh +63 -0
  213. package/scripts/test/test-cli-wizard.js +331 -0
  214. package/scripts/test/test-comprehensive.js +401 -0
  215. package/scripts/test/test-coordination-features.ts +238 -0
  216. package/scripts/test/test-fallback-systems.js +276 -0
  217. package/scripts/test/test-init-command.ts +302 -0
  218. package/scripts/test/test-mcp.ts +251 -0
  219. package/scripts/test/test-runner.ts +568 -0
  220. package/scripts/test/test-swarm-integration.sh +92 -0
  221. package/scripts/test/test-swarm.ts +142 -0
  222. package/scripts/test/validation-summary.ts +408 -0
  223. package/scripts/test-cleanup-performance.sh +416 -0
  224. package/scripts/test-dashboard-auth.cjs +203 -0
  225. package/scripts/test-docker-deployment.sh +207 -0
  226. package/scripts/test-npm-package.cjs +167 -0
  227. package/scripts/test-provider-routing.cjs +226 -0
  228. package/scripts/test-routing-telemetry.cjs +147 -0
  229. package/scripts/test-runner.cjs +154 -0
  230. package/scripts/test-zai-10k.cjs +81 -0
  231. package/scripts/test-zai-api.cjs +191 -0
  232. package/scripts/test-zai-diagnostic.cjs +151 -0
  233. package/scripts/test-zai-final.cjs +128 -0
  234. package/scripts/test-zai-with-env.cjs +85 -0
  235. package/scripts/utils/README.md +261 -0
  236. package/scripts/utils/clean-build-artifacts.sh +94 -0
  237. package/scripts/utils/cleanup-root.sh +69 -0
  238. package/scripts/utils/fix-cliffy-imports.js +307 -0
  239. package/scripts/utils/fix-duplicate-imports.js +114 -0
  240. package/scripts/utils/fix-error-handling.cjs +70 -0
  241. package/scripts/utils/fix-import-paths.js +104 -0
  242. package/scripts/utils/fix-imports.js +116 -0
  243. package/scripts/utils/fix-shebang.js +78 -0
  244. package/scripts/utils/fix-test-modules.js +27 -0
  245. package/scripts/utils/fix-timezone-issue-246.js +200 -0
  246. package/scripts/utils/fix-ts-comprehensive.py +182 -0
  247. package/scripts/utils/fix-ts-targeted-batch.js +250 -0
  248. package/scripts/utils/remove-benchmark-conflicts.sh +140 -0
  249. package/scripts/utils/simple-test-fixer.js +190 -0
  250. package/scripts/utils/validate-metrics-structure.cjs +144 -0
  251. package/scripts/validate-agent-hooks.js +506 -0
  252. package/scripts/validate-changelog.js +241 -0
  253. package/scripts/validate-coordination-cli.js +69 -0
  254. package/scripts/validate-coordination-toggle-integration.cjs +501 -0
  255. package/scripts/validate-docker-infrastructure.sh +502 -0
  256. package/scripts/validate-entry-points.js +300 -0
  257. package/scripts/validate-stage3-performance.ts +377 -0
  258. package/scripts/validate-template-bundling.js +180 -0
  259. package/scripts/validation/README.md +33 -0
  260. package/scripts/validation/acl-security-validation.cjs +214 -0
  261. package/scripts/validation/acl-security-validation.js +402 -0
  262. package/scripts/validation/byzantine-verification.js +407 -0
  263. package/scripts/validation/final-phase-2-consensus.cjs +219 -0
  264. package/scripts/validation/final-security-validation.js +791 -0
  265. package/scripts/validation/final-wasm-validation.cjs +840 -0
  266. package/scripts/validation/integration-test-analysis.js +105 -0
  267. package/scripts/validation/phase-0-comprehensive-validation.js +474 -0
  268. package/scripts/validation/phase-0-consensus-report.js +139 -0
  269. package/scripts/validation/phase-0-final-report.js +112 -0
  270. package/scripts/validation/phase-0-redis-consensus-report.js +129 -0
  271. package/scripts/validation/phase-0-validation-improved.js +490 -0
  272. package/scripts/validation/phase-0-validation-test.js +65 -0
  273. package/scripts/validation/phase-1-consensus-report.cjs +342 -0
  274. package/scripts/validation/phase-1-consensus-validation.cjs +551 -0
  275. package/scripts/validation/phase-1-consensus-validation.js +551 -0
  276. package/scripts/validation/phase-2-consensus-report.cjs +186 -0
  277. package/scripts/validation/phase-2-validation.cjs +171 -0
  278. package/scripts/validation/phase-2-validation.js +171 -0
  279. package/scripts/validation/phase-4-consensus-report.js +181 -0
  280. package/scripts/validation/phase-4-final-validation.js +351 -0
  281. package/scripts/validation/phase-5-consensus-report.cjs +113 -0
  282. package/scripts/validation/phase-5-consensus-report.js +113 -0
  283. package/scripts/validation/security-analysis.js +49 -0
  284. package/scripts/validation/security-validation.js +492 -0
  285. package/scripts/validation/simple-security-validation.js +464 -0
  286. package/scripts/verify-installation.js +112 -0
  287. package/scripts/verify-mcp-server.js +86 -0
  288. package/scripts/verify-sdk-phase1.cjs +293 -0
@@ -0,0 +1,532 @@
1
+ #!/usr/bin/env node
2
+
3
+ /**
4
+ * Phase 4 Performance Monitoring Script
5
+ * Real-time performance monitoring for controlled rollout
6
+ */
7
+
8
+ import fs from 'fs-extra';
9
+ import path from 'path';
10
+ import { spawn } from 'child_process';
11
+ import chalk from 'chalk';
12
+
13
+ class Phase4PerformanceMonitor {
14
+ constructor() {
15
+ this.metricsDir = path.join(process.cwd(), '.claude-flow', 'metrics');
16
+ this.alertThresholds = {
17
+ responseTime: { warning: 5, critical: 10 }, // percentage increase
18
+ cpuUsage: { warning: 80, critical: 90 }, // percentage
19
+ memoryUsage: { warning: 85, critical: 95 }, // percentage
20
+ hookExecution: { warning: 100, critical: 500 }, // milliseconds
21
+ databaseQueries: { warning: 5, critical: 10 } // percentage increase
22
+ };
23
+ this.monitoring = false;
24
+ this.baseline = null;
25
+ this.alerts = [];
26
+ }
27
+
28
+ async initialize() {
29
+ console.log(chalk.blue('šŸš€ Initializing Phase 4 Performance Monitor'));
30
+
31
+ // Ensure metrics directory exists
32
+ await fs.ensureDir(this.metricsDir);
33
+
34
+ // Load baseline performance metrics
35
+ await this.loadBaseline();
36
+
37
+ console.log(chalk.green('āœ… Performance monitor initialized'));
38
+ }
39
+
40
+ async loadBaseline() {
41
+ try {
42
+ const systemMetricsPath = path.join(this.metricsDir, 'system-metrics.json');
43
+ const performanceMetricsPath = path.join(this.metricsDir, 'performance.json');
44
+
45
+ if (await fs.pathExists(systemMetricsPath)) {
46
+ const systemMetrics = await fs.readJson(systemMetricsPath);
47
+ const performanceMetrics = await fs.pathExists(performanceMetricsPath)
48
+ ? await fs.readJson(performanceMetricsPath)
49
+ : {};
50
+
51
+ // Calculate baseline from recent metrics
52
+ const recentMetrics = systemMetrics.slice(-10);
53
+ this.baseline = this.calculateBaseline(recentMetrics, performanceMetrics);
54
+
55
+ console.log(chalk.cyan('šŸ“Š Baseline metrics loaded:'));
56
+ console.log(` CPU: ${this.baseline.cpu.toFixed(2)}%`);
57
+ console.log(` Memory: ${this.baseline.memory.toFixed(2)}%`);
58
+ console.log(` Tasks: ${this.baseline.tasks} total`);
59
+ } else {
60
+ console.log(chalk.yellow('āš ļø No baseline metrics found, will establish during monitoring'));
61
+ this.baseline = null;
62
+ }
63
+ } catch (error) {
64
+ console.error(chalk.red('āŒ Error loading baseline:'), error.message);
65
+ this.baseline = null;
66
+ }
67
+ }
68
+
69
+ calculateBaseline(systemMetrics, performanceMetrics) {
70
+ const avgCpu = systemMetrics.reduce((sum, m) => sum + (m.cpuLoad || 0), 0) / systemMetrics.length;
71
+ const avgMemory = systemMetrics.reduce((sum, m) => sum + (m.memoryUsagePercent || 0), 0) / systemMetrics.length;
72
+
73
+ return {
74
+ cpu: avgCpu * 100, // Convert to percentage
75
+ memory: avgMemory,
76
+ tasks: performanceMetrics.totalTasks || 0,
77
+ successfulTasks: performanceMetrics.successfulTasks || 0,
78
+ timestamp: Date.now()
79
+ };
80
+ }
81
+
82
+ async startMonitoring(interval = 30000) {
83
+ if (this.monitoring) {
84
+ console.log(chalk.yellow('āš ļø Monitoring already active'));
85
+ return;
86
+ }
87
+
88
+ console.log(chalk.blue(`šŸ”„ Starting performance monitoring (${interval/1000}s intervals)`));
89
+ this.monitoring = true;
90
+
91
+ const monitoringLoop = async () => {
92
+ if (!this.monitoring) return;
93
+
94
+ try {
95
+ const metrics = await this.collectMetrics();
96
+ await this.analyzePerformance(metrics);
97
+ await this.saveMetrics(metrics);
98
+
99
+ // Display current status
100
+ this.displayStatus(metrics);
101
+
102
+ setTimeout(monitoringLoop, interval);
103
+ } catch (error) {
104
+ console.error(chalk.red('āŒ Monitoring error:'), error.message);
105
+ setTimeout(monitoringLoop, interval);
106
+ }
107
+ };
108
+
109
+ await monitoringLoop();
110
+ }
111
+
112
+ async collectMetrics() {
113
+ const timestamp = Date.now();
114
+
115
+ // System metrics
116
+ const cpuUsage = await this.getCpuUsage();
117
+ const memoryUsage = await this.getMemoryUsage();
118
+
119
+ // Hook performance metrics
120
+ const hookMetrics = await this.getHookMetrics();
121
+
122
+ // Database performance
123
+ const dbMetrics = await this.getDatabaseMetrics();
124
+
125
+ // Task performance
126
+ const taskMetrics = await this.getTaskMetrics();
127
+
128
+ return {
129
+ timestamp,
130
+ cpu: cpuUsage,
131
+ memory: memoryUsage,
132
+ hooks: hookMetrics,
133
+ database: dbMetrics,
134
+ tasks: taskMetrics
135
+ };
136
+ }
137
+
138
+ async getCpuUsage() {
139
+ try {
140
+ return new Promise((resolve) => {
141
+ const proc = spawn('cat', ['/proc/loadavg']);
142
+ let output = '';
143
+
144
+ proc.stdout.on('data', (data) => {
145
+ output += data.toString();
146
+ });
147
+
148
+ proc.on('close', () => {
149
+ const loadAvg = parseFloat(output.split(' ')[0]);
150
+ const cpuCount = require('os').cpus().length;
151
+ resolve((loadAvg / cpuCount) * 100);
152
+ });
153
+
154
+ proc.on('error', () => resolve(0));
155
+ });
156
+ } catch (error) {
157
+ return 0;
158
+ }
159
+ }
160
+
161
+ async getMemoryUsage() {
162
+ try {
163
+ const memInfo = await fs.readFile('/proc/meminfo', 'utf8');
164
+ const lines = memInfo.split('\\n');
165
+
166
+ const memTotal = parseInt(lines.find(l => l.startsWith('MemTotal:')).split(/\\s+/)[1]) * 1024;
167
+ const memAvailable = parseInt(lines.find(l => l.startsWith('MemAvailable:')).split(/\\s+/)[1]) * 1024;
168
+ const memUsed = memTotal - memAvailable;
169
+
170
+ return {
171
+ total: memTotal,
172
+ used: memUsed,
173
+ percentage: (memUsed / memTotal) * 100
174
+ };
175
+ } catch (error) {
176
+ return { total: 0, used: 0, percentage: 0 };
177
+ }
178
+ }
179
+
180
+ async getHookMetrics() {
181
+ try {
182
+ // Check for recent hook execution logs
183
+ const swarmDir = path.join(process.cwd(), '.swarm');
184
+ const memoryDbPath = path.join(swarmDir, 'memory.db');
185
+
186
+ if (await fs.pathExists(memoryDbPath)) {
187
+ // Simulate hook performance metrics (in real implementation, query the database)
188
+ return {
189
+ averageExecutionTime: 150, // ms
190
+ successRate: 99.5, // percentage
191
+ timeouts: 0,
192
+ errors: 0
193
+ };
194
+ }
195
+
196
+ return { averageExecutionTime: 0, successRate: 100, timeouts: 0, errors: 0 };
197
+ } catch (error) {
198
+ return { averageExecutionTime: 0, successRate: 100, timeouts: 0, errors: 0 };
199
+ }
200
+ }
201
+
202
+ async getDatabaseMetrics() {
203
+ try {
204
+ // Simulate database performance metrics
205
+ return {
206
+ queryTime: 25, // average ms
207
+ connections: 5,
208
+ validationQueries: 120, // per minute
209
+ performanceImpact: 3.2 // percentage increase
210
+ };
211
+ } catch (error) {
212
+ return { queryTime: 0, connections: 0, validationQueries: 0, performanceImpact: 0 };
213
+ }
214
+ }
215
+
216
+ async getTaskMetrics() {
217
+ try {
218
+ const performanceFile = path.join(this.metricsDir, 'performance.json');
219
+ if (await fs.pathExists(performanceFile)) {
220
+ return await fs.readJson(performanceFile);
221
+ }
222
+ return { totalTasks: 0, successfulTasks: 0, failedTasks: 0 };
223
+ } catch (error) {
224
+ return { totalTasks: 0, successfulTasks: 0, failedTasks: 0 };
225
+ }
226
+ }
227
+
228
+ async analyzePerformance(metrics) {
229
+ const alerts = [];
230
+
231
+ if (this.baseline) {
232
+ // CPU Usage Analysis
233
+ const cpuIncrease = ((metrics.cpu - this.baseline.cpu) / this.baseline.cpu) * 100;
234
+ if (metrics.cpu > this.alertThresholds.cpuUsage.critical) {
235
+ alerts.push({
236
+ type: 'CRITICAL',
237
+ metric: 'CPU_USAGE',
238
+ value: metrics.cpu,
239
+ threshold: this.alertThresholds.cpuUsage.critical,
240
+ message: `CPU usage critical: ${metrics.cpu.toFixed(2)}%`
241
+ });
242
+ } else if (metrics.cpu > this.alertThresholds.cpuUsage.warning) {
243
+ alerts.push({
244
+ type: 'WARNING',
245
+ metric: 'CPU_USAGE',
246
+ value: metrics.cpu,
247
+ threshold: this.alertThresholds.cpuUsage.warning,
248
+ message: `CPU usage high: ${metrics.cpu.toFixed(2)}%`
249
+ });
250
+ }
251
+
252
+ // Memory Usage Analysis
253
+ if (metrics.memory.percentage > this.alertThresholds.memoryUsage.critical) {
254
+ alerts.push({
255
+ type: 'CRITICAL',
256
+ metric: 'MEMORY_USAGE',
257
+ value: metrics.memory.percentage,
258
+ threshold: this.alertThresholds.memoryUsage.critical,
259
+ message: `Memory usage critical: ${metrics.memory.percentage.toFixed(2)}%`
260
+ });
261
+ } else if (metrics.memory.percentage > this.alertThresholds.memoryUsage.warning) {
262
+ alerts.push({
263
+ type: 'WARNING',
264
+ metric: 'MEMORY_USAGE',
265
+ value: metrics.memory.percentage,
266
+ threshold: this.alertThresholds.memoryUsage.warning,
267
+ message: `Memory usage high: ${metrics.memory.percentage.toFixed(2)}%`
268
+ });
269
+ }
270
+
271
+ // Hook Performance Analysis
272
+ if (metrics.hooks.averageExecutionTime > this.alertThresholds.hookExecution.critical) {
273
+ alerts.push({
274
+ type: 'CRITICAL',
275
+ metric: 'HOOK_PERFORMANCE',
276
+ value: metrics.hooks.averageExecutionTime,
277
+ threshold: this.alertThresholds.hookExecution.critical,
278
+ message: `Hook execution time critical: ${metrics.hooks.averageExecutionTime}ms`
279
+ });
280
+ } else if (metrics.hooks.averageExecutionTime > this.alertThresholds.hookExecution.warning) {
281
+ alerts.push({
282
+ type: 'WARNING',
283
+ metric: 'HOOK_PERFORMANCE',
284
+ value: metrics.hooks.averageExecutionTime,
285
+ threshold: this.alertThresholds.hookExecution.warning,
286
+ message: `Hook execution time high: ${metrics.hooks.averageExecutionTime}ms`
287
+ });
288
+ }
289
+
290
+ // Database Performance Analysis
291
+ if (metrics.database.performanceImpact > this.alertThresholds.databaseQueries.critical) {
292
+ alerts.push({
293
+ type: 'CRITICAL',
294
+ metric: 'DATABASE_PERFORMANCE',
295
+ value: metrics.database.performanceImpact,
296
+ threshold: this.alertThresholds.databaseQueries.critical,
297
+ message: `Database performance impact critical: +${metrics.database.performanceImpact}%`
298
+ });
299
+ }
300
+ }
301
+
302
+ // Store alerts
303
+ this.alerts = alerts;
304
+
305
+ // Log alerts
306
+ alerts.forEach(alert => {
307
+ const color = alert.type === 'CRITICAL' ? chalk.red : chalk.yellow;
308
+ console.log(color(`🚨 ${alert.type}: ${alert.message}`));
309
+ });
310
+ }
311
+
312
+ displayStatus(metrics) {
313
+ console.clear();
314
+ console.log(chalk.bold.blue('šŸ“Š Phase 4 Performance Monitor - Live Status'));
315
+ console.log(chalk.gray('=' .repeat(60)));
316
+
317
+ // Timestamp
318
+ console.log(chalk.cyan(`šŸ•’ ${new Date(metrics.timestamp).toLocaleString()}`));
319
+ console.log();
320
+
321
+ // System Resources
322
+ console.log(chalk.bold('šŸ–„ļø System Resources:'));
323
+ console.log(` CPU Usage: ${this.colorizeMetric(metrics.cpu, 80, 90)}%`);
324
+ console.log(` Memory: ${this.colorizeMetric(metrics.memory.percentage, 85, 95)}% (${(metrics.memory.used / 1024 / 1024 / 1024).toFixed(2)}GB used)`);
325
+ console.log();
326
+
327
+ // Hook Performance
328
+ console.log(chalk.bold('šŸŖ Hook Performance:'));
329
+ console.log(` Avg Execution: ${this.colorizeMetric(metrics.hooks.averageExecutionTime, 100, 500)}ms`);
330
+ console.log(` Success Rate: ${metrics.hooks.successRate}%`);
331
+ console.log(` Timeouts: ${metrics.hooks.timeouts}`);
332
+ console.log();
333
+
334
+ // Database Performance
335
+ console.log(chalk.bold('šŸ—„ļø Database Performance:'));
336
+ console.log(` Query Time: ${metrics.database.queryTime}ms avg`);
337
+ console.log(` Connections: ${metrics.database.connections}`);
338
+ console.log(` Impact: +${metrics.database.performanceImpact}%`);
339
+ console.log();
340
+
341
+ // Task Metrics
342
+ console.log(chalk.bold('šŸ“‹ Task Metrics:'));
343
+ console.log(` Total Tasks: ${metrics.tasks.totalTasks}`);
344
+ console.log(` Successful: ${metrics.tasks.successfulTasks}`);
345
+ console.log(` Failed: ${metrics.tasks.failedTasks}`);
346
+ console.log();
347
+
348
+ // Alerts
349
+ if (this.alerts.length > 0) {
350
+ console.log(chalk.bold.red('🚨 Active Alerts:'));
351
+ this.alerts.forEach(alert => {
352
+ const color = alert.type === 'CRITICAL' ? chalk.red : chalk.yellow;
353
+ console.log(` ${color(`${alert.type}: ${alert.message}`)}`);
354
+ });
355
+ } else {
356
+ console.log(chalk.green('āœ… No active alerts - system performing within thresholds'));
357
+ }
358
+
359
+ console.log(chalk.gray('=' .repeat(60)));
360
+ console.log(chalk.dim('Press Ctrl+C to stop monitoring'));
361
+ }
362
+
363
+ colorizeMetric(value, warningThreshold, criticalThreshold) {
364
+ if (value >= criticalThreshold) {
365
+ return chalk.red(value.toFixed(2));
366
+ } else if (value >= warningThreshold) {
367
+ return chalk.yellow(value.toFixed(2));
368
+ } else {
369
+ return chalk.green(value.toFixed(2));
370
+ }
371
+ }
372
+
373
+ async saveMetrics(metrics) {
374
+ try {
375
+ const metricsFile = path.join(this.metricsDir, 'phase4-monitoring.json');
376
+ let existingMetrics = [];
377
+
378
+ if (await fs.pathExists(metricsFile)) {
379
+ existingMetrics = await fs.readJson(metricsFile);
380
+ }
381
+
382
+ existingMetrics.push(metrics);
383
+
384
+ // Keep only last 1000 entries to prevent file growth
385
+ if (existingMetrics.length > 1000) {
386
+ existingMetrics = existingMetrics.slice(-1000);
387
+ }
388
+
389
+ await fs.writeJson(metricsFile, existingMetrics, { spaces: 2 });
390
+ } catch (error) {
391
+ console.error(chalk.red('āŒ Error saving metrics:'), error.message);
392
+ }
393
+ }
394
+
395
+ stopMonitoring() {
396
+ console.log(chalk.blue('šŸ›‘ Stopping performance monitoring'));
397
+ this.monitoring = false;
398
+ }
399
+
400
+ async generateReport() {
401
+ console.log(chalk.blue('šŸ“‹ Generating performance report...'));
402
+
403
+ try {
404
+ const metricsFile = path.join(this.metricsDir, 'phase4-monitoring.json');
405
+ if (await fs.pathExists(metricsFile)) {
406
+ const metrics = await fs.readJson(metricsFile);
407
+
408
+ const report = {
409
+ generatedAt: new Date().toISOString(),
410
+ monitoringPeriod: {
411
+ start: new Date(metrics[0]?.timestamp).toISOString(),
412
+ end: new Date(metrics[metrics.length - 1]?.timestamp).toISOString(),
413
+ duration: `${((metrics[metrics.length - 1]?.timestamp - metrics[0]?.timestamp) / 1000 / 60).toFixed(2)} minutes`
414
+ },
415
+ summary: this.calculateSummaryStats(metrics),
416
+ alerts: this.summarizeAlerts(metrics),
417
+ recommendations: this.generateRecommendations(metrics)
418
+ };
419
+
420
+ const reportFile = path.join(this.metricsDir, `phase4-performance-report-${Date.now()}.json`);
421
+ await fs.writeJson(reportFile, report, { spaces: 2 });
422
+
423
+ console.log(chalk.green(`āœ… Performance report saved to: ${reportFile}`));
424
+ return reportFile;
425
+ }
426
+ } catch (error) {
427
+ console.error(chalk.red('āŒ Error generating report:'), error.message);
428
+ }
429
+ }
430
+
431
+ calculateSummaryStats(metrics) {
432
+ if (metrics.length === 0) return {};
433
+
434
+ const cpuValues = metrics.map(m => m.cpu);
435
+ const memoryValues = metrics.map(m => m.memory.percentage);
436
+ const hookTimes = metrics.map(m => m.hooks.averageExecutionTime);
437
+
438
+ return {
439
+ cpu: {
440
+ min: Math.min(...cpuValues),
441
+ max: Math.max(...cpuValues),
442
+ average: cpuValues.reduce((a, b) => a + b, 0) / cpuValues.length
443
+ },
444
+ memory: {
445
+ min: Math.min(...memoryValues),
446
+ max: Math.max(...memoryValues),
447
+ average: memoryValues.reduce((a, b) => a + b, 0) / memoryValues.length
448
+ },
449
+ hooks: {
450
+ min: Math.min(...hookTimes),
451
+ max: Math.max(...hookTimes),
452
+ average: hookTimes.reduce((a, b) => a + b, 0) / hookTimes.length
453
+ }
454
+ };
455
+ }
456
+
457
+ summarizeAlerts(metrics) {
458
+ // Analyze alert patterns from metrics
459
+ return {
460
+ totalAlerts: this.alerts.length,
461
+ criticalAlerts: this.alerts.filter(a => a.type === 'CRITICAL').length,
462
+ warningAlerts: this.alerts.filter(a => a.type === 'WARNING').length,
463
+ mostCommonAlert: 'CPU_USAGE' // Placeholder
464
+ };
465
+ }
466
+
467
+ generateRecommendations(metrics) {
468
+ const recommendations = [];
469
+
470
+ if (metrics.some(m => m.cpu > 80)) {
471
+ recommendations.push('Consider CPU optimization or scaling');
472
+ }
473
+
474
+ if (metrics.some(m => m.memory.percentage > 85)) {
475
+ recommendations.push('Monitor memory usage and implement caching strategies');
476
+ }
477
+
478
+ if (metrics.some(m => m.hooks.averageExecutionTime > 100)) {
479
+ recommendations.push('Optimize hook execution performance');
480
+ }
481
+
482
+ return recommendations;
483
+ }
484
+ }
485
+
486
+ // CLI Interface
487
+ async function main() {
488
+ const monitor = new Phase4PerformanceMonitor();
489
+ await monitor.initialize();
490
+
491
+ const command = process.argv[2] || 'monitor';
492
+ const interval = parseInt(process.argv[3]) || 30000;
493
+
494
+ switch (command) {
495
+ case 'monitor':
496
+ console.log(chalk.blue('šŸš€ Starting Phase 4 performance monitoring...'));
497
+
498
+ // Handle graceful shutdown
499
+ process.on('SIGINT', async () => {
500
+ console.log(chalk.yellow('\\nšŸ›‘ Received interrupt signal'));
501
+ monitor.stopMonitoring();
502
+ await monitor.generateReport();
503
+ process.exit(0);
504
+ });
505
+
506
+ await monitor.startMonitoring(interval);
507
+ break;
508
+
509
+ case 'report':
510
+ await monitor.generateReport();
511
+ break;
512
+
513
+ case 'help':
514
+ default:
515
+ console.log(chalk.blue('Phase 4 Performance Monitor'));
516
+ console.log();
517
+ console.log('Usage:');
518
+ console.log(' node performance-monitoring.js monitor [interval] - Start monitoring (default: 30s)');
519
+ console.log(' node performance-monitoring.js report - Generate performance report');
520
+ console.log(' node performance-monitoring.js help - Show this help');
521
+ break;
522
+ }
523
+ }
524
+
525
+ if (import.meta.url === `file://${process.argv[1]}`) {
526
+ main().catch(error => {
527
+ console.error(chalk.red('āŒ Monitor failed:'), error);
528
+ process.exit(1);
529
+ });
530
+ }
531
+
532
+ export { Phase4PerformanceMonitor };