mcp-wordpress 1.2.2 → 1.3.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 (251) hide show
  1. package/README.md +210 -182
  2. package/dist/cache/CacheInvalidation.d.ts +3 -3
  3. package/dist/cache/CacheInvalidation.d.ts.map +1 -1
  4. package/dist/cache/CacheInvalidation.js +119 -119
  5. package/dist/cache/CacheInvalidation.js.map +1 -1
  6. package/dist/cache/CacheManager.d.ts +5 -0
  7. package/dist/cache/CacheManager.d.ts.map +1 -1
  8. package/dist/cache/CacheManager.js +26 -16
  9. package/dist/cache/CacheManager.js.map +1 -1
  10. package/dist/cache/HttpCacheWrapper.d.ts +1 -1
  11. package/dist/cache/HttpCacheWrapper.d.ts.map +1 -1
  12. package/dist/cache/HttpCacheWrapper.js +29 -29
  13. package/dist/cache/HttpCacheWrapper.js.map +1 -1
  14. package/dist/cache/__tests__/CacheInvalidation.test.js +96 -94
  15. package/dist/cache/__tests__/CacheInvalidation.test.js.map +1 -1
  16. package/dist/cache/__tests__/CacheManager.test.js +113 -113
  17. package/dist/cache/__tests__/CacheManager.test.js.map +1 -1
  18. package/dist/cache/__tests__/CachedWordPressClient.test.js +102 -99
  19. package/dist/cache/__tests__/CachedWordPressClient.test.js.map +1 -1
  20. package/dist/cache/__tests__/HttpCacheWrapper.test.js +98 -95
  21. package/dist/cache/__tests__/HttpCacheWrapper.test.js.map +1 -1
  22. package/dist/cache/index.d.ts +7 -7
  23. package/dist/cache/index.d.ts.map +1 -1
  24. package/dist/cache/index.js +4 -4
  25. package/dist/cache/index.js.map +1 -1
  26. package/dist/client/CachedWordPressClient.d.ts +4 -4
  27. package/dist/client/CachedWordPressClient.d.ts.map +1 -1
  28. package/dist/client/CachedWordPressClient.js +55 -51
  29. package/dist/client/CachedWordPressClient.js.map +1 -1
  30. package/dist/client/api.d.ts +10 -10
  31. package/dist/client/api.js +158 -158
  32. package/dist/client/api.js.map +1 -1
  33. package/dist/client/auth.d.ts +2 -2
  34. package/dist/client/auth.js +72 -72
  35. package/dist/client/managers/AuthenticationManager.d.ts +2 -2
  36. package/dist/client/managers/AuthenticationManager.js +46 -46
  37. package/dist/client/managers/BaseManager.d.ts +1 -1
  38. package/dist/client/managers/BaseManager.js +9 -9
  39. package/dist/client/managers/RequestManager.d.ts +5 -3
  40. package/dist/client/managers/RequestManager.d.ts.map +1 -1
  41. package/dist/client/managers/RequestManager.js +39 -19
  42. package/dist/client/managers/RequestManager.js.map +1 -1
  43. package/dist/client/managers/index.d.ts +3 -3
  44. package/dist/client/managers/index.js +3 -3
  45. package/dist/config/ConfigurationSchema.d.ts +2 -2
  46. package/dist/config/ConfigurationSchema.d.ts.map +1 -1
  47. package/dist/config/ConfigurationSchema.js +40 -40
  48. package/dist/config/ConfigurationSchema.js.map +1 -1
  49. package/dist/config/ServerConfiguration.d.ts +2 -2
  50. package/dist/config/ServerConfiguration.js +35 -35
  51. package/dist/config/ServerConfiguration.js.map +1 -1
  52. package/dist/docs/DocumentationGenerator.d.ts.map +1 -1
  53. package/dist/docs/DocumentationGenerator.js +296 -255
  54. package/dist/docs/DocumentationGenerator.js.map +1 -1
  55. package/dist/docs/MarkdownFormatter.d.ts +1 -1
  56. package/dist/docs/MarkdownFormatter.d.ts.map +1 -1
  57. package/dist/docs/MarkdownFormatter.js +60 -51
  58. package/dist/docs/MarkdownFormatter.js.map +1 -1
  59. package/dist/docs/index.d.ts +3 -3
  60. package/dist/docs/index.d.ts.map +1 -1
  61. package/dist/docs/index.js +2 -2
  62. package/dist/index.d.ts.map +1 -1
  63. package/dist/index.js +16 -16
  64. package/dist/index.js.map +1 -1
  65. package/dist/mcp-wordpress-1.3.0.tgz +0 -0
  66. package/dist/performance/MetricsCollector.d.ts +3 -3
  67. package/dist/performance/MetricsCollector.d.ts.map +1 -1
  68. package/dist/performance/MetricsCollector.js +33 -27
  69. package/dist/performance/MetricsCollector.js.map +1 -1
  70. package/dist/performance/PerformanceAnalytics.d.ts +12 -12
  71. package/dist/performance/PerformanceAnalytics.d.ts.map +1 -1
  72. package/dist/performance/PerformanceAnalytics.js +200 -154
  73. package/dist/performance/PerformanceAnalytics.js.map +1 -1
  74. package/dist/performance/PerformanceMonitor.d.ts +5 -5
  75. package/dist/performance/PerformanceMonitor.d.ts.map +1 -1
  76. package/dist/performance/PerformanceMonitor.js +53 -52
  77. package/dist/performance/PerformanceMonitor.js.map +1 -1
  78. package/dist/performance/index.d.ts +6 -6
  79. package/dist/performance/index.d.ts.map +1 -1
  80. package/dist/performance/index.js +3 -3
  81. package/dist/security/InputValidator.d.ts +1 -1
  82. package/dist/security/InputValidator.d.ts.map +1 -1
  83. package/dist/security/InputValidator.js +111 -88
  84. package/dist/security/InputValidator.js.map +1 -1
  85. package/dist/security/SecurityConfig.d.ts +5 -5
  86. package/dist/security/SecurityConfig.js +92 -92
  87. package/dist/security/SecurityConfig.js.map +1 -1
  88. package/dist/server/ConnectionTester.d.ts +1 -1
  89. package/dist/server/ConnectionTester.d.ts.map +1 -1
  90. package/dist/server/ConnectionTester.js +4 -4
  91. package/dist/server/ConnectionTester.js.map +1 -1
  92. package/dist/server/ToolRegistry.d.ts +2 -2
  93. package/dist/server/ToolRegistry.d.ts.map +1 -1
  94. package/dist/server/ToolRegistry.js +35 -32
  95. package/dist/server/ToolRegistry.js.map +1 -1
  96. package/dist/server.d.ts +2 -2
  97. package/dist/server.js +2 -2
  98. package/dist/tools/BaseToolManager.js +5 -5
  99. package/dist/tools/auth.d.ts +2 -2
  100. package/dist/tools/auth.d.ts.map +1 -1
  101. package/dist/tools/auth.js +32 -31
  102. package/dist/tools/auth.js.map +1 -1
  103. package/dist/tools/cache.d.ts +1 -1
  104. package/dist/tools/cache.d.ts.map +1 -1
  105. package/dist/tools/cache.js +71 -71
  106. package/dist/tools/cache.js.map +1 -1
  107. package/dist/tools/comments.d.ts +2 -2
  108. package/dist/tools/comments.d.ts.map +1 -1
  109. package/dist/tools/comments.js +79 -79
  110. package/dist/tools/comments.js.map +1 -1
  111. package/dist/tools/index.d.ts +10 -10
  112. package/dist/tools/index.js +10 -10
  113. package/dist/tools/media.d.ts +2 -2
  114. package/dist/tools/media.js +80 -80
  115. package/dist/tools/pages.d.ts +2 -2
  116. package/dist/tools/pages.d.ts.map +1 -1
  117. package/dist/tools/pages.js +75 -75
  118. package/dist/tools/pages.js.map +1 -1
  119. package/dist/tools/performance.d.ts +1 -1
  120. package/dist/tools/performance.d.ts.map +1 -1
  121. package/dist/tools/performance.js +311 -287
  122. package/dist/tools/performance.js.map +1 -1
  123. package/dist/tools/posts.d.ts +2 -2
  124. package/dist/tools/posts.d.ts.map +1 -1
  125. package/dist/tools/posts.js +94 -94
  126. package/dist/tools/posts.js.map +1 -1
  127. package/dist/tools/site.d.ts +2 -2
  128. package/dist/tools/site.d.ts.map +1 -1
  129. package/dist/tools/site.js +60 -60
  130. package/dist/tools/site.js.map +1 -1
  131. package/dist/tools/taxonomies.d.ts +2 -2
  132. package/dist/tools/taxonomies.js +89 -89
  133. package/dist/tools/users.d.ts +2 -2
  134. package/dist/tools/users.js +68 -68
  135. package/dist/tools/users.js.map +1 -1
  136. package/dist/types/client.d.ts +13 -13
  137. package/dist/types/client.d.ts.map +1 -1
  138. package/dist/types/client.js +12 -12
  139. package/dist/types/client.js.map +1 -1
  140. package/dist/types/index.d.ts +19 -19
  141. package/dist/types/index.d.ts.map +1 -1
  142. package/dist/types/index.js +3 -3
  143. package/dist/types/mcp.d.ts +7 -7
  144. package/dist/types/wordpress.d.ts +21 -21
  145. package/dist/types/wordpress.d.ts.map +1 -1
  146. package/dist/utils/debug.d.ts +2 -2
  147. package/dist/utils/debug.js +28 -28
  148. package/dist/utils/error.d.ts.map +1 -1
  149. package/dist/utils/error.js +13 -13
  150. package/dist/utils/error.js.map +1 -1
  151. package/dist/utils/toolWrapper.d.ts.map +1 -1
  152. package/dist/utils/toolWrapper.js +5 -5
  153. package/dist/utils/toolWrapper.js.map +1 -1
  154. package/dist/utils/validation.d.ts.map +1 -1
  155. package/dist/utils/validation.js +41 -31
  156. package/dist/utils/validation.js.map +1 -1
  157. package/docs/CACHING.md +36 -2
  158. package/docs/DOCKER.md +24 -18
  159. package/docs/PERFORMANCE_MONITORING.md +49 -1
  160. package/docs/SECURITY_TESTING.md +30 -1
  161. package/docs/api/README.md +9 -1
  162. package/docs/api/summary.json +1 -1
  163. package/docs/contract-testing.md +24 -3
  164. package/docs/developer/GITHUB_ACTIONS_SETUP.md +8 -2
  165. package/docs/developer/MAINTENANCE.md +29 -3
  166. package/docs/developer/MIGRATION_GUIDE.md +13 -1
  167. package/docs/developer/NPM_AUTH_SETUP.md +13 -2
  168. package/docs/developer/REFACTORING.md +31 -1
  169. package/docs/releases/COMMUNITY_ANNOUNCEMENT_v1.1.2.md +18 -7
  170. package/docs/releases/RELEASE_NOTES_v1.1.2.md +31 -5
  171. package/docs/user-guides/DOCKER_SETUP.md +264 -0
  172. package/docs/user-guides/DTX_SETUP.md +327 -0
  173. package/docs/user-guides/NPM_SETUP.md +109 -0
  174. package/docs/user-guides/NPX_SETUP.md +281 -0
  175. package/docs/wordpress-rest-api-authentication-troubleshooting.md +13 -2
  176. package/package.json +27 -8
  177. package/src/cache/CacheInvalidation.ts +140 -132
  178. package/src/cache/CacheManager.ts +40 -29
  179. package/src/cache/HttpCacheWrapper.ts +105 -68
  180. package/src/cache/__tests__/CacheInvalidation.test.ts +123 -118
  181. package/src/cache/__tests__/CacheManager.test.ts +156 -152
  182. package/src/cache/__tests__/CachedWordPressClient.test.ts +131 -116
  183. package/src/cache/__tests__/HttpCacheWrapper.test.ts +118 -115
  184. package/src/cache/index.ts +13 -13
  185. package/src/client/CachedWordPressClient.ts +90 -80
  186. package/src/client/api.ts +205 -205
  187. package/src/client/auth.ts +80 -80
  188. package/src/client/managers/AuthenticationManager.ts +61 -61
  189. package/src/client/managers/BaseManager.ts +11 -11
  190. package/src/client/managers/RequestManager.ts +79 -47
  191. package/src/client/managers/index.ts +3 -3
  192. package/src/config/ConfigurationSchema.ts +44 -44
  193. package/src/config/ServerConfiguration.ts +39 -39
  194. package/src/docs/DocumentationGenerator.ts +402 -295
  195. package/src/docs/MarkdownFormatter.ts +94 -69
  196. package/src/docs/index.ts +4 -4
  197. package/src/index.ts +24 -21
  198. package/src/performance/MetricsCollector.ts +90 -58
  199. package/src/performance/PerformanceAnalytics.ts +386 -262
  200. package/src/performance/PerformanceMonitor.ts +152 -118
  201. package/src/performance/index.ts +9 -9
  202. package/src/security/InputValidator.ts +148 -91
  203. package/src/security/SecurityConfig.ts +94 -94
  204. package/src/server/ConnectionTester.ts +21 -15
  205. package/src/server/ToolRegistry.ts +64 -51
  206. package/src/server.ts +2 -2
  207. package/src/tools/BaseToolManager.ts +6 -6
  208. package/src/tools/auth.ts +42 -37
  209. package/src/tools/cache.ts +85 -81
  210. package/src/tools/comments.ts +93 -91
  211. package/src/tools/index.ts +10 -10
  212. package/src/tools/media.ts +89 -89
  213. package/src/tools/pages.ts +89 -87
  214. package/src/tools/performance.ts +443 -352
  215. package/src/tools/posts.ts +109 -107
  216. package/src/tools/site.ts +86 -77
  217. package/src/tools/taxonomies.ts +102 -102
  218. package/src/tools/users.ts +77 -77
  219. package/src/types/client.ts +157 -60
  220. package/src/types/index.ts +49 -27
  221. package/src/types/mcp.ts +15 -15
  222. package/src/types/wordpress.ts +57 -29
  223. package/src/utils/debug.ts +37 -37
  224. package/src/utils/error.ts +47 -25
  225. package/src/utils/toolWrapper.ts +12 -8
  226. package/src/utils/validation.ts +116 -65
  227. package/dist/client/WordPressClient.d.ts +0 -81
  228. package/dist/client/WordPressClient.d.ts.map +0 -1
  229. package/dist/client/WordPressClient.js +0 -354
  230. package/dist/client/WordPressClient.js.map +0 -1
  231. package/dist/performance/AnomalyDetector.d.ts +0 -63
  232. package/dist/performance/AnomalyDetector.d.ts.map +0 -1
  233. package/dist/performance/AnomalyDetector.js +0 -222
  234. package/dist/performance/AnomalyDetector.js.map +0 -1
  235. package/dist/performance/BenchmarkAnalyzer.d.ts +0 -67
  236. package/dist/performance/BenchmarkAnalyzer.d.ts.map +0 -1
  237. package/dist/performance/BenchmarkAnalyzer.js +0 -301
  238. package/dist/performance/BenchmarkAnalyzer.js.map +0 -1
  239. package/dist/performance/TrendAnalyzer.d.ts +0 -69
  240. package/dist/performance/TrendAnalyzer.d.ts.map +0 -1
  241. package/dist/performance/TrendAnalyzer.js +0 -203
  242. package/dist/performance/TrendAnalyzer.js.map +0 -1
  243. package/dist/tools/BaseToolClass.d.ts +0 -76
  244. package/dist/tools/BaseToolClass.d.ts.map +0 -1
  245. package/dist/tools/BaseToolClass.js +0 -104
  246. package/dist/tools/BaseToolClass.js.map +0 -1
  247. package/dist/tools/base.d.ts +0 -37
  248. package/dist/tools/base.d.ts.map +0 -1
  249. package/dist/tools/base.js +0 -60
  250. package/dist/tools/base.js.map +0 -1
  251. package/docs/user-guides/CLAUDE_DESKTOP_SETUP.md +0 -187
