mcp-wordpress 2.4.2 → 2.5.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 (348) hide show
  1. package/README.md +114 -48
  2. package/dist/ajv-patch.js +34 -0
  3. package/dist/cache/CacheInvalidation.d.ts +3 -1
  4. package/dist/cache/CacheInvalidation.d.ts.map +1 -1
  5. package/dist/cache/CacheInvalidation.js +10 -4
  6. package/dist/cache/CacheInvalidation.js.map +1 -1
  7. package/dist/cache/CacheManager.d.ts +3 -2
  8. package/dist/cache/CacheManager.d.ts.map +1 -1
  9. package/dist/cache/CacheManager.js +11 -3
  10. package/dist/cache/CacheManager.js.map +1 -1
  11. package/dist/cache/HttpCacheWrapper.d.ts +7 -6
  12. package/dist/cache/HttpCacheWrapper.d.ts.map +1 -1
  13. package/dist/cache/HttpCacheWrapper.js +8 -5
  14. package/dist/cache/HttpCacheWrapper.js.map +1 -1
  15. package/dist/cache/__tests__/HttpCacheWrapper.test.js +6 -5
  16. package/dist/cache/__tests__/HttpCacheWrapper.test.js.map +1 -1
  17. package/dist/cache/index.d.ts +3 -3
  18. package/dist/cache/index.d.ts.map +1 -1
  19. package/dist/cache/index.js +1 -1
  20. package/dist/cache/index.js.map +1 -1
  21. package/dist/client/CachedWordPressClient.d.ts +23 -9
  22. package/dist/client/CachedWordPressClient.d.ts.map +1 -1
  23. package/dist/client/CachedWordPressClient.js +4 -1
  24. package/dist/client/CachedWordPressClient.js.map +1 -1
  25. package/dist/client/MockWordPressClient.d.ts +2 -1
  26. package/dist/client/MockWordPressClient.d.ts.map +1 -1
  27. package/dist/client/MockWordPressClient.js +3 -1
  28. package/dist/client/MockWordPressClient.js.map +1 -1
  29. package/dist/client/api.d.ts +17 -13
  30. package/dist/client/api.d.ts.map +1 -1
  31. package/dist/client/api.js +135 -30
  32. package/dist/client/api.js.map +1 -1
  33. package/dist/client/auth.d.ts.map +1 -1
  34. package/dist/client/auth.js +2 -3
  35. package/dist/client/auth.js.map +1 -1
  36. package/dist/client/managers/AuthenticationManager.d.ts +55 -2
  37. package/dist/client/managers/AuthenticationManager.d.ts.map +1 -1
  38. package/dist/client/managers/AuthenticationManager.js +269 -71
  39. package/dist/client/managers/AuthenticationManager.js.map +1 -1
  40. package/dist/client/managers/BaseManager.d.ts +3 -3
  41. package/dist/client/managers/BaseManager.d.ts.map +1 -1
  42. package/dist/client/managers/BaseManager.js +11 -5
  43. package/dist/client/managers/BaseManager.js.map +1 -1
  44. package/dist/client/managers/RequestManager.d.ts +2 -2
  45. package/dist/client/managers/RequestManager.d.ts.map +1 -1
  46. package/dist/client/managers/RequestManager.js +25 -12
  47. package/dist/client/managers/RequestManager.js.map +1 -1
  48. package/dist/config/Config.d.ts +155 -0
  49. package/dist/config/Config.d.ts.map +1 -0
  50. package/dist/config/Config.js +215 -0
  51. package/dist/config/Config.js.map +1 -0
  52. package/dist/config/ConfigurationSchema.d.ts +21 -21
  53. package/dist/config/ConfigurationSchema.d.ts.map +1 -1
  54. package/dist/config/ConfigurationSchema.js +19 -2
  55. package/dist/config/ConfigurationSchema.js.map +1 -1
  56. package/dist/config/ServerConfiguration.d.ts +2 -1
  57. package/dist/config/ServerConfiguration.d.ts.map +1 -1
  58. package/dist/config/ServerConfiguration.js +50 -41
  59. package/dist/config/ServerConfiguration.js.map +1 -1
  60. package/dist/docs/DocumentationGenerator.d.ts +9 -8
  61. package/dist/docs/DocumentationGenerator.d.ts.map +1 -1
  62. package/dist/docs/DocumentationGenerator.js +10 -7
  63. package/dist/docs/DocumentationGenerator.js.map +1 -1
  64. package/dist/docs/MarkdownFormatter.d.ts.map +1 -1
  65. package/dist/docs/MarkdownFormatter.js +3 -2
  66. package/dist/docs/MarkdownFormatter.js.map +1 -1
  67. package/dist/dxt-entry.cjs +81 -0
  68. package/dist/dxt-entry.js +15 -14
  69. package/dist/dxt-entry.js.map +1 -1
  70. package/dist/index.d.ts +3 -1
  71. package/dist/index.d.ts.map +1 -1
  72. package/dist/index.js +37 -21
  73. package/dist/index.js.map +1 -1
  74. package/dist/performance/MetricsCollector.d.ts +13 -7
  75. package/dist/performance/MetricsCollector.d.ts.map +1 -1
  76. package/dist/performance/MetricsCollector.js +69 -27
  77. package/dist/performance/MetricsCollector.js.map +1 -1
  78. package/dist/performance/PerformanceAnalytics.d.ts +8 -2
  79. package/dist/performance/PerformanceAnalytics.d.ts.map +1 -1
  80. package/dist/performance/PerformanceAnalytics.js +17 -47
  81. package/dist/performance/PerformanceAnalytics.js.map +1 -1
  82. package/dist/performance/PerformanceMonitor.d.ts +2 -1
  83. package/dist/performance/PerformanceMonitor.d.ts.map +1 -1
  84. package/dist/performance/PerformanceMonitor.js +12 -13
  85. package/dist/performance/PerformanceMonitor.js.map +1 -1
  86. package/dist/performance/index.d.ts +2 -2
  87. package/dist/performance/index.d.ts.map +1 -1
  88. package/dist/security/AISecurityScanner.d.ts +1 -0
  89. package/dist/security/AISecurityScanner.d.ts.map +1 -1
  90. package/dist/security/AISecurityScanner.js +22 -12
  91. package/dist/security/AISecurityScanner.js.map +1 -1
  92. package/dist/security/AutomatedRemediation.d.ts +4 -3
  93. package/dist/security/AutomatedRemediation.d.ts.map +1 -1
  94. package/dist/security/AutomatedRemediation.js +46 -15
  95. package/dist/security/AutomatedRemediation.js.map +1 -1
  96. package/dist/security/InputValidator.d.ts +13 -9
  97. package/dist/security/InputValidator.d.ts.map +1 -1
  98. package/dist/security/InputValidator.js +4 -2
  99. package/dist/security/InputValidator.js.map +1 -1
  100. package/dist/security/SecurityCIPipeline.d.ts +1 -1
  101. package/dist/security/SecurityCIPipeline.d.ts.map +1 -1
  102. package/dist/security/SecurityCIPipeline.js +38 -29
  103. package/dist/security/SecurityCIPipeline.js.map +1 -1
  104. package/dist/security/SecurityConfig.d.ts +3 -3
  105. package/dist/security/SecurityConfig.d.ts.map +1 -1
  106. package/dist/security/SecurityConfig.js +13 -9
  107. package/dist/security/SecurityConfig.js.map +1 -1
  108. package/dist/security/SecurityConfigManager.d.ts +2 -2
  109. package/dist/security/SecurityConfigManager.d.ts.map +1 -1
  110. package/dist/security/SecurityConfigManager.js +20 -15
  111. package/dist/security/SecurityConfigManager.js.map +1 -1
  112. package/dist/security/SecurityMonitoring.d.ts +2 -2
  113. package/dist/security/SecurityMonitoring.d.ts.map +1 -1
  114. package/dist/security/SecurityMonitoring.js +19 -17
  115. package/dist/security/SecurityMonitoring.js.map +1 -1
  116. package/dist/security/SecurityReviewer.d.ts.map +1 -1
  117. package/dist/security/SecurityReviewer.js +10 -7
  118. package/dist/security/SecurityReviewer.js.map +1 -1
  119. package/dist/security/index.d.ts +24 -23
  120. package/dist/security/index.d.ts.map +1 -1
  121. package/dist/security/index.js +52 -23
  122. package/dist/security/index.js.map +1 -1
  123. package/dist/server/ConnectionTester.d.ts +12 -4
  124. package/dist/server/ConnectionTester.d.ts.map +1 -1
  125. package/dist/server/ConnectionTester.js +96 -22
  126. package/dist/server/ConnectionTester.js.map +1 -1
  127. package/dist/server/ToolRegistry.d.ts +2 -2
  128. package/dist/server/ToolRegistry.d.ts.map +1 -1
  129. package/dist/server/ToolRegistry.js +10 -5
  130. package/dist/server/ToolRegistry.js.map +1 -1
  131. package/dist/tools/BaseToolManager.d.ts +47 -11
  132. package/dist/tools/BaseToolManager.d.ts.map +1 -1
  133. package/dist/tools/BaseToolManager.js +168 -29
  134. package/dist/tools/BaseToolManager.js.map +1 -1
  135. package/dist/tools/auth.d.ts +16 -10
  136. package/dist/tools/auth.d.ts.map +1 -1
  137. package/dist/tools/auth.js +3 -2
  138. package/dist/tools/auth.js.map +1 -1
  139. package/dist/tools/cache.d.ts +30 -30
  140. package/dist/tools/cache.d.ts.map +1 -1
  141. package/dist/tools/cache.js +1 -6
  142. package/dist/tools/cache.js.map +1 -1
  143. package/dist/tools/comments.d.ts +20 -20
  144. package/dist/tools/comments.d.ts.map +1 -1
  145. package/dist/tools/comments.js +16 -9
  146. package/dist/tools/comments.js.map +1 -1
  147. package/dist/tools/media.d.ts +18 -16
  148. package/dist/tools/media.d.ts.map +1 -1
  149. package/dist/tools/media.js +16 -15
  150. package/dist/tools/media.js.map +1 -1
  151. package/dist/tools/pages.d.ts +19 -17
  152. package/dist/tools/pages.d.ts.map +1 -1
  153. package/dist/tools/pages.js +16 -12
  154. package/dist/tools/pages.js.map +1 -1
  155. package/dist/tools/performance.d.ts +11 -1
  156. package/dist/tools/performance.d.ts.map +1 -1
  157. package/dist/tools/performance.js +67 -34
  158. package/dist/tools/performance.js.map +1 -1
  159. package/dist/tools/posts/PostHandlers.d.ts +46 -0
  160. package/dist/tools/posts/PostHandlers.d.ts.map +1 -0
  161. package/dist/tools/posts/PostHandlers.js +400 -0
  162. package/dist/tools/posts/PostHandlers.js.map +1 -0
  163. package/dist/tools/posts/PostToolDefinitions.d.ts +37 -0
  164. package/dist/tools/posts/PostToolDefinitions.d.ts.map +1 -0
  165. package/dist/tools/posts/PostToolDefinitions.js +236 -0
  166. package/dist/tools/posts/PostToolDefinitions.js.map +1 -0
  167. package/dist/tools/posts/index.d.ts +138 -0
  168. package/dist/tools/posts/index.d.ts.map +1 -0
  169. package/dist/tools/posts/index.js +163 -0
  170. package/dist/tools/posts/index.js.map +1 -0
  171. package/dist/tools/posts.d.ts +10 -246
  172. package/dist/tools/posts.d.ts.map +1 -1
  173. package/dist/tools/posts.js +11 -723
  174. package/dist/tools/posts.js.map +1 -1
  175. package/dist/tools/site.d.ts +19 -18
  176. package/dist/tools/site.d.ts.map +1 -1
  177. package/dist/tools/site.js +14 -10
  178. package/dist/tools/site.js.map +1 -1
  179. package/dist/tools/taxonomies.d.ts +23 -24
  180. package/dist/tools/taxonomies.d.ts.map +1 -1
  181. package/dist/tools/taxonomies.js +24 -18
  182. package/dist/tools/taxonomies.js.map +1 -1
  183. package/dist/tools/users.d.ts +20 -15
  184. package/dist/tools/users.d.ts.map +1 -1
  185. package/dist/tools/users.js +12 -8
  186. package/dist/tools/users.js.map +1 -1
  187. package/dist/types/client.d.ts +48 -41
  188. package/dist/types/client.d.ts.map +1 -1
  189. package/dist/types/client.js +30 -5
  190. package/dist/types/client.js.map +1 -1
  191. package/dist/types/enhanced.d.ts +237 -0
  192. package/dist/types/enhanced.d.ts.map +1 -0
  193. package/dist/types/enhanced.js +49 -0
  194. package/dist/types/enhanced.js.map +1 -0
  195. package/dist/types/index.d.ts +15 -12
  196. package/dist/types/index.d.ts.map +1 -1
  197. package/dist/types/index.js +2 -0
  198. package/dist/types/index.js.map +1 -1
  199. package/dist/types/mcp.d.ts +12 -12
  200. package/dist/types/mcp.d.ts.map +1 -1
  201. package/dist/types/requests.d.ts +322 -0
  202. package/dist/types/requests.d.ts.map +1 -0
  203. package/dist/types/requests.js +8 -0
  204. package/dist/types/requests.js.map +1 -0
  205. package/dist/types/tools.d.ts +506 -0
  206. package/dist/types/tools.d.ts.map +1 -0
  207. package/dist/types/tools.js +8 -0
  208. package/dist/types/tools.js.map +1 -0
  209. package/dist/types/wordpress.d.ts +43 -15
  210. package/dist/types/wordpress.d.ts.map +1 -1
  211. package/dist/types/wordpress.js +8 -1
  212. package/dist/types/wordpress.js.map +1 -1
  213. package/dist/utils/debug.d.ts +19 -11
  214. package/dist/utils/debug.d.ts.map +1 -1
  215. package/dist/utils/debug.js +46 -10
  216. package/dist/utils/debug.js.map +1 -1
  217. package/dist/utils/enhancedError.d.ts +8 -8
  218. package/dist/utils/enhancedError.d.ts.map +1 -1
  219. package/dist/utils/enhancedError.js.map +1 -1
  220. package/dist/utils/error.d.ts +2 -4
  221. package/dist/utils/error.d.ts.map +1 -1
  222. package/dist/utils/error.js +42 -5
  223. package/dist/utils/error.js.map +1 -1
  224. package/dist/utils/logger.d.ts +106 -0
  225. package/dist/utils/logger.d.ts.map +1 -0
  226. package/dist/utils/logger.js +280 -0
  227. package/dist/utils/logger.js.map +1 -0
  228. package/dist/utils/streaming.d.ts +9 -9
  229. package/dist/utils/streaming.d.ts.map +1 -1
  230. package/dist/utils/streaming.js +71 -52
  231. package/dist/utils/streaming.js.map +1 -1
  232. package/dist/utils/toolWrapper.d.ts +9 -7
  233. package/dist/utils/toolWrapper.d.ts.map +1 -1
  234. package/dist/utils/toolWrapper.js.map +1 -1
  235. package/dist/utils/validation/core.d.ts +21 -0
  236. package/dist/utils/validation/core.d.ts.map +1 -0
  237. package/dist/utils/validation/core.js +71 -0
  238. package/dist/utils/validation/core.js.map +1 -0
  239. package/dist/utils/validation/index.d.ts +25 -0
  240. package/dist/utils/validation/index.d.ts.map +1 -0
  241. package/dist/utils/validation/index.js +29 -0
  242. package/dist/utils/validation/index.js.map +1 -0
  243. package/dist/utils/validation/network.d.ts +19 -0
  244. package/dist/utils/validation/network.d.ts.map +1 -0
  245. package/dist/utils/validation/network.js +93 -0
  246. package/dist/utils/validation/network.js.map +1 -0
  247. package/dist/utils/validation/rateLimit.d.ts +21 -0
  248. package/dist/utils/validation/rateLimit.d.ts.map +1 -0
  249. package/dist/utils/validation/rateLimit.js +43 -0
  250. package/dist/utils/validation/rateLimit.js.map +1 -0
  251. package/dist/utils/validation/security.d.ts +29 -0
  252. package/dist/utils/validation/security.d.ts.map +1 -0
  253. package/dist/utils/validation/security.js +327 -0
  254. package/dist/utils/validation/security.js.map +1 -0
  255. package/dist/utils/validation/wordpress.d.ts +31 -0
  256. package/dist/utils/validation/wordpress.d.ts.map +1 -0
  257. package/dist/utils/validation/wordpress.js +146 -0
  258. package/dist/utils/validation/wordpress.js.map +1 -0
  259. package/dist/utils/validation.d.ts +13 -82
  260. package/dist/utils/validation.d.ts.map +1 -1
  261. package/dist/utils/validation.js +25 -343
  262. package/dist/utils/validation.js.map +1 -1
  263. package/docs/BADGE_UPDATES.md +132 -0
  264. package/docs/CI_CD_IMPROVEMENTS.md +191 -0
  265. package/docs/INCREMENTAL_COVERAGE.md +183 -0
  266. package/docs/api/README.md +3 -1
  267. package/docs/api/openapi.json +5 -1
  268. package/docs/api/summary.json +1 -1
  269. package/docs/api/tools/wp_create_post.md +12 -14
  270. package/docs/examples/claude-desktop-config.md +1 -1
  271. package/docs/examples/docker-production.md +100 -93
  272. package/docs/examples/multi-site-setup.md +5 -4
  273. package/docs/examples/single-site-setup.md +3 -4
  274. package/docs/examples/use-case-workflows.md +4 -5
  275. package/docs/integrations/claude-desktop.md +31 -31
  276. package/docs/integrations/cline.md +4 -4
  277. package/docs/integrations/vs-code.md +9 -8
  278. package/docs/user-guides/SMITHERY_SETUP.md +10 -10
  279. package/package.json +44 -25
  280. package/src/cache/CacheInvalidation.ts +12 -5
  281. package/src/cache/CacheManager.ts +18 -15
  282. package/src/cache/HttpCacheWrapper.ts +30 -59
  283. package/src/cache/__tests__/HttpCacheWrapper.test.ts +6 -5
  284. package/src/cache/index.ts +3 -14
  285. package/src/client/CachedWordPressClient.ts +32 -30
  286. package/src/client/MockWordPressClient.ts +4 -2
  287. package/src/client/api.ts +186 -64
  288. package/src/client/auth.ts +15 -40
  289. package/src/client/managers/AuthenticationManager.ts +337 -77
  290. package/src/client/managers/BaseManager.ts +18 -30
  291. package/src/client/managers/RequestManager.ts +39 -44
  292. package/src/config/Config.ts +308 -0
  293. package/src/config/ConfigurationSchema.ts +23 -2
  294. package/src/config/ServerConfiguration.ts +51 -47
  295. package/src/docs/DocumentationGenerator.ts +50 -39
  296. package/src/docs/MarkdownFormatter.ts +19 -29
  297. package/src/dxt-entry.cjs +26 -16
  298. package/src/dxt-entry.ts +17 -27
  299. package/src/index.ts +42 -28
  300. package/src/performance/MetricsCollector.ts +108 -86
  301. package/src/performance/PerformanceAnalytics.ts +69 -164
  302. package/src/performance/PerformanceMonitor.ts +32 -47
  303. package/src/performance/index.ts +2 -10
  304. package/src/security/AISecurityScanner.ts +22 -12
  305. package/src/security/AutomatedRemediation.ts +49 -18
  306. package/src/security/InputValidator.ts +9 -6
  307. package/src/security/SecurityCIPipeline.ts +53 -37
  308. package/src/security/SecurityConfig.ts +22 -22
  309. package/src/security/SecurityConfigManager.ts +23 -19
  310. package/src/security/SecurityMonitoring.ts +24 -21
  311. package/src/security/SecurityReviewer.ts +10 -7
  312. package/src/security/index.ts +64 -29
  313. package/src/server/ConnectionTester.ts +120 -31
  314. package/src/server/ToolRegistry.ts +31 -21
  315. package/src/tools/BaseToolManager.ts +286 -33
  316. package/src/tools/auth.ts +20 -8
  317. package/src/tools/cache.ts +5 -15
  318. package/src/tools/comments.ts +34 -48
  319. package/src/tools/media.ts +41 -53
  320. package/src/tools/pages.ts +32 -54
  321. package/src/tools/performance.ts +141 -176
  322. package/src/tools/posts/PostHandlers.ts +474 -0
  323. package/src/tools/posts/PostToolDefinitions.ts +250 -0
  324. package/src/tools/posts/index.ts +192 -0
  325. package/src/tools/posts.ts +24 -780
  326. package/src/tools/site.ts +34 -19
  327. package/src/tools/taxonomies.ts +41 -57
  328. package/src/tools/users.ts +28 -16
  329. package/src/types/client.ts +114 -138
  330. package/src/types/enhanced.ts +318 -0
  331. package/src/types/index.ts +51 -30
  332. package/src/types/mcp.ts +20 -42
  333. package/src/types/requests.ts +378 -0
  334. package/src/types/tools.ts +608 -0
  335. package/src/types/wordpress.ts +56 -34
  336. package/src/utils/debug.ts +77 -59
  337. package/src/utils/enhancedError.ts +8 -8
  338. package/src/utils/error.ts +53 -31
  339. package/src/utils/logger.ts +351 -0
  340. package/src/utils/streaming.ts +86 -68
  341. package/src/utils/toolWrapper.ts +10 -12
  342. package/src/utils/validation/core.ts +108 -0
  343. package/src/utils/validation/index.ts +36 -0
  344. package/src/utils/validation/network.ts +132 -0
  345. package/src/utils/validation/rateLimit.ts +54 -0
  346. package/src/utils/validation/security.ts +361 -0
  347. package/src/utils/validation/wordpress.ts +180 -0
  348. package/src/utils/validation.ts +47 -470
