mcp-wordpress 2.11.13 → 3.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 (247) hide show
  1. package/README.md +14 -29
  2. package/dist/cache/CacheInvalidation.js.map +1 -1
  3. package/dist/cache/CacheManager.d.ts +7 -0
  4. package/dist/cache/CacheManager.d.ts.map +1 -1
  5. package/dist/cache/CacheManager.js +21 -7
  6. package/dist/cache/CacheManager.js.map +1 -1
  7. package/dist/cache/HttpCacheWrapper.js.map +1 -1
  8. package/dist/cache/SEOCacheManager.d.ts.map +1 -1
  9. package/dist/cache/SEOCacheManager.js +6 -1
  10. package/dist/cache/SEOCacheManager.js.map +1 -1
  11. package/dist/cache/index.d.ts.map +1 -1
  12. package/dist/cache/index.js.map +1 -1
  13. package/dist/client/CachedWordPressClient.d.ts.map +1 -1
  14. package/dist/client/CachedWordPressClient.js.map +1 -1
  15. package/dist/client/MockWordPressClient.d.ts.map +1 -1
  16. package/dist/client/MockWordPressClient.js.map +1 -1
  17. package/dist/client/SEOWordPressClient.d.ts.map +1 -1
  18. package/dist/client/SEOWordPressClient.js.map +1 -1
  19. package/dist/client/api.d.ts +11 -26
  20. package/dist/client/api.d.ts.map +1 -1
  21. package/dist/client/api.js +111 -203
  22. package/dist/client/api.js.map +1 -1
  23. package/dist/client/auth.d.ts.map +1 -1
  24. package/dist/client/auth.js.map +1 -1
  25. package/dist/client/managers/AuthManager.d.ts.map +1 -1
  26. package/dist/client/managers/RequestManager.d.ts.map +1 -1
  27. package/dist/client/managers/RequestManager.js +6 -5
  28. package/dist/client/managers/RequestManager.js.map +1 -1
  29. package/dist/client/managers/composed/MigrationAdapter.d.ts +3 -3
  30. package/dist/client/managers/composed/MigrationAdapter.d.ts.map +1 -1
  31. package/dist/client/managers/composed/MigrationAdapter.js +2 -2
  32. package/dist/client/managers/composed/MigrationAdapter.js.map +1 -1
  33. package/dist/client/managers/composed/index.d.ts +7 -7
  34. package/dist/client/managers/composed/index.d.ts.map +1 -1
  35. package/dist/client/managers/composed/index.js +6 -6
  36. package/dist/client/managers/composed/index.js.map +1 -1
  37. package/dist/client/managers/implementations/ConfigurationProviderImpl.d.ts +1 -1
  38. package/dist/client/managers/implementations/ConfigurationProviderImpl.d.ts.map +1 -1
  39. package/dist/client/managers/implementations/ErrorHandlerImpl.d.ts +1 -1
  40. package/dist/client/managers/implementations/ErrorHandlerImpl.d.ts.map +1 -1
  41. package/dist/client/managers/implementations/ParameterValidatorImpl.d.ts +1 -1
  42. package/dist/client/managers/implementations/ParameterValidatorImpl.d.ts.map +1 -1
  43. package/dist/client/operations/comments.d.ts +58 -0
  44. package/dist/client/operations/comments.d.ts.map +1 -0
  45. package/dist/client/operations/comments.js +74 -0
  46. package/dist/client/operations/comments.js.map +1 -0
  47. package/dist/client/operations/index.d.ts +12 -0
  48. package/dist/client/operations/index.d.ts.map +1 -0
  49. package/dist/client/operations/index.js +12 -0
  50. package/dist/client/operations/index.js.map +1 -0
  51. package/dist/client/operations/media.d.ts +55 -0
  52. package/dist/client/operations/media.d.ts.map +1 -0
  53. package/dist/client/operations/media.js +132 -0
  54. package/dist/client/operations/media.js.map +1 -0
  55. package/dist/client/operations/pages.d.ts +50 -0
  56. package/dist/client/operations/pages.d.ts.map +1 -0
  57. package/dist/client/operations/pages.js +56 -0
  58. package/dist/client/operations/pages.js.map +1 -0
  59. package/dist/client/operations/posts.d.ts +50 -0
  60. package/dist/client/operations/posts.d.ts.map +1 -0
  61. package/dist/client/operations/posts.js +53 -0
  62. package/dist/client/operations/posts.js.map +1 -0
  63. package/dist/client/operations/site.d.ts +60 -0
  64. package/dist/client/operations/site.d.ts.map +1 -0
  65. package/dist/client/operations/site.js +83 -0
  66. package/dist/client/operations/site.js.map +1 -0
  67. package/dist/client/operations/taxonomies.d.ts +69 -0
  68. package/dist/client/operations/taxonomies.d.ts.map +1 -0
  69. package/dist/client/operations/taxonomies.js +87 -0
  70. package/dist/client/operations/taxonomies.js.map +1 -0
  71. package/dist/client/operations/users.d.ts +50 -0
  72. package/dist/client/operations/users.d.ts.map +1 -0
  73. package/dist/client/operations/users.js +57 -0
  74. package/dist/client/operations/users.js.map +1 -0
  75. package/dist/config/ServerConfiguration.d.ts.map +1 -1
  76. package/dist/config/ServerConfiguration.js.map +1 -1
  77. package/dist/docs/DocumentationGenerator.js.map +1 -1
  78. package/dist/performance/MetricsCollector.d.ts.map +1 -1
  79. package/dist/performance/MetricsCollector.js.map +1 -1
  80. package/dist/performance/PerformanceMonitor.js.map +1 -1
  81. package/dist/security/AISecurityScanner.d.ts.map +1 -1
  82. package/dist/security/AISecurityScanner.js +3 -2
  83. package/dist/security/AISecurityScanner.js.map +1 -1
  84. package/dist/security/AutomatedRemediation.js.map +1 -1
  85. package/dist/security/InputValidator.d.ts.map +1 -1
  86. package/dist/security/InputValidator.js +30 -18
  87. package/dist/security/InputValidator.js.map +1 -1
  88. package/dist/security/SecurityCIPipeline.d.ts +19 -196
  89. package/dist/security/SecurityCIPipeline.d.ts.map +1 -1
  90. package/dist/security/SecurityCIPipeline.js +95 -639
  91. package/dist/security/SecurityCIPipeline.js.map +1 -1
  92. package/dist/security/SecurityConfig.js.map +1 -1
  93. package/dist/security/SecurityConfigManager.js.map +1 -1
  94. package/dist/security/SecurityGateExecutor.d.ts +67 -0
  95. package/dist/security/SecurityGateExecutor.d.ts.map +1 -0
  96. package/dist/security/SecurityGateExecutor.js +363 -0
  97. package/dist/security/SecurityGateExecutor.js.map +1 -0
  98. package/dist/security/SecurityMonitoring.js.map +1 -1
  99. package/dist/security/SecurityReportGenerator.d.ts +65 -0
  100. package/dist/security/SecurityReportGenerator.d.ts.map +1 -0
  101. package/dist/security/SecurityReportGenerator.js +210 -0
  102. package/dist/security/SecurityReportGenerator.js.map +1 -0
  103. package/dist/security/SecurityReviewer.js.map +1 -1
  104. package/dist/security/SecurityTypes.d.ts +188 -0
  105. package/dist/security/SecurityTypes.d.ts.map +1 -0
  106. package/dist/security/SecurityTypes.js +6 -0
  107. package/dist/security/SecurityTypes.js.map +1 -0
  108. package/dist/security/index.d.ts +5 -28
  109. package/dist/security/index.d.ts.map +1 -1
  110. package/dist/security/index.js +4 -0
  111. package/dist/security/index.js.map +1 -1
  112. package/dist/server/ConnectionTester.d.ts.map +1 -1
  113. package/dist/server/ConnectionTester.js.map +1 -1
  114. package/dist/server/ToolRegistry.d.ts.map +1 -1
  115. package/dist/server/ToolRegistry.js.map +1 -1
  116. package/dist/tools/BaseToolManager.d.ts.map +1 -1
  117. package/dist/tools/BaseToolManager.js.map +1 -1
  118. package/dist/tools/auth.d.ts.map +1 -1
  119. package/dist/tools/auth.js.map +1 -1
  120. package/dist/tools/cache.d.ts.map +1 -1
  121. package/dist/tools/cache.js.map +1 -1
  122. package/dist/tools/comments.d.ts.map +1 -1
  123. package/dist/tools/comments.js.map +1 -1
  124. package/dist/tools/media.d.ts.map +1 -1
  125. package/dist/tools/media.js.map +1 -1
  126. package/dist/tools/pages.d.ts.map +1 -1
  127. package/dist/tools/pages.js.map +1 -1
  128. package/dist/tools/performance/PerformanceHelpers.d.ts +116 -0
  129. package/dist/tools/performance/PerformanceHelpers.d.ts.map +1 -0
  130. package/dist/tools/performance/PerformanceHelpers.js +298 -0
  131. package/dist/tools/performance/PerformanceHelpers.js.map +1 -0
  132. package/dist/tools/performance/PerformanceTools.d.ts +54 -0
  133. package/dist/tools/performance/PerformanceTools.d.ts.map +1 -0
  134. package/dist/tools/performance/PerformanceTools.js +687 -0
  135. package/dist/tools/performance/PerformanceTools.js.map +1 -0
  136. package/dist/tools/performance/index.d.ts +8 -0
  137. package/dist/tools/performance/index.d.ts.map +1 -0
  138. package/dist/tools/performance/index.js +8 -0
  139. package/dist/tools/performance/index.js.map +1 -0
  140. package/dist/tools/performance.d.ts +12 -69
  141. package/dist/tools/performance.d.ts.map +1 -1
  142. package/dist/tools/performance.js +12 -920
  143. package/dist/tools/performance.js.map +1 -1
  144. package/dist/tools/posts.d.ts.map +1 -1
  145. package/dist/tools/seo/analyzers/ContentAnalyzer.d.ts.map +1 -1
  146. package/dist/tools/seo/analyzers/ContentAnalyzer.js +14 -3
  147. package/dist/tools/seo/analyzers/ContentAnalyzer.js.map +1 -1
  148. package/dist/tools/seo/auditors/SiteAuditor.d.ts.map +1 -1
  149. package/dist/tools/seo/auditors/SiteAuditor.js +12 -3
  150. package/dist/tools/seo/auditors/SiteAuditor.js.map +1 -1
  151. package/dist/tools/seo/generators/MetaGenerator.d.ts.map +1 -1
  152. package/dist/tools/seo/generators/MetaGenerator.js +25 -8
  153. package/dist/tools/seo/generators/MetaGenerator.js.map +1 -1
  154. package/dist/tools/seo/generators/SchemaGenerator.d.ts.map +1 -1
  155. package/dist/tools/seo/generators/SchemaGenerator.js.map +1 -1
  156. package/dist/tools/seo/optimizers/InternalLinkingSuggester.d.ts.map +1 -1
  157. package/dist/tools/seo/optimizers/InternalLinkingSuggester.js.map +1 -1
  158. package/dist/tools/site.d.ts.map +1 -1
  159. package/dist/tools/site.js.map +1 -1
  160. package/dist/tools/taxonomies.d.ts.map +1 -1
  161. package/dist/tools/taxonomies.js.map +1 -1
  162. package/dist/tools/users.d.ts.map +1 -1
  163. package/dist/tools/users.js.map +1 -1
  164. package/dist/utils/CircuitBreaker.d.ts +243 -0
  165. package/dist/utils/CircuitBreaker.d.ts.map +1 -0
  166. package/dist/utils/CircuitBreaker.js +456 -0
  167. package/dist/utils/CircuitBreaker.js.map +1 -0
  168. package/dist/utils/debug.d.ts.map +1 -1
  169. package/dist/utils/debug.js.map +1 -1
  170. package/dist/utils/error.js.map +1 -1
  171. package/dist/utils/index.d.ts +1 -0
  172. package/dist/utils/index.d.ts.map +1 -1
  173. package/dist/utils/index.js +2 -0
  174. package/dist/utils/index.js.map +1 -1
  175. package/dist/utils/logger.js.map +1 -1
  176. package/dist/utils/toolWrapper.d.ts.map +1 -1
  177. package/docs/DEPRECATIONS.md +157 -0
  178. package/package.json +2 -3
  179. package/src/cache/CacheInvalidation.ts +1 -1
  180. package/src/cache/CacheManager.ts +25 -8
  181. package/src/cache/HttpCacheWrapper.ts +1 -1
  182. package/src/cache/SEOCacheManager.ts +9 -3
  183. package/src/cache/index.ts +1 -1
  184. package/src/client/CachedWordPressClient.ts +6 -6
  185. package/src/client/MockWordPressClient.ts +3 -3
  186. package/src/client/SEOWordPressClient.ts +6 -6
  187. package/src/client/api.ts +129 -215
  188. package/src/client/auth.ts +3 -3
  189. package/src/client/managers/AuthManager.ts +1 -1
  190. package/src/client/managers/RequestManager.ts +6 -7
  191. package/src/client/managers/composed/MigrationAdapter.ts +4 -4
  192. package/src/client/managers/composed/index.ts +7 -7
  193. package/src/client/managers/implementations/ConfigurationProviderImpl.ts +1 -1
  194. package/src/client/managers/implementations/ErrorHandlerImpl.ts +1 -1
  195. package/src/client/managers/implementations/ParameterValidatorImpl.ts +1 -1
  196. package/src/client/operations/comments.ts +96 -0
  197. package/src/client/operations/index.ts +12 -0
  198. package/src/client/operations/media.ts +162 -0
  199. package/src/client/operations/pages.ts +71 -0
  200. package/src/client/operations/posts.ts +68 -0
  201. package/src/client/operations/site.ts +106 -0
  202. package/src/client/operations/taxonomies.ts +115 -0
  203. package/src/client/operations/users.ts +72 -0
  204. package/src/config/ServerConfiguration.ts +6 -6
  205. package/src/docs/DocumentationGenerator.ts +3 -3
  206. package/src/performance/MetricsCollector.ts +4 -4
  207. package/src/performance/PerformanceMonitor.ts +1 -1
  208. package/src/security/AISecurityScanner.ts +4 -3
  209. package/src/security/AutomatedRemediation.ts +1 -1
  210. package/src/security/InputValidator.ts +36 -19
  211. package/src/security/SecurityCIPipeline.ts +130 -953
  212. package/src/security/SecurityConfig.ts +1 -1
  213. package/src/security/SecurityConfigManager.ts +1 -1
  214. package/src/security/SecurityGateExecutor.ts +485 -0
  215. package/src/security/SecurityMonitoring.ts +1 -1
  216. package/src/security/SecurityReportGenerator.ts +272 -0
  217. package/src/security/SecurityReviewer.ts +1 -1
  218. package/src/security/SecurityTypes.ts +199 -0
  219. package/src/security/index.ts +6 -1
  220. package/src/server/ConnectionTester.ts +4 -4
  221. package/src/server/ToolRegistry.ts +6 -6
  222. package/src/tools/BaseToolManager.ts +2 -2
  223. package/src/tools/auth.ts +3 -3
  224. package/src/tools/cache.ts +3 -3
  225. package/src/tools/comments.ts +3 -3
  226. package/src/tools/media.ts +3 -3
  227. package/src/tools/pages.ts +3 -3
  228. package/src/tools/performance/PerformanceHelpers.ts +330 -0
  229. package/src/tools/performance/PerformanceTools.ts +854 -0
  230. package/src/tools/performance/index.ts +8 -0
  231. package/src/tools/performance.ts +12 -1073
  232. package/src/tools/posts.ts +1 -1
  233. package/src/tools/seo/analyzers/ContentAnalyzer.ts +21 -7
  234. package/src/tools/seo/auditors/SiteAuditor.ts +18 -7
  235. package/src/tools/seo/generators/MetaGenerator.ts +33 -12
  236. package/src/tools/seo/generators/SchemaGenerator.ts +3 -3
  237. package/src/tools/seo/optimizers/InternalLinkingSuggester.ts +4 -4
  238. package/src/tools/site.ts +3 -3
  239. package/src/tools/taxonomies.ts +3 -3
  240. package/src/tools/users.ts +4 -4
  241. package/src/utils/CircuitBreaker.ts +572 -0
  242. package/src/utils/debug.ts +3 -3
  243. package/src/utils/error.ts +1 -1
  244. package/src/utils/index.ts +3 -0
  245. package/src/utils/logger.ts +1 -1
  246. package/src/utils/toolWrapper.ts +2 -2
  247. package/docs/BRANCH_PROTECTION.md +0 -0