@@ -18,7 +18,7 @@ export interface PerformanceMetrics {
18
18
  p99ResponseTime: number;
19
19
  };
20
20
 
21
- // Cache Performance
21
+ // Cache Performance
22
22
  cache: {
23
23
  hits: number;
24
24
  misses: number;
@@ -42,7 +42,7 @@ export interface PerformanceMetrics {
42
42
  wordpress: {
43
43
  authSuccessRate: number;
44
44
  apiVersion: string;
45
- siteHealth: 'healthy' | 'warning' | 'critical';
45
+ siteHealth: "healthy" | "warning" | "critical";
46
46
  averageDbResponseTime: number;
47
47
  pluginCompatibility: number;
48
48
  };
@@ -51,19 +51,22 @@ export interface PerformanceMetrics {
51
51
  tools: {
52
52
  mostUsedTool: string;
53
53
  toolUsageCount: Record<string, number>;
54
- toolPerformance: Record<string, {
55
- averageTime: number;
56
- successRate: number;
57
- callCount: number;
58
- }>;
54
+ toolPerformance: Record<
55
+ string,
56
+ {
57
+ averageTime: number;
58
+ successRate: number;
59
+ callCount: number;
60
+ }
61
+ >;
59
62
  };
60
63
  }
61
64
 
62
65
  export interface PerformanceAlert {
63
66
  id: string;
64
67
  timestamp: number;
65
- severity: 'info' | 'warning' | 'error' | 'critical';
66
- category: 'performance' | 'cache' | 'system' | 'wordpress';
68
+ severity: "info" | "warning" | "error" | "critical";
69
+ category: "performance" | "cache" | "system" | "wordpress";
67
70
  message: string;
68
71
  metric: string;
69
72
  threshold: number;
@@ -108,16 +111,16 @@ export class PerformanceMonitor {
108
111
  errorRate: 0.05, // 5%
109
112
  cacheHitRate: 0.8, // 80%
110
113
  memoryUsage: 80, // 80%
111
- cpuUsage: 80 // 80%
114
+ cpuUsage: 80, // 80%
112
115
  },
113
116
  enableRealTimeMonitoring: true,
114
117
  enableHistoricalData: true,
115
118
  enableAlerts: true,
116
- ...config
119
+ ...config,
117
120
  };
118
121
 
119
122
  this.metrics = this.initializeMetrics();
120
-
123
+
121
124
  if (this.config.enableRealTimeMonitoring) {
122
125
  this.startCollection();
123
126
  }
@@ -138,7 +141,7 @@ export class PerformanceMonitor {
138
141
  requestsPerSecond: 0,
139
142
  p50ResponseTime: 0,
140
143
  p95ResponseTime: 0,
141
- p99ResponseTime: 0
144
+ p99ResponseTime: 0,
142
145
  },
143
146
  cache: {
144
147
  hits: 0,
@@ -147,36 +150,40 @@ export class PerformanceMonitor {
147
150
  totalSize: 0,
148
151
  memoryUsageMB: 0,
149
152
  evictions: 0,
150
- averageCacheTime: 0
153
+ averageCacheTime: 0,
151
154
  },
152
155
  system: {
153
156
  cpuUsage: 0,
154
157
  memoryUsage: 0,
155
158
  uptime: 0,
156
159
  activeConnections: 0,
157
- concurrentRequests: 0
160
+ concurrentRequests: 0,
158
161
  },
159
162
  wordpress: {
160
163
  authSuccessRate: 0,
161
- apiVersion: 'v2',
162
- siteHealth: 'healthy',
164
+ apiVersion: "v2",
165
+ siteHealth: "healthy",
163
166
  averageDbResponseTime: 0,
164
- pluginCompatibility: 100
167
+ pluginCompatibility: 100,
165
168
  },
166
169
  tools: {
167
- mostUsedTool: '',
170
+ mostUsedTool: "",
168
171
  toolUsageCount: {},
169
- toolPerformance: {}
170
- }
172
+ toolPerformance: {},
173
+ },
171
174
  };
172
175
  }