@@ -100,10 +100,7 @@ export class PerformanceAnalytics {
100
100
  },
101
101
  };
102
102
 
103
- constructor(
104
- collector: MetricsCollector,
105
- config: Partial<AnalyticsConfig> = {},
106
- ) {
103
+ constructor(collector: MetricsCollector, config: Partial<AnalyticsConfig> = {}) {
107
104
  this.collector = collector;
108
105
  this.config = {
109
106
  enablePredictiveAnalysis: true,
@@ -123,9 +120,7 @@ export class PerformanceAnalytics {
123
120
 
124
121
  // Limit historical data to lookback period
125
122
  const cutoff = Date.now() - this.config.lookbackPeriod;
126
- this.historicalData = this.historicalData.filter(
127
- (data) => data.system.uptime > cutoff,
128
- );
123
+ this.historicalData = this.historicalData.filter((data) => data.system.uptime > cutoff);
129
124
 
130
125
  // Run analysis on new data
131
126
  if (this.config.enableAnomalyDetection) {
@@ -163,9 +158,7 @@ export class PerformanceAnalytics {
163
158
  trends.push(
164
159
  this.analyzeTrend(
165
160
  "errorRate",
166
- this.historicalData.map((d) =>
167
- d.requests.total > 0 ? d.requests.failed / d.requests.total : 0,
168
- ),
161
+ this.historicalData.map((d) => (d.requests.total > 0 ? d.requests.failed / d.requests.total : 0)),
169
162
  ),
170
163
  );
171
164
 
@@ -205,8 +198,7 @@ export class PerformanceAnalytics {
205
198
  title: "Improve Cache Hit Rate",
206
199
  description: `Current cache hit rate is ${(currentMetrics.cache.hitRate * 100).toFixed(1)}%, which is below optimal performance.`,
207
200
  impact: "performance",
208
- recommendation:
209
- "Implement cache warming strategies and optimize TTL values for frequently accessed data.",
201
+ recommendation: "Implement cache warming strategies and optimize TTL values for frequently accessed data.",
210
202
  estimatedImprovement: "20-40% reduction in response times",
211
203
  implementationEffort: "medium",
212
204
  relatedMetrics: ["cacheHitRate", "responseTime"],
@@ -222,8 +214,7 @@ export class PerformanceAnalytics {
222
214
  title: "Reduce Response Times",
223
215
  description: `Average response time of ${currentMetrics.requests.averageResponseTime.toFixed(0)}ms is above recommended threshold.`,
224
216
  impact: "user_experience",
225
- recommendation:
226
- "Enable aggressive caching, optimize database queries, or consider upgrading server resources.",
217
+ recommendation: "Enable aggressive caching, optimize database queries, or consider upgrading server resources.",
227
218
  estimatedImprovement: "50-70% reduction in response times",
228
219
  implementationEffort: "medium",
229
220
  relatedMetrics: ["responseTime", "cacheHitRate"],
@@ -239,8 +230,7 @@ export class PerformanceAnalytics {
239
230
  title: "Memory Usage Optimization",
240
231
  description: `Memory usage at ${currentMetrics.system.memoryUsage}% is approaching limits.`,
241
232
  impact: "reliability",
242
- recommendation:
243
- "Increase cache size limits, implement cache eviction policies, or scale server resources.",
233
+ recommendation: "Increase cache size limits, implement cache eviction policies, or scale server resources.",
244
234
  estimatedImprovement: "Improved system stability",
245
235
  implementationEffort: "low",
246
236
  relatedMetrics: ["memoryUsage", "cacheSize"],
@@ -261,8 +251,7 @@ export class PerformanceAnalytics {
261
251
  title: "Optimize Frequently Used Tools",
262
252
  description: `Most used tools: ${mostUsed.map(([tool]) => tool).join(", ")}. Consider optimizing these workflows.`,
263
253
  impact: "performance",
264
- recommendation:
265
- "Create cached workflows or batch operations for frequently used tools.",
254
+ recommendation: "Create cached workflows or batch operations for frequently used tools.",
266
255
  estimatedImprovement: "10-20% reduction in API calls",
267
256
  implementationEffort: "high",
268
257
  relatedMetrics: ["toolUsage", "requestVolume"],
@@ -271,11 +260,7 @@ export class PerformanceAnalytics {
271
260
 
272
261
  // Trend-based insights
273
262
  const responseTimeTrend = trends.find((t) => t.metric === "responseTime");
274
- if (
275
- responseTimeTrend &&
276
- responseTimeTrend.direction === "declining" &&
277
- responseTimeTrend.changeRate > 10
278
- ) {
263
+ if (responseTimeTrend && responseTimeTrend.direction === "declining" && responseTimeTrend.changeRate > 10) {
279
264
  insights.push({
280
265
  id: "trend-response-time-1",
281
266
  category: "alert",
@@ -283,8 +268,7 @@ export class PerformanceAnalytics {
283
268
  title: "Response Time Degradation Detected",
284
269
  description: `Response times are declining at ${responseTimeTrend.changeRate.toFixed(1)}% rate.`,
285
270
  impact: "performance",
286
- recommendation:
287
- "Investigate recent changes, check WordPress site health, and monitor resource usage.",
271
+ recommendation: "Investigate recent changes, check WordPress site health, and monitor resource usage.",
288
272
  estimatedImprovement: "Prevent further degradation",
289
273
  implementationEffort: "medium",
290
274
  relatedMetrics: ["responseTime", "errorRate"],
@@ -317,31 +301,19 @@ export class PerformanceAnalytics {
317
301
  this.createBenchmarkComparison(
318
302
  "Cache Hit Rate",
319
303
  currentMetrics.cache.hitRate * 100,
320
- Object.fromEntries(
321
- Object.entries(this.benchmarks.cacheHitRate).map(([k, v]) => [
322
- k,
323
- v * 100,
324
- ]),
325
- ),
304
+ Object.fromEntries(Object.entries(this.benchmarks.cacheHitRate).map(([k, v]) => [k, v * 100])),
326
305
  true, // higher is better
327
306
  ),
328
307
  );
329
308
 
330
309
  // Error rate benchmark
331
310
  const errorRate =
332
- currentMetrics.requests.total > 0
333
- ? (currentMetrics.requests.failed / currentMetrics.requests.total) * 100
334
- : 0;
311
+ currentMetrics.requests.total > 0 ? (currentMetrics.requests.failed / currentMetrics.requests.total) * 100 : 0;
335
312
  comparisons.push(
336
313
  this.createBenchmarkComparison(
337
314
  "Error Rate",
338
315
  errorRate,
339
- Object.fromEntries(
340
- Object.entries(this.benchmarks.errorRate).map(([k, v]) => [
341
- k,
342
- v * 100,
343
- ]),
344
- ),
316
+ Object.fromEntries(Object.entries(this.benchmarks.errorRate).map(([k, v]) => [k, v * 100])),
345
317
  false, // lower is better
346
318
  ),
347
319
  );
@@ -377,7 +349,13 @@ export class PerformanceAnalytics {
377
349
  }
378
350
 
379
351
  const trends = this.analyzeTrends();
380
- const predictions: any[] = [];
352
+ const predictions: Array<{
353
+ metric: string;
354
+ currentValue: number;
355
+ predictedValue: number;
356
+ confidence: number;
357
+ trend: "improving" | "declining" | "stable";
358
+ }> = [];
381
359
  const alerts: string[] = [];
382
360
 
383
361
  for (const trend of trends) {
@@ -393,34 +371,16 @@ export class PerformanceAnalytics {
393
371
  });
394
372
 
395
373
  // Generate alerts for concerning predictions
396
- if (
397
- trend.metric === "responseTime" &&
398
- predictedValue > 2000 &&
399
- trend.direction === "declining"
400
- ) {
401
- alerts.push(
402
- `Response times predicted to exceed 2s in ${timeframeMinutes} minutes`,
403
- );
374
+ if (trend.metric === "responseTime" && predictedValue > 2000 && trend.direction === "declining") {
375
+ alerts.push(`Response times predicted to exceed 2s in ${timeframeMinutes} minutes`);
404
376
  }
405
377
 
406
- if (
407
- trend.metric === "cacheHitRate" &&
408
- predictedValue < 0.5 &&
409
- trend.direction === "declining"
410
- ) {
411
- alerts.push(
412
- `Cache hit rate predicted to drop below 50% in ${timeframeMinutes} minutes`,
413
- );
378
+ if (trend.metric === "cacheHitRate" && predictedValue < 0.5 && trend.direction === "declining") {
379
+ alerts.push(`Cache hit rate predicted to drop below 50% in ${timeframeMinutes} minutes`);
414
380
  }
415
381
 
416
- if (
417
- trend.metric === "memoryUsage" &&
418
- predictedValue > 90 &&
419
- trend.direction === "declining"
420
- ) {
421
- alerts.push(
422
- `Memory usage predicted to exceed 90% in ${timeframeMinutes} minutes`,
423
- );
382
+ if (trend.metric === "memoryUsage" && predictedValue > 90 && trend.direction === "declining") {
383
+ alerts.push(`Memory usage predicted to exceed 90% in ${timeframeMinutes} minutes`);
424
384
  }
425
385
  }
426
386
 
@@ -443,14 +403,10 @@ export class PerformanceAnalytics {
443
403
  const insights = this.generateInsights();
444
404
 
445
405
  const quickWins = insights.filter(
446
- (i) =>
447
- i.implementationEffort === "low" &&
448
- ["high", "critical"].includes(i.priority),
406
+ (i) => i.implementationEffort === "low" && ["high", "critical"].includes(i.priority),
449
407
  );
450
408
 
451
- const mediumTerm = insights.filter(
452
- (i) => i.implementationEffort === "medium",
453
- );
409
+ const mediumTerm = insights.filter((i) => i.implementationEffort === "medium");
454
410
 
455
411
  const longTerm = insights.filter((i) => i.implementationEffort === "high");
456
412
 
@@ -468,12 +424,7 @@ export class PerformanceAnalytics {
468
424
  longTerm,
469
425
  estimatedROI: {
470
426
  performanceGain: Math.min(estimatedGain, 80), // Cap at 80%
471
- implementationCost:
472
- quickWins.length > 2
473
- ? "low"
474
- : mediumTerm.length > 2
475
- ? "medium"
476
- : "high",
427
+ implementationCost: quickWins.length > 2 ? "low" : mediumTerm.length > 2 ? "medium" : "high",
477
428
  timeToValue: quickWins.length > 0 ? 1 : mediumTerm.length > 0 ? 7 : 30,
478
429
  },
479
430
  };
@@ -504,8 +455,14 @@ export class PerformanceAnalytics {
504
455
  benchmarks: BenchmarkComparison[];
505
456
  insights: PerformanceInsight[];
506
457
  anomalies: PerformanceAnomaly[];
507
- predictions: any;
508
- optimizationPlan: any;
458
+ predictions: Array<{
459
+ metric: string;
460
+ currentValue: number;
461
+ predictedValue: number;
462
+ confidence: number;
463
+ trend: "improving" | "declining" | "stable";
464
+ }>;
465
+ optimizationPlan: Record<string, unknown>;
509
466
  } {
510
467
  const currentMetrics = this.collector.collectCurrentMetrics();
511
468
  const performanceScore = this.calculatePerformanceScore(currentMetrics);
@@ -515,16 +472,14 @@ export class PerformanceAnalytics {
515
472
  summary: {
516
473
  overallHealth: this.calculateOverallHealth(performanceScore),
517
474
  keyInsights: this.generatedInsights.length,
518
- criticalAlerts: this.generatedInsights.filter(
519
- (i) => i.priority === "critical",
520
- ).length,
475
+ criticalAlerts: this.generatedInsights.filter((i) => i.priority === "critical").length,
521
476
  performanceScore,
522
477
  },
523
478
  trends: this.analyzeTrends(),
524
479
  benchmarks: this.benchmarkPerformance(),
525
480
  insights: this.generateInsights(),
526
481
  anomalies: this.getAnomalies(),
527
- predictions: this.predictPerformance(),
482
+ predictions: this.predictPerformance().predictions,
528
483
  optimizationPlan: this.generateOptimizationPlan(),
529
484
  };
530
485
  }
@@ -562,9 +517,7 @@ export class PerformanceAnalytics {
562
517
 
563
518
  // Calculate R-squared for confidence
564
519
  const yMean = sumY / n;
565
- const totalSumSquares = y
566
- .map((yi) => Math.pow(yi - yMean, 2))
567
- .reduce((a, b) => a + b, 0);
520
+ const totalSumSquares = y.map((yi) => Math.pow(yi - yMean, 2)).reduce((a, b) => a + b, 0);
568
521
  const residualSumSquares = y
569
522
  .map((yi, i) => {
570
523
  const predicted = slope * x[i] + intercept;
@@ -577,8 +530,7 @@ export class PerformanceAnalytics {
577
530
  // Determine direction and change rate
578
531
  const currentValue = values[values.length - 1];
579
532
  const previousValue = values[values.length - 2];
580
- const changeRate =
581
- Math.abs((currentValue - previousValue) / previousValue) * 100;
533
+ const changeRate = Math.abs((currentValue - previousValue) / previousValue) * 100;
582
534
 
583
535
  let direction: "improving" | "declining" | "stable" = "stable";
584
536
  if (Math.abs(slope) > 0.1) {
@@ -626,27 +578,12 @@ export class PerformanceAnalytics {
626
578
 
627
579
  // Check cache hit rate anomalies
628
580
  const hitRates = recentData.map((d) => d.cache.hitRate);
629
- this.checkMetricAnomaly(
630
- "cacheHitRate",
631
- metrics.cache.hitRate,
632
- hitRates,
633
- "Cache hit rate drop detected",
634
- );
581
+ this.checkMetricAnomaly("cacheHitRate", metrics.cache.hitRate, hitRates, "Cache hit rate drop detected");
635
582
 
636
583
  // Check error rate anomalies
637
- const errorRates = recentData.map((d) =>
638
- d.requests.total > 0 ? d.requests.failed / d.requests.total : 0,
639
- );
640
- const currentErrorRate =
641
- metrics.requests.total > 0
642
- ? metrics.requests.failed / metrics.requests.total
643
- : 0;
644
- this.checkMetricAnomaly(
645
- "errorRate",
646
- currentErrorRate,
647
- errorRates,
648
- "Error rate spike detected",
649
- );
584
+ const errorRates = recentData.map((d) => (d.requests.total > 0 ? d.requests.failed / d.requests.total : 0));
585
+ const currentErrorRate = metrics.requests.total > 0 ? metrics.requests.failed / metrics.requests.total : 0;
586
+ this.checkMetricAnomaly("errorRate", currentErrorRate, errorRates, "Error rate spike detected");
650
587
  }
651
588
 
652
589
  /**
@@ -660,11 +597,8 @@ export class PerformanceAnalytics {
660
597
  ): void {
661
598
  if (historicalValues.length < 5) return;
662
599
 
663
- const mean =
664
- historicalValues.reduce((a, b) => a + b, 0) / historicalValues.length;
665
- const variance =
666
- historicalValues.reduce((acc, val) => acc + Math.pow(val - mean, 2), 0) /
667
- historicalValues.length;
600
+ const mean = historicalValues.reduce((a, b) => a + b, 0) / historicalValues.length;
601
+ const variance = historicalValues.reduce((acc, val) => acc + Math.pow(val - mean, 2), 0) / historicalValues.length;
668
602
  const standardDeviation = Math.sqrt(variance);
669
603
 
670
604
  // Calculate z-score
@@ -690,10 +624,7 @@ export class PerformanceAnalytics {
690
624
  actualValue: currentValue,
691
625
  deviation,
692
626
  severity,
693
- possibleCauses: this.generatePossibleCauses(
694
- metricName,
695
- currentValue > mean,
696
- ),
627
+ possibleCauses: this.generatePossibleCauses(metricName, currentValue > mean),
697
628
  };
698
629
 
699
630
  this.detectedAnomalies.push(anomaly);
@@ -708,33 +639,15 @@ export class PerformanceAnalytics {
708
639
  /**
709
640
  * Generate possible causes for anomalies
710
641
  */
711
- private generatePossibleCauses(
712
- metricName: string,
713
- isIncrease: boolean,
714
- ): string[] {
642
+ private generatePossibleCauses(metricName: string, isIncrease: boolean): string[] {
715
643
  const causes: string[] = [];
716
644
 
717
645
  if (metricName === "responseTime" && isIncrease) {
718
- causes.push(
719
- "High server load",
720
- "Database performance issues",
721
- "Network latency",
722
- "Cache miss increase",
723
- );
646
+ causes.push("High server load", "Database performance issues", "Network latency", "Cache miss increase");
724
647
  } else if (metricName === "cacheHitRate" && !isIncrease) {
725
- causes.push(
726
- "Cache invalidation event",
727
- "New data requests",
728
- "Cache size limit reached",
729
- "TTL expiration",
730
- );
648
+ causes.push("Cache invalidation event", "New data requests", "Cache size limit reached", "TTL expiration");
731
649
  } else if (metricName === "errorRate" && isIncrease) {
732
- causes.push(
733
- "WordPress site issues",
734
- "Authentication problems",
735
- "Network connectivity",
736
- "Plugin conflicts",
737
- );
650
+ causes.push("WordPress site issues", "Authentication problems", "Network connectivity", "Plugin conflicts");
738
651
  }
739
652
 
740
653
  return causes;
@@ -746,39 +659,36 @@ export class PerformanceAnalytics {
746
659
  private createBenchmarkComparison(
747
660
  category: string,
748
661
  currentValue: number,
749
- benchmarks: any,
662
+ benchmarks: Record<string, unknown>,
750
663
  higherIsBetter: boolean,
751
664
  ): BenchmarkComparison {
752
- let status: "excellent" | "good" | "average" | "below_average" | "poor" =
753
- "poor";
665
+ let status: "excellent" | "good" | "average" | "below_average" | "poor" = "poor";
754
666
  let percentile = 0;
755
667
  let improvement = 0;
756
668
 
757
669
  if (higherIsBetter) {
758
- if (currentValue >= benchmarks.excellent) status = "excellent";
759
- else if (currentValue >= benchmarks.good) status = "good";
760
- else if (currentValue >= benchmarks.average) status = "average";
761
- else if (currentValue >= benchmarks.below_average)
762
- status = "below_average";
670
+ if (currentValue >= (benchmarks.excellent as number)) status = "excellent";
671
+ else if (currentValue >= (benchmarks.good as number)) status = "good";
672
+ else if (currentValue >= (benchmarks.average as number)) status = "average";
673
+ else if (currentValue >= (benchmarks.below_average as number)) status = "below_average";
763
674
 
764
675
  // Calculate improvement needed
765
676
  if (status !== "excellent") {
766
677
  const nextTier =
767
678
  status === "good"
768
- ? benchmarks.excellent
679
+ ? (benchmarks.excellent as number)
769
680
  : status === "average"
770
- ? benchmarks.good
681
+ ? (benchmarks.good as number)
771
682
  : status === "below_average"
772
- ? benchmarks.average
773
- : benchmarks.below_average;
683
+ ? (benchmarks.average as number)
684
+ : (benchmarks.below_average as number);
774
685
  improvement = nextTier - currentValue;
775
686
  }
776
687
  } else {
777
- if (currentValue <= benchmarks.excellent) status = "excellent";
778
- else if (currentValue <= benchmarks.good) status = "good";
779
- else if (currentValue <= benchmarks.average) status = "average";
780
- else if (currentValue <= benchmarks.below_average)
781
- status = "below_average";
688
+ if (currentValue <= (benchmarks.excellent as number)) status = "excellent";
689
+ else if (currentValue <= (benchmarks.good as number)) status = "good";
690
+ else if (currentValue <= (benchmarks.average as number)) status = "average";
691
+ else if (currentValue <= (benchmarks.below_average as number)) status = "below_average";
782
692
 
783
693
  // Calculate improvement needed
784
694
  if (status !== "excellent") {
@@ -790,7 +700,7 @@ export class PerformanceAnalytics {
790
700
  : status === "below_average"
791
701
  ? benchmarks.average
792
702
  : benchmarks.below_average;
793
- improvement = currentValue - nextTier;
703
+ improvement = currentValue - (nextTier as number);
794
704
  }
795
705
  }
796
706
 
@@ -809,7 +719,7 @@ export class PerformanceAnalytics {
809
719
  return {
810
720
  category,
811
721
  currentValue,
812
- benchmarkValue: benchmarks.excellent,
722
+ benchmarkValue: benchmarks.excellent as number,
813
723
  percentile,
814
724
  status,
815
725
  improvement,
@@ -828,9 +738,7 @@ export class PerformanceAnalytics {
828
738
  case "cacheHitRate":
829
739
  return current.cache.hitRate;
830
740
  case "errorRate":
831
- return current.requests.total > 0
832
- ? current.requests.failed / current.requests.total
833
- : 0;
741
+ return current.requests.total > 0 ? current.requests.failed / current.requests.total : 0;
834
742
  case "memoryUsage":
835
743
  return current.system.memoryUsage;
836
744
  case "requestVolume":
@@ -852,10 +760,7 @@ export class PerformanceAnalytics {
852
760
  else if (metrics.requests.averageResponseTime > 500) score -= 5;
853
761
 
854
762
  // Error rate (25% weight)
855
- const errorRate =
856
- metrics.requests.total > 0
857
- ? metrics.requests.failed / metrics.requests.total
858
- : 0;
763
+ const errorRate = metrics.requests.total > 0 ? metrics.requests.failed / metrics.requests.total : 0;
859
764
  if (errorRate > 0.05) score -= 25;
860
765
  else if (errorRate > 0.02) score -= 15;
861
766
  else if (errorRate > 0.01) score -= 5;
@@ -3,6 +3,8 @@
3
3
  * Collects, analyzes, and reports performance metrics
4
4
  */
5
5
 
6
+ import { ConfigHelpers } from "../config/Config.js";
7
+
6
8
  export interface PerformanceMetrics {
7
9
  // Request Performance
8
10
  requests: {
@@ -121,7 +123,8 @@ export class PerformanceMonitor {
121
123
 
122
124
  this.metrics = this.initializeMetrics();
123
125
 
124
- if (this.config.enableRealTimeMonitoring) {
126
+ // Don't start collection in test environment to avoid timer issues
127
+ if (this.config.enableRealTimeMonitoring && !ConfigHelpers.isTest()) {
125
128
  this.startCollection();
126
129
  }
127
130
  }
@@ -177,11 +180,7 @@ export class PerformanceMonitor {
177
180
  /**
178
181
  * Record a request performance metric
179
182
  */
180
- recordRequest(
181
- responseTime: number,
182
- success: boolean,
183
- toolName?: string,
184
- ): void {
183
+ recordRequest(responseTime: number, success: boolean, toolName?: string): void {
185
184
  this.metrics.requests.total++;
186
185
 
187
186
  if (success) {
@@ -208,14 +207,14 @@ export class PerformanceMonitor {
208
207
  /**
209
208
  * Update cache metrics from cache manager
210
209
  */
211
- updateCacheMetrics(cacheStats: any): void {
210
+ updateCacheMetrics(cacheStats: Record<string, unknown>): void {
212
211
  this.metrics.cache = {
213
- hits: cacheStats.hits || 0,
214
- misses: cacheStats.misses || 0,
215
- hitRate: cacheStats.hitRate || 0,
216
- totalSize: cacheStats.totalSize || 0,
217
- memoryUsageMB: this.estimateCacheMemoryUsage(cacheStats.totalSize),
218
- evictions: cacheStats.evictions || 0,
212
+ hits: (cacheStats.hits as number) || 0,
213
+ misses: (cacheStats.misses as number) || 0,
214
+ hitRate: (cacheStats.hitRate as number) || 0,
215
+ totalSize: (cacheStats.totalSize as number) || 0,
216
+ memoryUsageMB: this.estimateCacheMemoryUsage((cacheStats.totalSize as number) || 0),
217
+ evictions: (cacheStats.evictions as number) || 0,
219
218
  averageCacheTime: 0.5, // Sub-millisecond average
220
219
  };
221
220
  }
@@ -246,10 +245,7 @@ export class PerformanceMonitor {
246
245
  /**
247
246
  * Get historical performance data
248
247
  */
249
- getHistoricalData(
250
- startTime?: number,
251
- endTime?: number,
252
- ): PerformanceMetrics[] {
248
+ getHistoricalData(startTime?: number, endTime?: number): PerformanceMetrics[] {
253
249
  if (!this.config.enableHistoricalData) {
254
250
  return [];
255
251
  }
@@ -317,7 +313,7 @@ export class PerformanceMonitor {
317
313
  };
318
314
 
319
315
  if (format === "csv") {
320
- return this.convertToCSV(data);
316
+ return this.convertToCSV([data] as Record<string, unknown>[]);
321
317
  }
322
318
 
323
319
  return JSON.stringify(data, null, 2);
@@ -325,6 +321,7 @@ export class PerformanceMonitor {
325
321
 
326
322
  /**
327
323
  * Start automatic metric collection
324
+ * Note: This uses setInterval and is not called in test environments to avoid Jest timer issues
328
325
  */
329
326
  private startCollection(): void {
330
327
  this.collectionTimer = setInterval(() => {
@@ -349,14 +346,9 @@ export class PerformanceMonitor {
349
346
  /**
350
347
  * Record tool usage and performance
351
348
  */
352
- private recordToolUsage(
353
- toolName: string,
354
- responseTime: number,
355
- success: boolean,
356
- ): void {
349
+ private recordToolUsage(toolName: string, responseTime: number, success: boolean): void {
357
350
  // Update usage count
358
- this.metrics.tools.toolUsageCount[toolName] =
359
- (this.metrics.tools.toolUsageCount[toolName] || 0) + 1;
351
+ this.metrics.tools.toolUsageCount[toolName] = (this.metrics.tools.toolUsageCount[toolName] || 0) + 1;
360
352
 
361
353
  // Update performance metrics
362
354
  if (!this.metrics.tools.toolPerformance[toolName]) {
@@ -370,12 +362,10 @@ export class PerformanceMonitor {
370
362
  const totalCalls = perf.callCount + 1;
371
363
 
372
364
  // Update average time
373
- perf.averageTime =
374
- (perf.averageTime * perf.callCount + responseTime) / totalCalls;
365
+ perf.averageTime = (perf.averageTime * perf.callCount + responseTime) / totalCalls;
375
366
 
376
367
  // Update success rate
377
- const totalSuccess =
378
- perf.successRate * perf.callCount + (success ? 1 : 0);
368
+ const totalSuccess = perf.successRate * perf.callCount + (success ? 1 : 0);
379
369
  perf.successRate = totalSuccess / totalCalls;
380
370
 
381
371
  perf.callCount = totalCalls;
@@ -398,8 +388,7 @@ export class PerformanceMonitor {
398
388
  const total = this.metrics.requests.total;
399
389
 
400
390
  this.metrics.requests.averageResponseTime =
401
- this.responseTimes.reduce((sum, time) => sum + time, 0) /
402
- this.responseTimes.length;
391
+ this.responseTimes.reduce((sum, time) => sum + time, 0) / this.responseTimes.length;
403
392
 
404
393
  this.metrics.requests.minResponseTime = sorted[0];
405
394
  this.metrics.requests.maxResponseTime = sorted[sorted.length - 1];
@@ -464,8 +453,7 @@ export class PerformanceMonitor {
464
453
  }
465
454
 
466
455
  // Error rate alert
467
- const errorRate =
468
- this.metrics.requests.failed / this.metrics.requests.total;
456
+ const errorRate = this.metrics.requests.failed / this.metrics.requests.total;
469
457
  if (errorRate > thresholds.errorRate) {
470
458
  this.addAlert(
471
459
  "error",
@@ -527,9 +515,7 @@ export class PerformanceMonitor {
527
515
  /**
528
516
  * Calculate overall system health
529
517
  */
530
- private calculateOverallHealth(
531
- metrics: PerformanceMetrics,
532
- ): "excellent" | "good" | "warning" | "critical" {
518
+ private calculateOverallHealth(metrics: PerformanceMetrics): "excellent" | "good" | "warning" | "critical" {
533
519
  let score = 100;
534
520
 
535
521
  // Response time impact
@@ -560,9 +546,7 @@ export class PerformanceMonitor {
560
546
  */
561
547
  private generateSummary(metrics: PerformanceMetrics): string {
562
548
  const errorRate =
563
- metrics.requests.total > 0
564
- ? ((metrics.requests.failed / metrics.requests.total) * 100).toFixed(1)
565
- : "0";
549
+ metrics.requests.total > 0 ? ((metrics.requests.failed / metrics.requests.total) * 100).toFixed(1) : "0";
566
550
 
567
551
  return (
568
552
  `Performance Summary: ${metrics.requests.total} requests processed with ${errorRate}% error rate. ` +
@@ -587,9 +571,7 @@ export class PerformanceMonitor {
587
571
  }
588
572
 
589
573
  if (metrics.system.memoryUsage > 80) {
590
- recommendations.push(
591
- "Consider increasing memory allocation or cache size limits",
592
- );
574
+ recommendations.push("Consider increasing memory allocation or cache size limits");
593
575
  }
594
576
 
595
577
  const errorRate = metrics.requests.failed / metrics.requests.total;
@@ -653,9 +635,14 @@ export class PerformanceMonitor {
653
635
  /**
654
636
  * Convert data to CSV format
655
637
  */
656
- private convertToCSV(data: any): string {
638
+ private convertToCSV(data: Record<string, unknown>[]): string {
657
639
  // Simplified CSV conversion for metrics
658
- const metrics = data.currentMetrics;
640
+ const reportData = data[0];
641
+ const metrics = reportData?.currentMetrics as {
642
+ requests: { total: number; successful: number; failed: number; averageResponseTime: number };
643
+ cache: { hitRate: number; totalSize: number };
644
+ system: { memoryUsage: number; uptime: number };
645
+ };
659
646
  const csv = [
660
647
  "Metric,Value",
661
648
  `Total Requests,${metrics.requests.total}`,
@@ -676,8 +663,6 @@ export class PerformanceMonitor {
676
663
  */
677
664
  private cleanupOldData(): void {
678
665
  const cutoff = Date.now() - this.config.retentionPeriod;
679
- this.historicalData = this.historicalData.filter(
680
- (data) => data.system.uptime > cutoff,
681
- );
666
+ this.historicalData = this.historicalData.filter((data) => data.system.uptime > cutoff);
682
667
  }
683
668
  }
@@ -7,17 +7,9 @@ export { PerformanceMonitor } from "./PerformanceMonitor.js";
7
7
  export { MetricsCollector } from "./MetricsCollector.js";
8
8
  export { PerformanceAnalytics } from "./PerformanceAnalytics.js";
9
9
 
10
- export type {
11
- PerformanceMetrics,
12
- PerformanceAlert,
13
- PerformanceConfig,
14
- } from "./PerformanceMonitor.js";
10
+ export type { PerformanceMetrics, PerformanceAlert, PerformanceConfig } from "./PerformanceMonitor.js";
15
11
 
16
- export type {
17
- CollectorConfig,
18
- RequestMetadata,
19
- ToolExecutionContext,
20
- } from "./MetricsCollector.js";
12
+ export type { CollectorConfig, RequestMetadata, ToolExecutionContext } from "./MetricsCollector.js";
21
13
 
22
14
  export type {
23
15
  AnalyticsConfig,