@@ -0,0 +1,330 @@
1
+ /**
2
+ * Performance Helper Utilities
3
+ * Extracted helper functions for performance metrics formatting and calculations
4
+ */
5
+
6
+ import type { PerformanceMetrics } from "@/performance/PerformanceMonitor.js";
7
+ import type { BenchmarkComparison, PerformanceAnomaly } from "@/performance/PerformanceAnalytics.js";
8
+
9
+ /**
10
+ * Performance alert interface
11
+ */
12
+ export interface PerformanceAlert {
13
+ severity: string;
14
+ category: string;
15
+ message: string;
16
+ metric: string;
17
+ actualValue: number;
18
+ threshold: number;
19
+ timestamp: number;
20
+ }
21
+
22
+ /**
23
+ * Calculate overall health status from metrics
24
+ */
25
+ export function calculateHealthStatus(metrics: PerformanceMetrics): string {
26
+ let score = 100;
27
+
28
+ if (metrics.requests.averageResponseTime > 2000) score -= 30;
29
+ else if (metrics.requests.averageResponseTime > 1000) score -= 15;
30
+
31
+ const errorRate = metrics.requests.failed / Math.max(metrics.requests.total, 1);
32
+ if (errorRate > 0.05) score -= 30;
33
+ else if (errorRate > 0.02) score -= 15;
34
+
35
+ if (metrics.cache.hitRate < 0.7) score -= 25;
36
+ else if (metrics.cache.hitRate < 0.85) score -= 10;
37
+
38
+ if (metrics.system.memoryUsage > 85) score -= 15;
39
+
40
+ if (score >= 90) return "Excellent";
41
+ if (score >= 75) return "Good";
42
+ if (score >= 60) return "Fair";
43
+ if (score >= 40) return "Poor";
44
+ return "Critical";
45
+ }
46
+
47
+ /**
48
+ * Calculate performance score from metrics
49
+ */
50
+ export function calculatePerformanceScore(metrics: PerformanceMetrics): number {
51
+ let score = 100;
52
+
53
+ // Response time scoring
54
+ if (metrics.requests.averageResponseTime > 3000) score -= 40;
55
+ else if (metrics.requests.averageResponseTime > 1500) score -= 25;
56
+ else if (metrics.requests.averageResponseTime > 800) score -= 10;
57
+
58
+ // Error rate scoring
59
+ const errorRate = metrics.requests.failed / Math.max(metrics.requests.total, 1);
60
+ if (errorRate > 0.1) score -= 30;
61
+ else if (errorRate > 0.05) score -= 20;
62
+ else if (errorRate > 0.02) score -= 10;
63
+
64
+ // Cache performance scoring
65
+ if (metrics.cache.hitRate < 0.5) score -= 20;
66
+ else if (metrics.cache.hitRate < 0.75) score -= 10;
67
+ else if (metrics.cache.hitRate < 0.9) score -= 5;
68
+
69
+ // System resource scoring
70
+ if (metrics.system.memoryUsage > 90) score -= 10;
71
+ else if (metrics.system.memoryUsage > 80) score -= 5;
72
+
73
+ return Math.max(0, Math.min(100, score));
74
+ }
75
+
76
+ /**
77
+ * Calculate cache efficiency rating
78
+ */
79
+ export function calculateCacheEfficiency(cacheMetrics: PerformanceMetrics["cache"]): string {
80
+ const efficiency =
81
+ cacheMetrics.hitRate * 100 + (cacheMetrics.totalSize > 0 ? 10 : 0) - (cacheMetrics.evictions > 100 ? 10 : 0);
82
+
83
+ if (efficiency >= 95) return "Excellent";
84
+ if (efficiency >= 85) return "Good";
85
+ if (efficiency >= 70) return "Fair";
86
+ return "Poor";
87
+ }
88
+
89
+ /**
90
+ * Format uptime in human-readable format
91
+ */
92
+ export function formatUptime(uptimeMs: number): string {
93
+ const seconds = Math.floor(uptimeMs / 1000);
94
+ const minutes = Math.floor(seconds / 60);
95
+ const hours = Math.floor(minutes / 60);
96
+ const days = Math.floor(hours / 24);
97
+
98
+ if (days > 0) return `${days}d ${hours % 24}h ${minutes % 60}m`;
99
+ if (hours > 0) return `${hours}h ${minutes % 60}m`;
100
+ if (minutes > 0) return `${minutes}m ${seconds % 60}s`;
101
+ return `${seconds}s`;
102
+ }
103
+
104
+ /**
105
+ * Parse timeframe string to milliseconds
106
+ */
107
+ export function parseTimeframe(timeframe: string): number {
108
+ const map: Record<string, number> = {
109
+ "1h": 60 * 60 * 1000,
110
+ "6h": 6 * 60 * 60 * 1000,
111
+ "12h": 12 * 60 * 60 * 1000,
112
+ "24h": 24 * 60 * 60 * 1000,
113
+ "7d": 7 * 24 * 60 * 60 * 1000,
114
+ "30d": 30 * 24 * 60 * 60 * 1000,
115
+ };
116
+ return map[timeframe] || map["24h"];
117
+ }
118
+
119
+ /**
120
+ * Extract metric value from data point
121
+ */
122
+ export function extractMetricValue(dataPoint: PerformanceMetrics, metric: string): number {
123
+ switch (metric) {
124
+ case "responseTime":
125
+ return dataPoint.requests.averageResponseTime;
126
+ case "cacheHitRate":
127
+ return dataPoint.cache.hitRate * 100;
128
+ case "errorRate":
129
+ return (dataPoint.requests.failed / Math.max(dataPoint.requests.total, 1)) * 100;
130
+ case "memoryUsage":
131
+ return dataPoint.system.memoryUsage;
132
+ case "requestVolume":
133
+ return dataPoint.requests.requestsPerSecond;
134
+ default:
135
+ return 0;
136
+ }
137
+ }
138
+
139
+ /**
140
+ * Process historical data for charting
141
+ */
142
+ export function processHistoricalDataForChart(
143
+ data: PerformanceMetrics[],
144
+ requestedMetrics?: string[],
145
+ ): Record<string, unknown> {
146
+ if (!data.length) return {};
147
+
148
+ const allMetrics = ["responseTime", "cacheHitRate", "errorRate", "memoryUsage", "requestVolume"];
149
+ const metricsToProcess = requestedMetrics || allMetrics;
150
+
151
+ const result: Record<string, unknown> = {};
152
+
153
+ for (const metric of metricsToProcess) {
154
+ result[metric] = data.map((point, index) => ({
155
+ timestamp: point.system.uptime,
156
+ value: extractMetricValue(point, metric),
157
+ index,
158
+ }));
159
+ }
160
+
161
+ return result;
162
+ }
163
+
164
+ /**
165
+ * Calculate average of number array
166
+ */
167
+ export function calculateAverage(values: number[]): number {
168
+ if (values.length === 0) return 0;
169
+ return values.reduce((sum, val) => sum + val, 0) / values.length;
170
+ }
171
+
172
+ /**
173
+ * Format benchmark status with emoji
174
+ */
175
+ export function formatBenchmarkStatus(status: string): string {
176
+ const statusMap: Record<string, string> = {
177
+ excellent: "🟢 Excellent",
178
+ good: "🟡 Good",
179
+ average: "🟠 Average",
180
+ below_average: "🔴 Below Average",
181
+ poor: "⚫ Poor",
182
+ };
183
+ return statusMap[status] || status;
184
+ }
185
+
186
+ /**
187
+ * Get benchmark improvement description
188
+ */
189
+ export function getBenchmarkImprovementDescription(benchmark: BenchmarkComparison): string {
190
+ const improvements: Record<string, string> = {
191
+ "Response Time": `Reduce by ${benchmark.improvement.toFixed(0)}ms`,
192
+ "Cache Hit Rate": `Increase by ${benchmark.improvement.toFixed(1)}%`,
193
+ "Error Rate": `Reduce by ${benchmark.improvement.toFixed(2)}%`,
194
+ "Memory Usage": `Reduce by ${benchmark.improvement.toFixed(0)}%`,
195
+ };
196
+ return improvements[benchmark.category] || `Improve by ${benchmark.improvement}`;
197
+ }
198
+
199
+ /**
200
+ * Calculate overall ranking from benchmarks
201
+ */
202
+ export function calculateOverallRanking(benchmarks: BenchmarkComparison[]): { percentile: number; status: string } {
203
+ const statuses = benchmarks.map((b) => b.status);
204
+ const excellentCount = statuses.filter((s) => s === "excellent").length;
205
+ const goodCount = statuses.filter((s) => s === "good").length;
206
+
207
+ const percentile = ((excellentCount + goodCount * 0.8) / statuses.length) * 100;
208
+
209
+ let status = "Needs Improvement";
210
+ if (percentile >= 90) status = "Top Performer";
211
+ else if (percentile >= 75) status = "Above Average";
212
+ else if (percentile >= 50) status = "Average";
213
+
214
+ return { percentile: Math.round(percentile), status };
215
+ }
216
+
217
+ /**
218
+ * Format alert message
219
+ */
220
+ export function formatAlertMessage(alert: PerformanceAlert): string {
221
+ return `${alert.severity.toUpperCase()}: ${alert.message} (${alert.metric}: ${alert.actualValue} vs threshold: ${alert.threshold})`;
222
+ }
223
+
224
+ /**
225
+ * Format anomaly description
226
+ */
227
+ export function formatAnomalyDescription(anomaly: PerformanceAnomaly): string {
228
+ const direction = anomaly.actualValue > anomaly.expectedValue ? "higher" : "lower";
229
+ return `${anomaly.metric} is ${Math.abs(anomaly.deviation).toFixed(1)}% ${direction} than expected (${anomaly.expectedValue.toFixed(2)} vs ${anomaly.actualValue.toFixed(2)})`;
230
+ }
231
+
232
+ /**
233
+ * Calculate alert status from summaries
234
+ */
235
+ export function calculateAlertStatus(
236
+ alertSummary: { critical: number; error: number; warning: number },
237
+ anomalySummary: {
238
+ critical: number;
239
+ major: number;
240
+ moderate: number;
241
+ minor: number;
242
+ },
243
+ ): string {
244
+ const critical = alertSummary.critical + anomalySummary.critical;
245
+ const high = alertSummary.error + anomalySummary.major;
246
+
247
+ if (critical > 0) return "Critical Issues Detected";
248
+ if (high > 2) return "High Priority Issues";
249
+ if (alertSummary.warning + anomalySummary.moderate > 5) return "Performance Warnings";
250
+ return "System Healthy";
251
+ }
252
+
253
+ /**
254
+ * Format priority with emoji
255
+ */
256
+ export function formatPriority(priority: string): string {
257
+ const map: Record<string, string> = {
258
+ critical: "🔴 Critical",
259
+ high: "🟠 High",
260
+ medium: "🟡 Medium",
261
+ low: "🟢 Low",
262
+ };
263
+ return map[priority] || priority;
264
+ }
265
+
266
+ /**
267
+ * Format effort with emoji
268
+ */
269
+ export function formatEffort(effort: string): string {
270
+ const map: Record<string, string> = {
271
+ low: "⚡ Low Effort",
272
+ medium: "⚖️ Medium Effort",
273
+ high: "🏋️ High Effort",
274
+ };
275
+ return map[effort] || effort;
276
+ }
277
+
278
+ /**
279
+ * Calculate estimated impact from recommendations
280
+ */
281
+ export function calculateEstimatedImpact(recommendations: Array<{ priority: string }>): string {
282
+ const highImpact = recommendations.filter((r) => ["critical", "high"].includes(r.priority)).length;
283
+ const totalImpact = recommendations.length;
284
+
285
+ if (highImpact >= 3) return "Significant Performance Gains Expected";
286
+ if (totalImpact >= 5) return "Moderate Performance Improvements";
287
+ if (totalImpact > 0) return "Minor Performance Optimizations";
288
+ return "System Already Optimized";
289
+ }
290
+
291
+ /**
292
+ * Convert metrics data to CSV format
293
+ */
294
+ export function convertToCSV(data: { currentMetrics: PerformanceMetrics }): string {
295
+ const metrics = data.currentMetrics;
296
+ const csv = [
297
+ "Metric,Value,Unit",
298
+ `Total Requests,${metrics.requests.total},count`,
299
+ `Average Response Time,${metrics.requests.averageResponseTime.toFixed(0)},ms`,
300
+ `Success Rate,${((metrics.requests.successful / Math.max(metrics.requests.total, 1)) * 100).toFixed(1)},%`,
301
+ `Cache Hit Rate,${(metrics.cache.hitRate * 100).toFixed(1)},%`,
302
+ `Cache Size,${metrics.cache.totalSize},entries`,
303
+ `Memory Usage,${metrics.system.memoryUsage},percent`,
304
+ `Uptime,${metrics.system.uptime},ms`,
305
+ ];
306
+
307
+ return csv.join("\n");
308
+ }
309
+
310
+ /**
311
+ * Create summary report from data
312
+ */
313
+ export function createSummaryReport(data: {
314
+ currentMetrics: PerformanceMetrics;
315
+ analytics?: { insights?: unknown[] };
316
+ }): Record<string, unknown> {
317
+ const metrics = data.currentMetrics;
318
+ return {
319
+ summary: `Performance Report - ${new Date().toISOString()}`,
320
+ overallHealth: calculateHealthStatus(metrics),
321
+ keyMetrics: {
322
+ averageResponseTime: `${metrics.requests.averageResponseTime.toFixed(0)}ms`,
323
+ cacheEfficiency: `${(metrics.cache.hitRate * 100).toFixed(1)}%`,
324
+ systemLoad: `${metrics.system.memoryUsage}%`,
325
+ errorRate: `${((metrics.requests.failed / Math.max(metrics.requests.total, 1)) * 100).toFixed(2)}%`,
326
+ },
327
+ recommendations: data.analytics?.insights?.slice(0, 3) || [],
328
+ nextSteps: "Review detailed metrics and implement high-priority optimizations",
329
+ };
330
+ }