173
176
 
174
177
  /**
175
178
  * Record a request performance metric
176
179
  */
177
- recordRequest(responseTime: number, success: boolean, toolName?: string): void {
180
+ recordRequest(
181
+ responseTime: number,
182
+ success: boolean,
183
+ toolName?: string,
184
+ ): void {
178
185
  this.metrics.requests.total++;
179
-
186
+
180
187
  if (success) {
181
188
  this.metrics.requests.successful++;
182
189
  } else {
@@ -209,7 +216,7 @@ export class PerformanceMonitor {
209
216
  totalSize: cacheStats.totalSize || 0,
210
217
  memoryUsageMB: this.estimateCacheMemoryUsage(cacheStats.totalSize),
211
218
  evictions: cacheStats.evictions || 0,
212
- averageCacheTime: 0.5 // Sub-millisecond average
219
+ averageCacheTime: 0.5, // Sub-millisecond average
213
220
  };
214
221
  }
215
222
 
@@ -218,13 +225,13 @@ export class PerformanceMonitor {
218
225
  */
219
226
  updateSystemMetrics(): void {
220
227
  const memUsage = process.memoryUsage();
221
-
228
+
222
229
  this.metrics.system = {
223
230
  cpuUsage: this.getCpuUsage(),
224
231
  memoryUsage: Math.round((memUsage.heapUsed / memUsage.heapTotal) * 100),
225
232
  uptime: Date.now() - this.startTime,
226
233
  activeConnections: 1, // Will be updated by connection manager
227
- concurrentRequests: 0 // Will be updated by request manager
234
+ concurrentRequests: 0, // Will be updated by request manager
228
235
  };
229
236
  }
230
237
 
@@ -240,23 +247,23 @@ export class PerformanceMonitor {
240
247
  * Get historical performance data
241
248
  */
242
249
  getHistoricalData(
243
- startTime?: number,
244
- endTime?: number
250
+ startTime?: number,
251
+ endTime?: number,
245
252
  ): PerformanceMetrics[] {
246
253
  if (!this.config.enableHistoricalData) {
247
254
  return [];
248
255
  }
249
256
 
250
257
  let data = [...this.historicalData];
251
-
258
+
252
259
  if (startTime) {
253
- data = data.filter(m => m.system.uptime >= startTime);
260
+ data = data.filter((m) => m.system.uptime >= startTime);
254
261
  }
255
-
262
+
256
263
  if (endTime) {
257
- data = data.filter(m => m.system.uptime <= endTime);
264
+ data = data.filter((m) => m.system.uptime <= endTime);
258
265
  }
259
-
266
+
260
267
  return data;
261
268
  }
262
269
 
@@ -265,7 +272,7 @@ export class PerformanceMonitor {
265
272
  */
266
273
  getAlerts(severity?: string): PerformanceAlert[] {
267
274
  if (severity) {
268
- return this.alerts.filter(alert => alert.severity === severity);
275
+ return this.alerts.filter((alert) => alert.severity === severity);
269
276
  }
270
277
  return [...this.alerts];
271
278
  }
@@ -284,35 +291,35 @@ export class PerformanceMonitor {
284
291
  summary: string;
285
292
  recommendations: string[];
286
293
  trends: string[];
287
- health: 'excellent' | 'good' | 'warning' | 'critical';
294
+ health: "excellent" | "good" | "warning" | "critical";
288
295
  } {
289
296
  const current = this.getMetrics();
290
297
  const health = this.calculateOverallHealth(current);
291
-
298
+
292
299
  return {
293
300
  summary: this.generateSummary(current),
294
301
  recommendations: this.generateRecommendations(current),
295
302
  trends: this.generateTrends(),
296
- health
303
+ health,
297
304
  };
298
305
  }
299
306
 
300
307
  /**
301
308
  * Export performance data
302
309
  */
303
- exportData(format: 'json' | 'csv' = 'json'): string {
310
+ exportData(format: "json" | "csv" = "json"): string {
304
311
  const data = {
305
312
  currentMetrics: this.getMetrics(),
306
313
  historicalData: this.getHistoricalData(),
307
314
  alerts: this.getAlerts(),
308
315
  config: this.config,
309
- generatedAt: new Date().toISOString()
316
+ generatedAt: new Date().toISOString(),
310
317
  };
311
318
 
312
- if (format === 'csv') {
319
+ if (format === "csv") {
313
320
  return this.convertToCSV(data);
314
321
  }
315
-
322
+
316
323
  return JSON.stringify(data, null, 2);
317
324
  }
318
325
 
@@ -322,7 +329,7 @@ export class PerformanceMonitor {
322
329
  private startCollection(): void {
323
330
  this.collectionTimer = setInterval(() => {
324
331
  const snapshot = this.getMetrics();
325
-
332
+
326
333
  if (this.config.enableHistoricalData) {
327
334
  this.historicalData.push(snapshot);
328
335
  this.cleanupOldData();
@@ -342,9 +349,13 @@ export class PerformanceMonitor {
342
349
  /**
343
350
  * Record tool usage and performance
344
351
  */
345
- private recordToolUsage(toolName: string, responseTime: number, success: boolean): void {
352
+ private recordToolUsage(
353
+ toolName: string,
354
+ responseTime: number,
355
+ success: boolean,
356
+ ): void {
346
357
  // Update usage count
347
- this.metrics.tools.toolUsageCount[toolName] =
358
+ this.metrics.tools.toolUsageCount[toolName] =
348
359
  (this.metrics.tools.toolUsageCount[toolName] || 0) + 1;
349
360
 
350
361
  // Update performance metrics
@@ -352,26 +363,29 @@ export class PerformanceMonitor {
352
363
  this.metrics.tools.toolPerformance[toolName] = {
353
364
  averageTime: responseTime,
354
365
  successRate: success ? 1 : 0,
355
- callCount: 1
366
+ callCount: 1,
356
367
  };
357
368
  } else {
358
369
  const perf = this.metrics.tools.toolPerformance[toolName];
359
370
  const totalCalls = perf.callCount + 1;
360
-
371
+
361
372
  // Update average time
362
- perf.averageTime = (perf.averageTime * perf.callCount + responseTime) / totalCalls;
363
-
373
+ perf.averageTime =
374
+ (perf.averageTime * perf.callCount + responseTime) / totalCalls;
375
+
364
376
  // Update success rate
365
- const totalSuccess = perf.successRate * perf.callCount + (success ? 1 : 0);
377
+ const totalSuccess =
378
+ perf.successRate * perf.callCount + (success ? 1 : 0);
366
379
  perf.successRate = totalSuccess / totalCalls;
367
-
380
+
368
381
  perf.callCount = totalCalls;
369
382
  }
370
383
 
371
384
  // Update most used tool
372
385
  const usageCounts = this.metrics.tools.toolUsageCount;
373
- this.metrics.tools.mostUsedTool = Object.keys(usageCounts)
374
- .reduce((a, b) => usageCounts[a] > usageCounts[b] ? a : b);
386
+ this.metrics.tools.mostUsedTool = Object.keys(usageCounts).reduce((a, b) =>
387
+ usageCounts[a] > usageCounts[b] ? a : b,
388
+ );
375
389
  }
376
390
 
377
391
  /**
@@ -382,22 +396,23 @@ export class PerformanceMonitor {
382
396
 
383
397
  const sorted = [...this.responseTimes].sort((a, b) => a - b);
384
398
  const total = this.metrics.requests.total;
385
-
386
- this.metrics.requests.averageResponseTime =
387
- this.responseTimes.reduce((sum, time) => sum + time, 0) / this.responseTimes.length;
388
-
399
+
400
+ this.metrics.requests.averageResponseTime =
401
+ this.responseTimes.reduce((sum, time) => sum + time, 0) /
402
+ this.responseTimes.length;
403
+
389
404
  this.metrics.requests.minResponseTime = sorted[0];
390
405
  this.metrics.requests.maxResponseTime = sorted[sorted.length - 1];
391
-
406
+
392
407
  // Calculate percentiles
393
408
  this.metrics.requests.p50ResponseTime = this.getPercentile(sorted, 0.5);
394
409
  this.metrics.requests.p95ResponseTime = this.getPercentile(sorted, 0.95);
395
410
  this.metrics.requests.p99ResponseTime = this.getPercentile(sorted, 0.99);
396
-
411
+
397
412
  // Calculate requests per second
398
413
  const uptime = (Date.now() - this.startTime) / 1000;
399
414
  this.metrics.requests.requestsPerSecond = total / uptime;
400
-
415
+
401
416
  // Limit response time history to prevent memory growth
402
417
  if (this.responseTimes.length > 10000) {
403
418
  this.responseTimes = this.responseTimes.slice(-5000);
@@ -434,33 +449,45 @@ export class PerformanceMonitor {
434
449
  */
435
450
  private checkPerformanceAlerts(): void {
436
451
  const thresholds = this.config.alertThresholds;
437
-
452
+
438
453
  // Response time alert
439
454
  if (this.metrics.requests.averageResponseTime > thresholds.responseTime) {
440
- this.addAlert('warning', 'performance',
455
+ this.addAlert(
456
+ "warning",
457
+ "performance",
441
458
  `High response time: ${this.metrics.requests.averageResponseTime}ms`,
442
- 'averageResponseTime', thresholds.responseTime,
459
+ "averageResponseTime",
460
+ thresholds.responseTime,
443
461
  this.metrics.requests.averageResponseTime,
444
- 'Consider enabling caching or optimizing queries'
462
+ "Consider enabling caching or optimizing queries",
445
463
  );
446
464
  }
447
465
 
448
466
  // Error rate alert
449
- const errorRate = this.metrics.requests.failed / this.metrics.requests.total;
467
+ const errorRate =
468
+ this.metrics.requests.failed / this.metrics.requests.total;
450
469
  if (errorRate > thresholds.errorRate) {
451
- this.addAlert('error', 'performance',
470
+ this.addAlert(
471
+ "error",
472
+ "performance",
452
473
  `High error rate: ${Math.round(errorRate * 100)}%`,
453
- 'errorRate', thresholds.errorRate, errorRate,
454
- 'Check WordPress connectivity and authentication'
474
+ "errorRate",
475
+ thresholds.errorRate,
476
+ errorRate,
477
+ "Check WordPress connectivity and authentication",
455
478
  );
456
479
  }
457
480
 
458
481
  // Cache hit rate alert
459
482
  if (this.metrics.cache.hitRate < thresholds.cacheHitRate) {
460
- this.addAlert('warning', 'cache',
483
+ this.addAlert(
484
+ "warning",
485
+ "cache",
461
486
  `Low cache hit rate: ${Math.round(this.metrics.cache.hitRate * 100)}%`,
462
- 'cacheHitRate', thresholds.cacheHitRate, this.metrics.cache.hitRate,
463
- 'Consider cache warming or adjusting TTL values'
487
+ "cacheHitRate",
488
+ thresholds.cacheHitRate,
489
+ this.metrics.cache.hitRate,
490
+ "Consider cache warming or adjusting TTL values",
464
491
  );
465
492
  }
466
493
  }
@@ -469,13 +496,13 @@ export class PerformanceMonitor {
469
496
  * Add performance alert
470
497
  */
471
498
  private addAlert(
472
- severity: 'info' | 'warning' | 'error' | 'critical',
473
- category: 'performance' | 'cache' | 'system' | 'wordpress',
499
+ severity: "info" | "warning" | "error" | "critical",
500
+ category: "performance" | "cache" | "system" | "wordpress",
474
501
  message: string,
475
502
  metric: string,
476
503
  threshold: number,
477
504
  actualValue: number,
478
- suggestion?: string
505
+ suggestion?: string,
479
506
  ): void {
480
507
  const alert: PerformanceAlert = {
481
508
  id: `${Date.now()}-${Math.random().toString(36).substr(2, 9)}`,
@@ -486,11 +513,11 @@ export class PerformanceMonitor {
486
513
  metric,
487
514
  threshold,
488
515
  actualValue,
489
- ...(suggestion && { suggestion })
516
+ ...(suggestion && { suggestion }),
490
517
  };
491
518
 
492
519
  this.alerts.push(alert);
493
-
520
+
494
521
  // Limit alert history
495
522
  if (this.alerts.length > 1000) {
496
523
  this.alerts = this.alerts.slice(-500);
@@ -500,44 +527,49 @@ export class PerformanceMonitor {
500
527
  /**
501
528
  * Calculate overall system health
502
529
  */
503
- private calculateOverallHealth(metrics: PerformanceMetrics): 'excellent' | 'good' | 'warning' | 'critical' {
530
+ private calculateOverallHealth(
531
+ metrics: PerformanceMetrics,
532
+ ): "excellent" | "good" | "warning" | "critical" {
504
533
  let score = 100;
505
-
534
+
506
535
  // Response time impact
507
536
  if (metrics.requests.averageResponseTime > 3000) score -= 30;
508
537
  else if (metrics.requests.averageResponseTime > 1000) score -= 15;
509
-
538
+
510
539
  // Error rate impact
511
540
  const errorRate = metrics.requests.failed / metrics.requests.total;
512
541
  if (errorRate > 0.1) score -= 40;
513
542
  else if (errorRate > 0.05) score -= 20;
514
-
543
+
515
544
  // Cache performance impact
516
545
  if (metrics.cache.hitRate < 0.5) score -= 25;
517
546
  else if (metrics.cache.hitRate < 0.8) score -= 10;
518
-
547
+
519
548
  // System resource impact
520
549
  if (metrics.system.memoryUsage > 90) score -= 20;
521
550
  else if (metrics.system.memoryUsage > 80) score -= 10;
522
-
523
- if (score >= 90) return 'excellent';
524
- if (score >= 75) return 'good';
525
- if (score >= 50) return 'warning';
526
- return 'critical';
551
+
552
+ if (score >= 90) return "excellent";
553
+ if (score >= 75) return "good";
554
+ if (score >= 50) return "warning";
555
+ return "critical";
527
556
  }
528
557
 
529
558
  /**
530
559
  * Generate performance summary
531
560
  */
532
561
  private generateSummary(metrics: PerformanceMetrics): string {
533
- const errorRate = metrics.requests.total > 0
534
- ? (metrics.requests.failed / metrics.requests.total * 100).toFixed(1)
535
- : '0';
536
-
537
- return `Performance Summary: ${metrics.requests.total} requests processed with ${errorRate}% error rate. ` +
538
- `Average response time: ${metrics.requests.averageResponseTime.toFixed(0)}ms. ` +
539
- `Cache hit rate: ${(metrics.cache.hitRate * 100).toFixed(1)}%. ` +
540
- `System uptime: ${Math.round(metrics.system.uptime / 1000 / 60)} minutes.`;
562
+ const errorRate =
563
+ metrics.requests.total > 0
564
+ ? ((metrics.requests.failed / metrics.requests.total) * 100).toFixed(1)
565
+ : "0";
566
+
567
+ return (
568
+ `Performance Summary: ${metrics.requests.total} requests processed with ${errorRate}% error rate. ` +
569
+ `Average response time: ${metrics.requests.averageResponseTime.toFixed(0)}ms. ` +
570
+ `Cache hit rate: ${(metrics.cache.hitRate * 100).toFixed(1)}%. ` +
571
+ `System uptime: ${Math.round(metrics.system.uptime / 1000 / 60)} minutes.`
572
+ );
541
573
  }
542
574
 
543
575
  /**
@@ -545,24 +577,26 @@ export class PerformanceMonitor {
545
577
  */
546
578
  private generateRecommendations(metrics: PerformanceMetrics): string[] {
547
579
  const recommendations: string[] = [];
548
-
580
+
549
581
  if (metrics.requests.averageResponseTime > 1000) {
550
- recommendations.push('Enable caching to reduce response times');
582
+ recommendations.push("Enable caching to reduce response times");
551
583
  }
552
-
584
+
553
585
  if (metrics.cache.hitRate < 0.8) {
554
- recommendations.push('Warm cache with frequently accessed data');
586
+ recommendations.push("Warm cache with frequently accessed data");
555
587
  }
556
-
588
+
557
589
  if (metrics.system.memoryUsage > 80) {
558
- recommendations.push('Consider increasing memory allocation or cache size limits');
590
+ recommendations.push(
591
+ "Consider increasing memory allocation or cache size limits",
592
+ );
559
593
  }
560
-
594
+
561
595
  const errorRate = metrics.requests.failed / metrics.requests.total;
562
596
  if (errorRate > 0.05) {
563
- recommendations.push('Review error logs and improve error handling');
597
+ recommendations.push("Review error logs and improve error handling");
564
598
  }
565
-
599
+
566
600
  return recommendations;
567
601
  }
568
602
 
@@ -571,28 +605,28 @@ export class PerformanceMonitor {
571
605
  */
572
606
  private generateTrends(): string[] {
573
607
  if (this.historicalData.length < 2) {
574
- return ['Insufficient data for trend analysis'];
608
+ return ["Insufficient data for trend analysis"];
575
609
  }
576
-
610
+
577
611
  const trends: string[] = [];
578
612
  const recent = this.historicalData.slice(-5);
579
-
613
+
580
614
  // Response time trend
581
- const responseTimes = recent.map(d => d.requests.averageResponseTime);
615
+ const responseTimes = recent.map((d) => d.requests.averageResponseTime);
582
616
  if (this.isIncreasing(responseTimes)) {
583
- trends.push('Response times are increasing');
617
+ trends.push("Response times are increasing");
584
618
  } else if (this.isDecreasing(responseTimes)) {
585
- trends.push('Response times are improving');
619
+ trends.push("Response times are improving");
586
620
  }
587
-
621
+
588
622
  // Cache hit rate trend
589
- const hitRates = recent.map(d => d.cache.hitRate);
623
+ const hitRates = recent.map((d) => d.cache.hitRate);
590
624
  if (this.isIncreasing(hitRates)) {
591
- trends.push('Cache performance is improving');
625
+ trends.push("Cache performance is improving");
592
626
  } else if (this.isDecreasing(hitRates)) {
593
- trends.push('Cache performance is declining');
627
+ trends.push("Cache performance is declining");
594
628
  }
595
-
629
+
596
630
  return trends;
597
631
  }
598
632
 
@@ -623,7 +657,7 @@ export class PerformanceMonitor {
623
657
  // Simplified CSV conversion for metrics
624
658
  const metrics = data.currentMetrics;
625
659
  const csv = [
626
- 'Metric,Value',
660
+ "Metric,Value",
627
661
  `Total Requests,${metrics.requests.total}`,
628
662
  `Successful Requests,${metrics.requests.successful}`,
629
663
  `Failed Requests,${metrics.requests.failed}`,
@@ -631,10 +665,10 @@ export class PerformanceMonitor {
631
665
  `Cache Hit Rate,${metrics.cache.hitRate}`,
632
666
  `Cache Size,${metrics.cache.totalSize}`,
633
667
  `Memory Usage,${metrics.system.memoryUsage}%`,
634
- `Uptime,${metrics.system.uptime}ms`
668
+ `Uptime,${metrics.system.uptime}ms`,
635
669
  ];
636
-
637
- return csv.join('\n');
670
+
671
+ return csv.join("\n");
638
672
  }
639
673
 
640
674
  /**
@@ -643,7 +677,7 @@ export class PerformanceMonitor {
643
677
  private cleanupOldData(): void {
644
678
  const cutoff = Date.now() - this.config.retentionPeriod;
645
679
  this.historicalData = this.historicalData.filter(
646
- data => data.system.uptime > cutoff
680
+ (data) => data.system.uptime > cutoff,
647
681
  );
648
682
  }
649
683
  }
@@ -3,26 +3,26 @@
3
3
  * Central export point for all performance monitoring components
4
4
  */
5
5
 
6
- export { PerformanceMonitor } from './PerformanceMonitor.js';
7
- export { MetricsCollector } from './MetricsCollector.js';
8
- export { PerformanceAnalytics } from './PerformanceAnalytics.js';
6
+ export { PerformanceMonitor } from "./PerformanceMonitor.js";
7
+ export { MetricsCollector } from "./MetricsCollector.js";
8
+ export { PerformanceAnalytics } from "./PerformanceAnalytics.js";
9
9
 
10
10
  export type {
11
11
  PerformanceMetrics,
12
12
  PerformanceAlert,
13
- PerformanceConfig
14
- } from './PerformanceMonitor.js';
13
+ PerformanceConfig,
14
+ } from "./PerformanceMonitor.js";
15
15
 
16
16
  export type {
17
17
  CollectorConfig,
18
18
  RequestMetadata,
19
- ToolExecutionContext
20
- } from './MetricsCollector.js';
19
+ ToolExecutionContext,
20
+ } from "./MetricsCollector.js";
21
21
 
22
22
  export type {
23
23
  AnalyticsConfig,
24
24
  PerformanceTrend,
25
25
  PerformanceAnomaly,
26
26
  PerformanceInsight,
27
- BenchmarkComparison
28
- } from './PerformanceAnalytics.js';
27
+ BenchmarkComparison,
28
+ } from "./PerformanceAnalytics.js";