0xray 4.0.12 → 4.0.13

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 (940) hide show
  1. package/.grok-plugin/plugin.json +1 -1
  2. package/.xray/features.json +1 -1
  3. package/llms.txt +1 -1
  4. package/package.json +1 -1
  5. package/scripts/foundry/CHANGELOG.md +3 -1
  6. package/scripts/foundry/README.md +1 -1
  7. package/scripts/foundry/package.json +1 -1
  8. package/scripts/foundry/plant/agents/inspect.yml +1 -1
  9. package/scripts/foundry/plant/agents/mill.yml +1 -1
  10. package/src/integrations/openclaw/plugin/xray-pre-tool/package.json +1 -1
  11. package/xray/features.json +1 -1
  12. package/.opencode/skills/api-design/SKILL.md +0 -37
  13. package/.opencode/skills/architect-tools/SKILL.md +0 -37
  14. package/.opencode/skills/architecture-patterns/SKILL.md +0 -37
  15. package/.opencode/skills/auto-format/SKILL.md +0 -37
  16. package/.opencode/skills/backend-engineer/SKILL.md +0 -49
  17. package/.opencode/skills/boot-orchestrator/SKILL.md +0 -33
  18. package/.opencode/skills/bug-triage/SKILL.md +0 -43
  19. package/.opencode/skills/code-analyzer/SKILL.md +0 -45
  20. package/.opencode/skills/code-review/SKILL.md +0 -52
  21. package/.opencode/skills/content-creator/SKILL.md +0 -38
  22. package/.opencode/skills/database-engineer/SKILL.md +0 -46
  23. package/.opencode/skills/devops-engineer/SKILL.md +0 -49
  24. package/.opencode/skills/enforcer/SKILL.md +0 -37
  25. package/.opencode/skills/framework-compliance-audit/SKILL.md +0 -37
  26. package/.opencode/skills/frontend-engineer/SKILL.md +0 -49
  27. package/.opencode/skills/frontend-ui-ux-engineer/SKILL.md +0 -41
  28. package/.opencode/skills/git-workflow/SKILL.md +0 -37
  29. package/.opencode/skills/growth-strategist/SKILL.md +0 -48
  30. package/.opencode/skills/hermes-agent/SKILL.md +0 -212
  31. package/.opencode/skills/inference-improve/SKILL.md +0 -97
  32. package/.opencode/skills/lint/SKILL.md +0 -37
  33. package/.opencode/skills/log-monitor/SKILL.md +0 -44
  34. package/.opencode/skills/mobile-developer/SKILL.md +0 -42
  35. package/.opencode/skills/model-health-check/SKILL.md +0 -37
  36. package/.opencode/skills/multimodal-looker/SKILL.md +0 -45
  37. package/.opencode/skills/orchestrator/SKILL.md +0 -61
  38. package/.opencode/skills/performance-analysis/SKILL.md +0 -37
  39. package/.opencode/skills/performance-engineer/SKILL.md +0 -41
  40. package/.opencode/skills/performance-optimization/SKILL.md +0 -37
  41. package/.opencode/skills/processor-pipeline/SKILL.md +0 -37
  42. package/.opencode/skills/project-analysis/SKILL.md +0 -42
  43. package/.opencode/skills/refactoring-strategies/SKILL.md +0 -37
  44. package/.opencode/skills/registry.json +0 -65
  45. package/.opencode/skills/researcher/SKILL.md +0 -50
  46. package/.opencode/skills/security-audit/SKILL.md +0 -48
  47. package/.opencode/skills/security-scan/SKILL.md +0 -37
  48. package/.opencode/skills/seo-consultant/SKILL.md +0 -43
  49. package/.opencode/skills/session-management/SKILL.md +0 -36
  50. package/.opencode/skills/state-manager/SKILL.md +0 -37
  51. package/.opencode/skills/storyteller/SKILL.md +0 -130
  52. package/.opencode/skills/strategist/SKILL.md +0 -44
  53. package/.opencode/skills/tech-writer/SKILL.md +0 -37
  54. package/.opencode/skills/testing-best-practices/SKILL.md +0 -37
  55. package/.opencode/skills/testing-strategy/SKILL.md +0 -54
  56. package/.opencode/skills/ui-ux-design/SKILL.md +0 -603
  57. package/.opencode/skills/xray-orchestrator/SKILL.md +0 -141
  58. package/.opencode/skills/xray-orchestrator/index.ts +0 -267
  59. package/dist/.gitignore.default +0 -67
  60. package/dist/AGENTS.md +0 -225
  61. package/dist/CHANGELOG.md +0 -2764
  62. package/dist/LICENSE +0 -21
  63. package/dist/README.md +0 -233
  64. package/dist/SKILLS.md +0 -166
  65. package/dist/agents/architect.d.ts +0 -2
  66. package/dist/agents/architect.js +0 -56
  67. package/dist/agents/backend-engineer.d.ts +0 -8
  68. package/dist/agents/backend-engineer.js +0 -81
  69. package/dist/agents/bug-triage-specialist.d.ts +0 -2
  70. package/dist/agents/bug-triage-specialist.js +0 -74
  71. package/dist/agents/code-analyzer.d.ts +0 -7
  72. package/dist/agents/code-analyzer.js +0 -150
  73. package/dist/agents/code-reviewer.d.ts +0 -2
  74. package/dist/agents/code-reviewer.js +0 -69
  75. package/dist/agents/content-creator.d.ts +0 -9
  76. package/dist/agents/content-creator.js +0 -72
  77. package/dist/agents/database-engineer.d.ts +0 -8
  78. package/dist/agents/database-engineer.js +0 -76
  79. package/dist/agents/devops-engineer.d.ts +0 -8
  80. package/dist/agents/devops-engineer.js +0 -84
  81. package/dist/agents/frontend-engineer.d.ts +0 -8
  82. package/dist/agents/frontend-engineer.js +0 -78
  83. package/dist/agents/frontend-ui-ux-engineer.d.ts +0 -8
  84. package/dist/agents/frontend-ui-ux-engineer.js +0 -64
  85. package/dist/agents/growth-strategist.d.ts +0 -8
  86. package/dist/agents/growth-strategist.js +0 -111
  87. package/dist/agents/index.d.ts +0 -25
  88. package/dist/agents/index.js +0 -47
  89. package/dist/agents/known-names.d.ts +0 -26
  90. package/dist/agents/known-names.js +0 -72
  91. package/dist/agents/librarian-agents-updater.d.ts +0 -30
  92. package/dist/agents/librarian-agents-updater.js +0 -333
  93. package/dist/agents/log-monitor.d.ts +0 -2
  94. package/dist/agents/log-monitor.js +0 -109
  95. package/dist/agents/mobile-developer.d.ts +0 -9
  96. package/dist/agents/mobile-developer.js +0 -102
  97. package/dist/agents/multimodal-looker.d.ts +0 -9
  98. package/dist/agents/multimodal-looker.js +0 -93
  99. package/dist/agents/performance-engineer.d.ts +0 -8
  100. package/dist/agents/performance-engineer.js +0 -86
  101. package/dist/agents/refactorer.d.ts +0 -2
  102. package/dist/agents/refactorer.js +0 -80
  103. package/dist/agents/registry.d.ts +0 -37
  104. package/dist/agents/registry.js +0 -354
  105. package/dist/agents/researcher.d.ts +0 -2
  106. package/dist/agents/researcher.js +0 -83
  107. package/dist/agents/security-auditor.d.ts +0 -2
  108. package/dist/agents/security-auditor.js +0 -158
  109. package/dist/agents/seo-consultant.d.ts +0 -8
  110. package/dist/agents/seo-consultant.js +0 -53
  111. package/dist/agents/strategist.d.ts +0 -7
  112. package/dist/agents/strategist.js +0 -47
  113. package/dist/agents/tech-writer.d.ts +0 -8
  114. package/dist/agents/tech-writer.js +0 -84
  115. package/dist/agents/testing-lead.d.ts +0 -2
  116. package/dist/agents/testing-lead.js +0 -95
  117. package/dist/agents/types.d.ts +0 -45
  118. package/dist/agents/types.js +0 -1
  119. package/dist/analytics/consent-manager.d.ts +0 -92
  120. package/dist/analytics/consent-manager.js +0 -257
  121. package/dist/analytics/emerging-pattern-detector.d.ts +0 -66
  122. package/dist/analytics/emerging-pattern-detector.js +0 -259
  123. package/dist/analytics/pattern-learning-engine.d.ts +0 -79
  124. package/dist/analytics/pattern-learning-engine.js +0 -277
  125. package/dist/analytics/pattern-performance-tracker.d.ts +0 -96
  126. package/dist/analytics/pattern-performance-tracker.js +0 -335
  127. package/dist/analytics/predictive-analytics.d.ts +0 -40
  128. package/dist/analytics/predictive-analytics.js +0 -247
  129. package/dist/analytics/prompt-pattern-analyzer.d.ts +0 -98
  130. package/dist/analytics/prompt-pattern-analyzer.js +0 -370
  131. package/dist/analytics/routing-performance-analyzer.d.ts +0 -100
  132. package/dist/analytics/routing-performance-analyzer.js +0 -355
  133. package/dist/analytics/routing-refiner.d.ts +0 -102
  134. package/dist/analytics/routing-refiner.js +0 -377
  135. package/dist/analytics/simple-pattern-analyzer.d.ts +0 -79
  136. package/dist/analytics/simple-pattern-analyzer.js +0 -296
  137. package/dist/architect/architect-tools.d.ts +0 -70
  138. package/dist/architect/architect-tools.js +0 -437
  139. package/dist/architect/architectural-integrity.d.ts +0 -20
  140. package/dist/architect/architectural-integrity.js +0 -78
  141. package/dist/benchmark/performance-benchmark.d.ts +0 -103
  142. package/dist/benchmark/performance-benchmark.js +0 -373
  143. package/dist/cli/commands/analytics-disable.d.ts +0 -9
  144. package/dist/cli/commands/analytics-disable.js +0 -72
  145. package/dist/cli/commands/analytics-enable-action.d.ts +0 -8
  146. package/dist/cli/commands/analytics-enable-action.js +0 -82
  147. package/dist/cli/commands/analytics-preview.d.ts +0 -9
  148. package/dist/cli/commands/analytics-preview.js +0 -106
  149. package/dist/cli/commands/analytics-status.d.ts +0 -9
  150. package/dist/cli/commands/analytics-status.js +0 -68
  151. package/dist/cli/commands/antigravity-status.d.ts +0 -9
  152. package/dist/cli/commands/antigravity-status.js +0 -106
  153. package/dist/cli/commands/archive-logs.d.ts +0 -23
  154. package/dist/cli/commands/archive-logs.js +0 -160
  155. package/dist/cli/commands/credible-init.d.ts +0 -11
  156. package/dist/cli/commands/credible-init.js +0 -82
  157. package/dist/cli/commands/enforce.d.ts +0 -12
  158. package/dist/cli/commands/enforce.js +0 -78
  159. package/dist/cli/commands/foundry-mint-wear.d.ts +0 -3
  160. package/dist/cli/commands/foundry-mint-wear.js +0 -17
  161. package/dist/cli/commands/govern.d.ts +0 -29
  162. package/dist/cli/commands/govern.js +0 -149
  163. package/dist/cli/commands/grok-install.d.ts +0 -7
  164. package/dist/cli/commands/grok-install.js +0 -16
  165. package/dist/cli/commands/hermes-install.d.ts +0 -2
  166. package/dist/cli/commands/hermes-install.js +0 -90
  167. package/dist/cli/commands/mcp-install.d.ts +0 -4
  168. package/dist/cli/commands/mcp-install.js +0 -253
  169. package/dist/cli/commands/openclaw-install.d.ts +0 -2
  170. package/dist/cli/commands/openclaw-install.js +0 -80
  171. package/dist/cli/commands/opencode-install.d.ts +0 -2
  172. package/dist/cli/commands/opencode-install.js +0 -153
  173. package/dist/cli/commands/plugin-commands.d.ts +0 -18
  174. package/dist/cli/commands/plugin-commands.js +0 -245
  175. package/dist/cli/commands/publish-agent.d.ts +0 -15
  176. package/dist/cli/commands/publish-agent.js +0 -184
  177. package/dist/cli/commands/security-audit.d.ts +0 -23
  178. package/dist/cli/commands/security-audit.js +0 -219
  179. package/dist/cli/commands/skill-install.d.ts +0 -6
  180. package/dist/cli/commands/skill-install.js +0 -522
  181. package/dist/cli/commands/status.d.ts +0 -41
  182. package/dist/cli/commands/status.js +0 -199
  183. package/dist/cli/commands/storyteller.d.ts +0 -19
  184. package/dist/cli/commands/storyteller.js +0 -230
  185. package/dist/cli/index.d.ts +0 -7
  186. package/dist/cli/index.js +0 -996
  187. package/dist/cli/server.d.ts +0 -1
  188. package/dist/cli/server.js +0 -147
  189. package/dist/config/default-agents.d.ts +0 -12
  190. package/dist/config/default-agents.js +0 -16
  191. package/dist/config/routing-mappings.d.ts +0 -26
  192. package/dist/config/routing-mappings.js +0 -151
  193. package/dist/core/activity-logger.d.ts +0 -71
  194. package/dist/core/activity-logger.js +0 -259
  195. package/dist/core/adaptive-kernel.d.ts +0 -108
  196. package/dist/core/adaptive-kernel.js +0 -191
  197. package/dist/core/agent-spawn-gate.d.ts +0 -56
  198. package/dist/core/agent-spawn-gate.js +0 -120
  199. package/dist/core/boot-orchestrator.d.ts +0 -99
  200. package/dist/core/boot-orchestrator.js +0 -809
  201. package/dist/core/bridge.mjs +0 -922
  202. package/dist/core/codex-formatter.d.ts +0 -95
  203. package/dist/core/codex-formatter.js +0 -218
  204. package/dist/core/codex-injector.d.ts +0 -73
  205. package/dist/core/codex-injector.js +0 -423
  206. package/dist/core/config-loader.d.ts +0 -59
  207. package/dist/core/config-loader.js +0 -157
  208. package/dist/core/config-paths.d.ts +0 -66
  209. package/dist/core/config-paths.js +0 -169
  210. package/dist/core/context-loader.d.ts +0 -120
  211. package/dist/core/context-loader.js +0 -268
  212. package/dist/core/context-validator.d.ts +0 -52
  213. package/dist/core/context-validator.js +0 -211
  214. package/dist/core/features-config.d.ts +0 -531
  215. package/dist/core/features-config.js +0 -524
  216. package/dist/core/framework-logger.d.ts +0 -76
  217. package/dist/core/framework-logger.js +0 -275
  218. package/dist/core/index.d.ts +0 -5
  219. package/dist/core/index.js +0 -6
  220. package/dist/core/kernel-patterns.d.ts +0 -129
  221. package/dist/core/kernel-patterns.js +0 -301
  222. package/dist/core/logging-config.d.ts +0 -10
  223. package/dist/core/logging-config.js +0 -43
  224. package/dist/core/model-router.d.ts +0 -56
  225. package/dist/core/model-router.js +0 -134
  226. package/dist/core/orchestrator.d.ts +0 -71
  227. package/dist/core/orchestrator.js +0 -408
  228. package/dist/core/system-prompt-generator.d.ts +0 -34
  229. package/dist/core/system-prompt-generator.js +0 -264
  230. package/dist/core/trace-context.d.ts +0 -12
  231. package/dist/core/trace-context.js +0 -33
  232. package/dist/core/xray-activation.d.ts +0 -14
  233. package/dist/core/xray-activation.js +0 -135
  234. package/dist/delegation/agent-delegator.d.ts +0 -185
  235. package/dist/delegation/agent-delegator.js +0 -768
  236. package/dist/delegation/agent-expertise.d.ts +0 -15
  237. package/dist/delegation/agent-expertise.js +0 -155
  238. package/dist/delegation/analytics/index.d.ts +0 -11
  239. package/dist/delegation/analytics/index.js +0 -11
  240. package/dist/delegation/analytics/learning-engine.d.ts +0 -84
  241. package/dist/delegation/analytics/learning-engine.js +0 -276
  242. package/dist/delegation/analytics/outcome-tracker.d.ts +0 -117
  243. package/dist/delegation/analytics/outcome-tracker.js +0 -278
  244. package/dist/delegation/analytics/routing-analytics.d.ts +0 -60
  245. package/dist/delegation/analytics/routing-analytics.js +0 -192
  246. package/dist/delegation/ast-code-parser.d.ts +0 -173
  247. package/dist/delegation/ast-code-parser.js +0 -877
  248. package/dist/delegation/codebase-context-analyzer.d.ts +0 -164
  249. package/dist/delegation/codebase-context-analyzer.js +0 -1040
  250. package/dist/delegation/complexity-analyzer.d.ts +0 -110
  251. package/dist/delegation/complexity-analyzer.js +0 -281
  252. package/dist/delegation/complexity-core.d.ts +0 -119
  253. package/dist/delegation/complexity-core.js +0 -219
  254. package/dist/delegation/config/types.d.ts +0 -247
  255. package/dist/delegation/config/types.js +0 -6
  256. package/dist/delegation/dependency-graph-builder.d.ts +0 -94
  257. package/dist/delegation/dependency-graph-builder.js +0 -408
  258. package/dist/delegation/index.d.ts +0 -25
  259. package/dist/delegation/index.js +0 -20
  260. package/dist/delegation/metrics-aggregator.d.ts +0 -91
  261. package/dist/delegation/metrics-aggregator.js +0 -334
  262. package/dist/delegation/session-coordinator.d.ts +0 -132
  263. package/dist/delegation/session-coordinator.js +0 -351
  264. package/dist/delegation/strategy-selector.d.ts +0 -27
  265. package/dist/delegation/strategy-selector.js +0 -107
  266. package/dist/delegation/voting-coordinator.d.ts +0 -48
  267. package/dist/delegation/voting-coordinator.js +0 -374
  268. package/dist/delegation/voting-types.d.ts +0 -154
  269. package/dist/delegation/voting-types.js +0 -9
  270. package/dist/delegation/weighted-voting-aggregator.d.ts +0 -36
  271. package/dist/delegation/weighted-voting-aggregator.js +0 -193
  272. package/dist/enforcement/core/index.d.ts +0 -14
  273. package/dist/enforcement/core/index.js +0 -18
  274. package/dist/enforcement/core/rule-executor.d.ts +0 -157
  275. package/dist/enforcement/core/rule-executor.js +0 -364
  276. package/dist/enforcement/core/rule-hierarchy.d.ts +0 -145
  277. package/dist/enforcement/core/rule-hierarchy.js +0 -258
  278. package/dist/enforcement/core/rule-registry.d.ts +0 -196
  279. package/dist/enforcement/core/rule-registry.js +0 -239
  280. package/dist/enforcement/core/violation-fixer.d.ts +0 -105
  281. package/dist/enforcement/core/violation-fixer.js +0 -650
  282. package/dist/enforcement/enforcer-tools.d.ts +0 -85
  283. package/dist/enforcement/enforcer-tools.js +0 -818
  284. package/dist/enforcement/index.d.ts +0 -22
  285. package/dist/enforcement/index.js +0 -40
  286. package/dist/enforcement/loaders/agent-triage-loader.d.ts +0 -98
  287. package/dist/enforcement/loaders/agent-triage-loader.js +0 -221
  288. package/dist/enforcement/loaders/agents-md-validation-loader.d.ts +0 -75
  289. package/dist/enforcement/loaders/agents-md-validation-loader.js +0 -251
  290. package/dist/enforcement/loaders/base-loader.d.ts +0 -82
  291. package/dist/enforcement/loaders/base-loader.js +0 -85
  292. package/dist/enforcement/loaders/codex-loader.d.ts +0 -76
  293. package/dist/enforcement/loaders/codex-loader.js +0 -395
  294. package/dist/enforcement/loaders/index.d.ts +0 -36
  295. package/dist/enforcement/loaders/index.js +0 -39
  296. package/dist/enforcement/loaders/loader-orchestrator.d.ts +0 -96
  297. package/dist/enforcement/loaders/loader-orchestrator.js +0 -167
  298. package/dist/enforcement/loaders/processor-loader.d.ts +0 -59
  299. package/dist/enforcement/loaders/processor-loader.js +0 -112
  300. package/dist/enforcement/rule-enforcer.d.ts +0 -142
  301. package/dist/enforcement/rule-enforcer.js +0 -298
  302. package/dist/enforcement/test-auto-healing.d.ts +0 -83
  303. package/dist/enforcement/test-auto-healing.js +0 -325
  304. package/dist/enforcement/types.d.ts +0 -500
  305. package/dist/enforcement/types.js +0 -29
  306. package/dist/enforcement/validators/architecture-validators.d.ts +0 -154
  307. package/dist/enforcement/validators/architecture-validators.js +0 -599
  308. package/dist/enforcement/validators/base-validator.d.ts +0 -87
  309. package/dist/enforcement/validators/base-validator.js +0 -107
  310. package/dist/enforcement/validators/code-quality-validators.d.ts +0 -88
  311. package/dist/enforcement/validators/code-quality-validators.js +0 -335
  312. package/dist/enforcement/validators/index.d.ts +0 -14
  313. package/dist/enforcement/validators/index.js +0 -20
  314. package/dist/enforcement/validators/security-validators.d.ts +0 -52
  315. package/dist/enforcement/validators/security-validators.js +0 -219
  316. package/dist/enforcement/validators/testing-validators.d.ts +0 -80
  317. package/dist/enforcement/validators/testing-validators.js +0 -252
  318. package/dist/enforcement/validators/validator-registry.d.ts +0 -91
  319. package/dist/enforcement/validators/validator-registry.js +0 -149
  320. package/dist/execution/opencode-cli-invoker.d.ts +0 -8
  321. package/dist/execution/opencode-cli-invoker.js +0 -173
  322. package/dist/execution/proposal-applier.d.ts +0 -24
  323. package/dist/execution/proposal-applier.js +0 -254
  324. package/dist/governance/codex-policy.service.d.ts +0 -56
  325. package/dist/governance/codex-policy.service.js +0 -166
  326. package/dist/governance/governance-core.d.ts +0 -53
  327. package/dist/governance/governance-core.js +0 -168
  328. package/dist/governance/governance-service.d.ts +0 -39
  329. package/dist/governance/governance-service.js +0 -351
  330. package/dist/governance/governance-types.d.ts +0 -90
  331. package/dist/governance/governance-types.js +0 -11
  332. package/dist/governance/llm-governance-provider.d.ts +0 -16
  333. package/dist/governance/llm-governance-provider.js +0 -284
  334. package/dist/governance/local-confer.d.ts +0 -10
  335. package/dist/governance/local-confer.js +0 -27
  336. package/dist/index.d.ts +0 -28
  337. package/dist/index.js +0 -24
  338. package/dist/inference/deploy-verifier.d.ts +0 -26
  339. package/dist/inference/deploy-verifier.js +0 -161
  340. package/dist/inference/index.d.ts +0 -10
  341. package/dist/inference/index.js +0 -5
  342. package/dist/inference/inference-accumulator.d.ts +0 -29
  343. package/dist/inference/inference-accumulator.js +0 -126
  344. package/dist/inference/inference-agent-invoker.d.ts +0 -3
  345. package/dist/inference/inference-agent-invoker.js +0 -67
  346. package/dist/inference/inference-applier.d.ts +0 -4
  347. package/dist/inference/inference-applier.js +0 -178
  348. package/dist/inference/inference-cycle.d.ts +0 -70
  349. package/dist/inference/inference-cycle.js +0 -392
  350. package/dist/inference/inference-proposal-generator.d.ts +0 -3
  351. package/dist/inference/inference-proposal-generator.js +0 -149
  352. package/dist/inference/semantic-patterns.d.ts +0 -7
  353. package/dist/inference/semantic-patterns.js +0 -310
  354. package/dist/inference/session-capture.d.ts +0 -32
  355. package/dist/inference/session-capture.js +0 -308
  356. package/dist/infrastructure/iac-validator.d.ts +0 -150
  357. package/dist/infrastructure/iac-validator.js +0 -465
  358. package/dist/infrastructure/schemas/cloud-schemas.d.ts +0 -482
  359. package/dist/infrastructure/schemas/cloud-schemas.js +0 -488
  360. package/dist/integrations/base/ExampleIntegration.d.ts +0 -46
  361. package/dist/integrations/base/ExampleIntegration.js +0 -180
  362. package/dist/integrations/base/Integration.d.ts +0 -266
  363. package/dist/integrations/base/Integration.js +0 -394
  364. package/dist/integrations/base/README.md +0 -446
  365. package/dist/integrations/base/index.d.ts +0 -11
  366. package/dist/integrations/base/index.js +0 -15
  367. package/dist/integrations/base/registry.d.ts +0 -272
  368. package/dist/integrations/base/registry.js +0 -605
  369. package/dist/integrations/base/types.d.ts +0 -167
  370. package/dist/integrations/base/types.js +0 -117
  371. package/dist/integrations/enforcement-gate.d.ts +0 -44
  372. package/dist/integrations/enforcement-gate.js +0 -348
  373. package/dist/integrations/governance/governance-client.d.ts +0 -75
  374. package/dist/integrations/governance/governance-client.js +0 -315
  375. package/dist/integrations/governance/index.d.ts +0 -98
  376. package/dist/integrations/governance/index.js +0 -365
  377. package/dist/integrations/governance/types.d.ts +0 -238
  378. package/dist/integrations/governance/types.js +0 -96
  379. package/dist/integrations/grok/grok-cli.d.ts +0 -31
  380. package/dist/integrations/grok/grok-cli.js +0 -222
  381. package/dist/integrations/grok/hooks/grok-hook-activity.js +0 -53
  382. package/dist/integrations/grok/hooks/grok-hook-utils.js +0 -372
  383. package/dist/integrations/grok/hooks/post-tool-use.js +0 -118
  384. package/dist/integrations/grok/hooks/pre-tool-use.js +0 -136
  385. package/dist/integrations/grok/hooks/session-start.js +0 -189
  386. package/dist/integrations/grok/plugin/0xray/.mcp.json +0 -35
  387. package/dist/integrations/grok/plugin/0xray/hooks/hooks.json +0 -70
  388. package/dist/integrations/hermes-agent/.mcp.json +0 -32
  389. package/dist/integrations/hermes-agent/__init__.py +0 -790
  390. package/dist/integrations/hermes-agent/__pycache__/__init__.cpython-313.pyc +0 -0
  391. package/dist/integrations/hermes-agent/__pycache__/schemas.cpython-313.pyc +0 -0
  392. package/dist/integrations/hermes-agent/__pycache__/tools.cpython-313.pyc +0 -0
  393. package/dist/integrations/hermes-agent/after-install.md +0 -71
  394. package/dist/integrations/hermes-agent/bridge.mjs +0 -1060
  395. package/dist/integrations/hermes-agent/conftest.py +0 -14
  396. package/dist/integrations/hermes-agent/logs/framework/routing-outcomes.json +0 -1
  397. package/dist/integrations/hermes-agent/plugin.yaml +0 -12
  398. package/dist/integrations/hermes-agent/schemas.py +0 -149
  399. package/dist/integrations/hermes-agent/test_plugin.py +0 -1100
  400. package/dist/integrations/hermes-agent/tools.py +0 -357
  401. package/dist/integrations/hooks/confer-hook-runtime.mjs +0 -49
  402. package/dist/integrations/hooks/delegation-gate-runtime.mjs +0 -110
  403. package/dist/integrations/hooks/pipeline-hook-runtime.mjs +0 -211
  404. package/dist/integrations/hooks/plan-hook-runtime.mjs +0 -68
  405. package/dist/integrations/hooks/station-hook-runtime.cjs +0 -421
  406. package/dist/integrations/hooks/station-hook-runtime.mjs +0 -24
  407. package/dist/integrations/hooks/station-memory-ingest.mjs +0 -45
  408. package/dist/integrations/hooks/station-memory-match.mjs +0 -47
  409. package/dist/integrations/hooks/synthesis-hook-runtime.mjs +0 -50
  410. package/dist/integrations/hooks/user-aside-hook-runtime.mjs +0 -49
  411. package/dist/integrations/openclaw/README.md +0 -134
  412. package/dist/integrations/openclaw/api-server.d.ts +0 -86
  413. package/dist/integrations/openclaw/api-server.js +0 -388
  414. package/dist/integrations/openclaw/client.d.ts +0 -125
  415. package/dist/integrations/openclaw/client.js +0 -499
  416. package/dist/integrations/openclaw/config.d.ts +0 -95
  417. package/dist/integrations/openclaw/config.js +0 -372
  418. package/dist/integrations/openclaw/hooks/pre-tool-gate-runtime.mjs +0 -102
  419. package/dist/integrations/openclaw/hooks/xray-hooks.d.ts +0 -123
  420. package/dist/integrations/openclaw/hooks/xray-hooks.js +0 -279
  421. package/dist/integrations/openclaw/index.d.ts +0 -100
  422. package/dist/integrations/openclaw/index.js +0 -367
  423. package/dist/integrations/openclaw/plugin/xray-pre-tool/index.js +0 -75
  424. package/dist/integrations/openclaw/plugin/xray-pre-tool/openclaw.plugin.json +0 -10
  425. package/dist/integrations/openclaw/plugin/xray-pre-tool/package.json +0 -12
  426. package/dist/integrations/openclaw/pre-tool-gate.d.ts +0 -19
  427. package/dist/integrations/openclaw/pre-tool-gate.js +0 -39
  428. package/dist/integrations/openclaw/types.d.ts +0 -425
  429. package/dist/integrations/openclaw/types.js +0 -152
  430. package/dist/integrations/plugins/index.d.ts +0 -9
  431. package/dist/integrations/plugins/index.js +0 -9
  432. package/dist/integrations/plugins/plugin-integration.d.ts +0 -288
  433. package/dist/integrations/plugins/plugin-integration.js +0 -605
  434. package/dist/integrations/plugins/plugin-registry.d.ts +0 -223
  435. package/dist/integrations/plugins/plugin-registry.js +0 -579
  436. package/dist/mcps/agent-resolver.d.ts +0 -45
  437. package/dist/mcps/agent-resolver.js +0 -105
  438. package/dist/mcps/architect-tools.server.d.ts +0 -16
  439. package/dist/mcps/architect-tools.server.js +0 -217
  440. package/dist/mcps/auto-format.server.d.ts +0 -18
  441. package/dist/mcps/auto-format.server.js +0 -395
  442. package/dist/mcps/boot-orchestrator.server.d.ts +0 -48
  443. package/dist/mcps/boot-orchestrator.server.js +0 -835
  444. package/dist/mcps/config/config-loader.d.ts +0 -56
  445. package/dist/mcps/config/config-loader.js +0 -140
  446. package/dist/mcps/config/config-validator.d.ts +0 -40
  447. package/dist/mcps/config/config-validator.js +0 -101
  448. package/dist/mcps/config/index.d.ts +0 -31
  449. package/dist/mcps/config/index.js +0 -30
  450. package/dist/mcps/config/plugin-server-registry.d.ts +0 -126
  451. package/dist/mcps/config/plugin-server-registry.js +0 -222
  452. package/dist/mcps/config/server-config-registry.d.ts +0 -51
  453. package/dist/mcps/config/server-config-registry.js +0 -349
  454. package/dist/mcps/connection/connection-manager.d.ts +0 -39
  455. package/dist/mcps/connection/connection-manager.js +0 -79
  456. package/dist/mcps/connection/connection-pool.d.ts +0 -64
  457. package/dist/mcps/connection/connection-pool.js +0 -164
  458. package/dist/mcps/connection/mcp-connection.d.ts +0 -66
  459. package/dist/mcps/connection/mcp-connection.js +0 -233
  460. package/dist/mcps/connection/process-spawner.d.ts +0 -24
  461. package/dist/mcps/connection/process-spawner.js +0 -34
  462. package/dist/mcps/enforcer-tools.server.d.ts +0 -26
  463. package/dist/mcps/enforcer-tools.server.js +0 -712
  464. package/dist/mcps/estimation.server.d.ts +0 -19
  465. package/dist/mcps/estimation.server.js +0 -149
  466. package/dist/mcps/framework-compliance-audit.server.d.ts +0 -20
  467. package/dist/mcps/framework-compliance-audit.server.js +0 -471
  468. package/dist/mcps/framework-help.server.d.ts +0 -13
  469. package/dist/mcps/framework-help.server.js +0 -383
  470. package/dist/mcps/governance.server.d.ts +0 -36
  471. package/dist/mcps/governance.server.js +0 -499
  472. package/dist/mcps/in-process-skill-registry.d.ts +0 -20
  473. package/dist/mcps/in-process-skill-registry.js +0 -48
  474. package/dist/mcps/index.d.ts +0 -17
  475. package/dist/mcps/index.js +0 -65
  476. package/dist/mcps/knowledge-skills/api-design.server.d.ts +0 -13
  477. package/dist/mcps/knowledge-skills/api-design.server.js +0 -92
  478. package/dist/mcps/knowledge-skills/architecture-patterns.server.d.ts +0 -13
  479. package/dist/mcps/knowledge-skills/architecture-patterns.server.js +0 -82
  480. package/dist/mcps/knowledge-skills/bug-triage-specialist.server.d.ts +0 -31
  481. package/dist/mcps/knowledge-skills/bug-triage-specialist.server.js +0 -434
  482. package/dist/mcps/knowledge-skills/code-analyzer.server.d.ts +0 -29
  483. package/dist/mcps/knowledge-skills/code-analyzer.server.js +0 -578
  484. package/dist/mcps/knowledge-skills/code-review.server.d.ts +0 -44
  485. package/dist/mcps/knowledge-skills/code-review.server.js +0 -783
  486. package/dist/mcps/knowledge-skills/content-creator.server.d.ts +0 -11
  487. package/dist/mcps/knowledge-skills/content-creator.server.js +0 -234
  488. package/dist/mcps/knowledge-skills/database-design.server.d.ts +0 -41
  489. package/dist/mcps/knowledge-skills/database-design.server.js +0 -788
  490. package/dist/mcps/knowledge-skills/devops-deployment.server.d.ts +0 -41
  491. package/dist/mcps/knowledge-skills/devops-deployment.server.js +0 -1147
  492. package/dist/mcps/knowledge-skills/git-workflow.server.d.ts +0 -13
  493. package/dist/mcps/knowledge-skills/git-workflow.server.js +0 -83
  494. package/dist/mcps/knowledge-skills/growth-strategist.server.d.ts +0 -11
  495. package/dist/mcps/knowledge-skills/growth-strategist.server.js +0 -339
  496. package/dist/mcps/knowledge-skills/log-monitor.server.d.ts +0 -22
  497. package/dist/mcps/knowledge-skills/log-monitor.server.js +0 -431
  498. package/dist/mcps/knowledge-skills/mobile-development.server.d.ts +0 -17
  499. package/dist/mcps/knowledge-skills/mobile-development.server.js +0 -495
  500. package/dist/mcps/knowledge-skills/multimodal-looker.server.d.ts +0 -53
  501. package/dist/mcps/knowledge-skills/multimodal-looker.server.js +0 -1028
  502. package/dist/mcps/knowledge-skills/performance-optimization.server.d.ts +0 -69
  503. package/dist/mcps/knowledge-skills/performance-optimization.server.js +0 -1537
  504. package/dist/mcps/knowledge-skills/project-analysis.server.d.ts +0 -35
  505. package/dist/mcps/knowledge-skills/project-analysis.server.js +0 -724
  506. package/dist/mcps/knowledge-skills/refactoring-strategies.server.d.ts +0 -31
  507. package/dist/mcps/knowledge-skills/refactoring-strategies.server.js +0 -762
  508. package/dist/mcps/knowledge-skills/security-audit.server.d.ts +0 -46
  509. package/dist/mcps/knowledge-skills/security-audit.server.js +0 -684
  510. package/dist/mcps/knowledge-skills/seo-consultant.server.d.ts +0 -24
  511. package/dist/mcps/knowledge-skills/seo-consultant.server.js +0 -745
  512. package/dist/mcps/knowledge-skills/session-management.server.d.ts +0 -22
  513. package/dist/mcps/knowledge-skills/session-management.server.js +0 -394
  514. package/dist/mcps/knowledge-skills/skill-invocation.server.d.ts +0 -32
  515. package/dist/mcps/knowledge-skills/skill-invocation.server.js +0 -454
  516. package/dist/mcps/knowledge-skills/storyteller.server.d.ts +0 -11
  517. package/dist/mcps/knowledge-skills/storyteller.server.js +0 -167
  518. package/dist/mcps/knowledge-skills/strategist.server.d.ts +0 -15
  519. package/dist/mcps/knowledge-skills/strategist.server.js +0 -172
  520. package/dist/mcps/knowledge-skills/tech-writer.server.d.ts +0 -45
  521. package/dist/mcps/knowledge-skills/tech-writer.server.js +0 -1016
  522. package/dist/mcps/knowledge-skills/testing-best-practices.server.d.ts +0 -34
  523. package/dist/mcps/knowledge-skills/testing-best-practices.server.js +0 -694
  524. package/dist/mcps/knowledge-skills/testing-strategy.server.d.ts +0 -45
  525. package/dist/mcps/knowledge-skills/testing-strategy.server.js +0 -689
  526. package/dist/mcps/knowledge-skills/ui-ux-design.server.d.ts +0 -67
  527. package/dist/mcps/knowledge-skills/ui-ux-design.server.js +0 -1265
  528. package/dist/mcps/lint.server.d.ts +0 -15
  529. package/dist/mcps/lint.server.js +0 -340
  530. package/dist/mcps/mcp-client.d.ts +0 -157
  531. package/dist/mcps/mcp-client.js +0 -574
  532. package/dist/mcps/model-health-check.server.d.ts +0 -14
  533. package/dist/mcps/model-health-check.server.js +0 -201
  534. package/dist/mcps/orchestrator/aside-context.d.ts +0 -21
  535. package/dist/mcps/orchestrator/aside-context.js +0 -207
  536. package/dist/mcps/orchestrator/config/agent-capabilities.d.ts +0 -39
  537. package/dist/mcps/orchestrator/config/agent-capabilities.js +0 -128
  538. package/dist/mcps/orchestrator/config/memory-routing-bridge.d.ts +0 -12
  539. package/dist/mcps/orchestrator/config/memory-routing-bridge.js +0 -71
  540. package/dist/mcps/orchestrator/execution/execution-planner.d.ts +0 -64
  541. package/dist/mcps/orchestrator/execution/execution-planner.js +0 -320
  542. package/dist/mcps/orchestrator/handlers/complexity-handler.d.ts +0 -55
  543. package/dist/mcps/orchestrator/handlers/complexity-handler.js +0 -285
  544. package/dist/mcps/orchestrator/handlers/status-handler.d.ts +0 -71
  545. package/dist/mcps/orchestrator/handlers/status-handler.js +0 -239
  546. package/dist/mcps/orchestrator/handlers/task-handler.d.ts +0 -59
  547. package/dist/mcps/orchestrator/handlers/task-handler.js +0 -354
  548. package/dist/mcps/orchestrator/index.d.ts +0 -6
  549. package/dist/mcps/orchestrator/index.js +0 -5
  550. package/dist/mcps/orchestrator/server.d.ts +0 -38
  551. package/dist/mcps/orchestrator/server.js +0 -538
  552. package/dist/mcps/orchestrator/types.d.ts +0 -131
  553. package/dist/mcps/orchestrator/types.js +0 -6
  554. package/dist/mcps/orchestrator.server.d.ts +0 -10
  555. package/dist/mcps/orchestrator.server.js +0 -20
  556. package/dist/mcps/performance-analysis.server.d.ts +0 -25
  557. package/dist/mcps/performance-analysis.server.js +0 -488
  558. package/dist/mcps/processor-pipeline.server.d.ts +0 -29
  559. package/dist/mcps/processor-pipeline.server.js +0 -531
  560. package/dist/mcps/protocol/protocol-constants.d.ts +0 -46
  561. package/dist/mcps/protocol/protocol-constants.js +0 -46
  562. package/dist/mcps/registry.json +0 -109
  563. package/dist/mcps/researcher-confidence.d.ts +0 -21
  564. package/dist/mcps/researcher-confidence.js +0 -92
  565. package/dist/mcps/researcher.server.d.ts +0 -29
  566. package/dist/mcps/researcher.server.js +0 -419
  567. package/dist/mcps/security-scan.server.d.ts +0 -19
  568. package/dist/mcps/security-scan.server.js +0 -517
  569. package/dist/mcps/shared/knowledge-skill-base.d.ts +0 -17
  570. package/dist/mcps/shared/knowledge-skill-base.js +0 -52
  571. package/dist/mcps/shared/prompt-security-validator.d.ts +0 -44
  572. package/dist/mcps/shared/prompt-security-validator.js +0 -148
  573. package/dist/mcps/shared/security-scanner.d.ts +0 -119
  574. package/dist/mcps/shared/security-scanner.js +0 -429
  575. package/dist/mcps/simulation/index.d.ts +0 -12
  576. package/dist/mcps/simulation/index.js +0 -12
  577. package/dist/mcps/simulation/server-simulations.d.ts +0 -39
  578. package/dist/mcps/simulation/server-simulations.js +0 -219
  579. package/dist/mcps/simulation/simulation-engine.d.ts +0 -51
  580. package/dist/mcps/simulation/simulation-engine.js +0 -96
  581. package/dist/mcps/state-manager.server.d.ts +0 -27
  582. package/dist/mcps/state-manager.server.js +0 -609
  583. package/dist/mcps/tools/index.d.ts +0 -14
  584. package/dist/mcps/tools/index.js +0 -14
  585. package/dist/mcps/tools/tool-cache.d.ts +0 -53
  586. package/dist/mcps/tools/tool-cache.js +0 -112
  587. package/dist/mcps/tools/tool-discovery.d.ts +0 -27
  588. package/dist/mcps/tools/tool-discovery.js +0 -65
  589. package/dist/mcps/tools/tool-executor.d.ts +0 -41
  590. package/dist/mcps/tools/tool-executor.js +0 -75
  591. package/dist/mcps/tools/tool-registry.d.ts +0 -42
  592. package/dist/mcps/tools/tool-registry.js +0 -67
  593. package/dist/mcps/types/index.d.ts +0 -13
  594. package/dist/mcps/types/index.js +0 -15
  595. package/dist/mcps/types/json-rpc.types.d.ts +0 -35
  596. package/dist/mcps/types/json-rpc.types.js +0 -7
  597. package/dist/mcps/types/mcp.types.d.ts +0 -105
  598. package/dist/mcps/types/mcp.types.js +0 -7
  599. package/dist/memory-routing/index.d.ts +0 -6
  600. package/dist/memory-routing/index.js +0 -4
  601. package/dist/memory-routing/null-provider.d.ts +0 -14
  602. package/dist/memory-routing/null-provider.js +0 -63
  603. package/dist/memory-routing/provider-loader.d.ts +0 -6
  604. package/dist/memory-routing/provider-loader.js +0 -165
  605. package/dist/memory-routing/provider-registry.d.ts +0 -8
  606. package/dist/memory-routing/provider-registry.js +0 -41
  607. package/dist/memory-routing/types.d.ts +0 -111
  608. package/dist/memory-routing/types.js +0 -7
  609. package/dist/memory-routing/validate-config.d.ts +0 -7
  610. package/dist/memory-routing/validate-config.js +0 -32
  611. package/dist/metrics/agent-metrics.d.ts +0 -169
  612. package/dist/metrics/agent-metrics.js +0 -574
  613. package/dist/metrics/index.d.ts +0 -6
  614. package/dist/metrics/index.js +0 -6
  615. package/dist/monitoring/advanced-profiler.d.ts +0 -51
  616. package/dist/monitoring/advanced-profiler.js +0 -232
  617. package/dist/monitoring/memory-monitor.d.ts +0 -113
  618. package/dist/monitoring/memory-monitor.js +0 -315
  619. package/dist/monitoring/nudge-watchdog.d.ts +0 -87
  620. package/dist/monitoring/nudge-watchdog.js +0 -355
  621. package/dist/monitoring/test-auto-generation-monitor.d.ts +0 -64
  622. package/dist/monitoring/test-auto-generation-monitor.js +0 -157
  623. package/dist/nucleus/aside-worktree.d.ts +0 -41
  624. package/dist/nucleus/aside-worktree.js +0 -164
  625. package/dist/nucleus/autonomy-kernel.d.ts +0 -55
  626. package/dist/nucleus/autonomy-kernel.js +0 -234
  627. package/dist/nucleus/confer.d.ts +0 -57
  628. package/dist/nucleus/confer.js +0 -322
  629. package/dist/nucleus/default-plugins.d.ts +0 -17
  630. package/dist/nucleus/default-plugins.js +0 -173
  631. package/dist/nucleus/delegation-gate.d.ts +0 -105
  632. package/dist/nucleus/delegation-gate.js +0 -582
  633. package/dist/nucleus/govern-http.d.ts +0 -59
  634. package/dist/nucleus/govern-http.js +0 -175
  635. package/dist/nucleus/index.d.ts +0 -17
  636. package/dist/nucleus/index.js +0 -12
  637. package/dist/nucleus/kernel.d.ts +0 -51
  638. package/dist/nucleus/kernel.js +0 -62
  639. package/dist/nucleus/lead-dev-plan-persistence.d.ts +0 -70
  640. package/dist/nucleus/lead-dev-plan-persistence.js +0 -402
  641. package/dist/nucleus/pending-delegations.d.ts +0 -71
  642. package/dist/nucleus/pending-delegations.js +0 -285
  643. package/dist/nucleus/plugin-registry.d.ts +0 -132
  644. package/dist/nucleus/plugin-registry.js +0 -175
  645. package/dist/nucleus/spawn-plan-resolution.d.ts +0 -20
  646. package/dist/nucleus/spawn-plan-resolution.js +0 -42
  647. package/dist/nucleus/suit-temperament.d.ts +0 -40
  648. package/dist/nucleus/suit-temperament.js +0 -157
  649. package/dist/nucleus/synthesis-completion.d.ts +0 -6
  650. package/dist/nucleus/synthesis-completion.js +0 -29
  651. package/dist/nucleus/synthesis-consult-receipt.d.ts +0 -32
  652. package/dist/nucleus/synthesis-consult-receipt.js +0 -171
  653. package/dist/nucleus/synthesis-context.d.ts +0 -31
  654. package/dist/nucleus/synthesis-context.js +0 -86
  655. package/dist/nucleus/synthesis.d.ts +0 -54
  656. package/dist/nucleus/synthesis.js +0 -196
  657. package/dist/nucleus/thin-dispatch.d.ts +0 -33
  658. package/dist/nucleus/thin-dispatch.js +0 -85
  659. package/dist/nucleus/user-aside.d.ts +0 -70
  660. package/dist/nucleus/user-aside.js +0 -393
  661. package/dist/orchestrator/agent-spawn-governor.d.ts +0 -126
  662. package/dist/orchestrator/agent-spawn-governor.js +0 -558
  663. package/dist/orchestrator/enhanced-multi-agent-orchestrator.d.ts +0 -156
  664. package/dist/orchestrator/enhanced-multi-agent-orchestrator.js +0 -399
  665. package/dist/orchestrator/intelligent-commit-batcher.d.ts +0 -114
  666. package/dist/orchestrator/intelligent-commit-batcher.js +0 -344
  667. package/dist/orchestrator/multi-agent-orchestration-coordinator.d.ts +0 -126
  668. package/dist/orchestrator/multi-agent-orchestration-coordinator.js +0 -455
  669. package/dist/orchestrator/orchestrator.d.ts +0 -141
  670. package/dist/orchestrator/orchestrator.js +0 -648
  671. package/dist/orchestrator/self-direction-activation.d.ts +0 -108
  672. package/dist/orchestrator/self-direction-activation.js +0 -244
  673. package/dist/orchestrator/universal-librarian-consultation.d.ts +0 -98
  674. package/dist/orchestrator/universal-librarian-consultation.js +0 -216
  675. package/dist/orchestrator/universal-registry-bridge.d.ts +0 -84
  676. package/dist/orchestrator/universal-registry-bridge.js +0 -246
  677. package/dist/performance/performance-budget-enforcer.d.ts +0 -157
  678. package/dist/performance/performance-budget-enforcer.js +0 -433
  679. package/dist/performance/performance-regression-tester.d.ts +0 -107
  680. package/dist/performance/performance-regression-tester.js +0 -341
  681. package/dist/plugin/plugin-codex-context.d.ts +0 -18
  682. package/dist/plugin/plugin-codex-context.js +0 -87
  683. package/dist/plugin/plugin-helpers.d.ts +0 -23
  684. package/dist/plugin/plugin-helpers.js +0 -155
  685. package/dist/plugin/plugin-logger.d.ts +0 -8
  686. package/dist/plugin/plugin-logger.js +0 -46
  687. package/dist/plugin/plugin-modules.d.ts +0 -11
  688. package/dist/plugin/plugin-modules.js +0 -144
  689. package/dist/plugin/plugin-quality-gate.d.ts +0 -11
  690. package/dist/plugin/plugin-quality-gate.js +0 -88
  691. package/dist/plugin/plugin-types.d.ts +0 -93
  692. package/dist/plugin/plugin-types.js +0 -1
  693. package/dist/plugin/xray-codex-injection.d.ts +0 -39
  694. package/dist/plugin/xray-codex-injection.js +0 -399
  695. package/dist/postprocessor/PostProcessor.d.ts +0 -108
  696. package/dist/postprocessor/PostProcessor.js +0 -1053
  697. package/dist/postprocessor/analysis/CodeChangeAnalyzer.d.ts +0 -11
  698. package/dist/postprocessor/analysis/CodeChangeAnalyzer.js +0 -50
  699. package/dist/postprocessor/analysis/FailureAnalysisEngine.d.ts +0 -39
  700. package/dist/postprocessor/analysis/FailureAnalysisEngine.js +0 -245
  701. package/dist/postprocessor/autofix/AutoFixEngine.d.ts +0 -48
  702. package/dist/postprocessor/autofix/AutoFixEngine.js +0 -254
  703. package/dist/postprocessor/autofix/FixValidator.d.ts +0 -23
  704. package/dist/postprocessor/autofix/FixValidator.js +0 -56
  705. package/dist/postprocessor/config/ProcessorConfigLoader.d.ts +0 -44
  706. package/dist/postprocessor/config/ProcessorConfigLoader.js +0 -16
  707. package/dist/postprocessor/config.d.ts +0 -6
  708. package/dist/postprocessor/config.js +0 -65
  709. package/dist/postprocessor/escalation/EscalationEngine.d.ts +0 -154
  710. package/dist/postprocessor/escalation/EscalationEngine.js +0 -492
  711. package/dist/postprocessor/integration.d.ts +0 -156
  712. package/dist/postprocessor/integration.js +0 -194
  713. package/dist/postprocessor/metamorphosis/SelfProposalEngine.d.ts +0 -87
  714. package/dist/postprocessor/metamorphosis/SelfProposalEngine.js +0 -472
  715. package/dist/postprocessor/metamorphosis/index.d.ts +0 -2
  716. package/dist/postprocessor/metamorphosis/index.js +0 -1
  717. package/dist/postprocessor/monitoring/MonitoringEngine.d.ts +0 -40
  718. package/dist/postprocessor/monitoring/MonitoringEngine.js +0 -125
  719. package/dist/postprocessor/redeploy/RedeployCoordinator.d.ts +0 -91
  720. package/dist/postprocessor/redeploy/RedeployCoordinator.js +0 -342
  721. package/dist/postprocessor/redeploy/RetryHandler.d.ts +0 -49
  722. package/dist/postprocessor/redeploy/RetryHandler.js +0 -118
  723. package/dist/postprocessor/services/RegressionAnalysisService.d.ts +0 -39
  724. package/dist/postprocessor/services/RegressionAnalysisService.js +0 -130
  725. package/dist/postprocessor/success/SuccessHandler.d.ts +0 -57
  726. package/dist/postprocessor/success/SuccessHandler.js +0 -134
  727. package/dist/postprocessor/triggers/APITrigger.d.ts +0 -34
  728. package/dist/postprocessor/triggers/APITrigger.js +0 -114
  729. package/dist/postprocessor/triggers/GitHookTrigger.d.ts +0 -38
  730. package/dist/postprocessor/triggers/GitHookTrigger.js +0 -557
  731. package/dist/postprocessor/triggers/WebhookTrigger.d.ts +0 -46
  732. package/dist/postprocessor/triggers/WebhookTrigger.js +0 -210
  733. package/dist/postprocessor/types.d.ts +0 -227
  734. package/dist/postprocessor/types.js +0 -4
  735. package/dist/processors/doc-write-guard.d.ts +0 -6
  736. package/dist/processors/doc-write-guard.js +0 -46
  737. package/dist/processors/implementations/agents-md-validation-processor.d.ts +0 -62
  738. package/dist/processors/implementations/agents-md-validation-processor.js +0 -285
  739. package/dist/processors/implementations/async-pattern-processor.d.ts +0 -47
  740. package/dist/processors/implementations/async-pattern-processor.js +0 -157
  741. package/dist/processors/implementations/codex-compliance-processor.d.ts +0 -7
  742. package/dist/processors/implementations/codex-compliance-processor.js +0 -57
  743. package/dist/processors/implementations/commit-batcher-processor.d.ts +0 -13
  744. package/dist/processors/implementations/commit-batcher-processor.js +0 -71
  745. package/dist/processors/implementations/console-log-guard-processor.d.ts +0 -32
  746. package/dist/processors/implementations/console-log-guard-processor.js +0 -162
  747. package/dist/processors/implementations/coverage-analysis-processor.d.ts +0 -19
  748. package/dist/processors/implementations/coverage-analysis-processor.js +0 -137
  749. package/dist/processors/implementations/error-boundary-processor.d.ts +0 -7
  750. package/dist/processors/implementations/error-boundary-processor.js +0 -44
  751. package/dist/processors/implementations/inference-improvement-processor.d.ts +0 -36
  752. package/dist/processors/implementations/inference-improvement-processor.js +0 -262
  753. package/dist/processors/implementations/log-protection-processor.d.ts +0 -29
  754. package/dist/processors/implementations/log-protection-processor.js +0 -117
  755. package/dist/processors/implementations/nudge-processor.d.ts +0 -21
  756. package/dist/processors/implementations/nudge-processor.js +0 -129
  757. package/dist/processors/implementations/performance-budget-processor.d.ts +0 -49
  758. package/dist/processors/implementations/performance-budget-processor.js +0 -216
  759. package/dist/processors/implementations/postprocessor-chain-validator.d.ts +0 -45
  760. package/dist/processors/implementations/postprocessor-chain-validator.js +0 -148
  761. package/dist/processors/implementations/pre-validate-processor.d.ts +0 -7
  762. package/dist/processors/implementations/pre-validate-processor.js +0 -18
  763. package/dist/processors/implementations/publish-preflight-processor.d.ts +0 -37
  764. package/dist/processors/implementations/publish-preflight-processor.js +0 -240
  765. package/dist/processors/implementations/refactoring-logging-processor-wrapper.d.ts +0 -7
  766. package/dist/processors/implementations/refactoring-logging-processor-wrapper.js +0 -33
  767. package/dist/processors/implementations/refactoring-logging-processor.d.ts +0 -31
  768. package/dist/processors/implementations/refactoring-logging-processor.js +0 -96
  769. package/dist/processors/implementations/regression-testing-processor.d.ts +0 -20
  770. package/dist/processors/implementations/regression-testing-processor.js +0 -59
  771. package/dist/processors/implementations/session-capture-processor.d.ts +0 -14
  772. package/dist/processors/implementations/session-capture-processor.js +0 -37
  773. package/dist/processors/implementations/session-summary-processor.d.ts +0 -26
  774. package/dist/processors/implementations/session-summary-processor.js +0 -125
  775. package/dist/processors/implementations/spawn-governance-processor.d.ts +0 -57
  776. package/dist/processors/implementations/spawn-governance-processor.js +0 -218
  777. package/dist/processors/implementations/state-validation-processor.d.ts +0 -11
  778. package/dist/processors/implementations/state-validation-processor.js +0 -15
  779. package/dist/processors/implementations/storytelling-trigger-processor.d.ts +0 -40
  780. package/dist/processors/implementations/storytelling-trigger-processor.js +0 -563
  781. package/dist/processors/implementations/test-auto-creation-processor.d.ts +0 -16
  782. package/dist/processors/implementations/test-auto-creation-processor.js +0 -483
  783. package/dist/processors/implementations/test-execution-processor.d.ts +0 -11
  784. package/dist/processors/implementations/test-execution-processor.js +0 -132
  785. package/dist/processors/implementations/typescript-compilation-processor.d.ts +0 -37
  786. package/dist/processors/implementations/typescript-compilation-processor.js +0 -86
  787. package/dist/processors/implementations/version-compliance-processor.d.ts +0 -80
  788. package/dist/processors/implementations/version-compliance-processor.js +0 -222
  789. package/dist/processors/processor-interfaces.d.ts +0 -126
  790. package/dist/processors/processor-interfaces.js +0 -125
  791. package/dist/processors/processor-manager.d.ts +0 -80
  792. package/dist/processors/processor-manager.js +0 -826
  793. package/dist/processors/processor-types.d.ts +0 -189
  794. package/dist/processors/processor-types.js +0 -11
  795. package/dist/public/XrayService.d.ts +0 -17
  796. package/dist/public/XrayService.js +0 -40
  797. package/dist/public/about.html +0 -228
  798. package/dist/public/enterprise.html +0 -27
  799. package/dist/public/features.html +0 -102
  800. package/dist/public/index.d.ts +0 -4
  801. package/dist/public/index.html +0 -145
  802. package/dist/public/index.js +0 -2
  803. package/dist/reporting/framework-reporting-system.d.ts +0 -19
  804. package/dist/reporting/framework-reporting-system.js +0 -187
  805. package/dist/reporting/log-parser.d.ts +0 -10
  806. package/dist/reporting/log-parser.js +0 -281
  807. package/dist/reporting/metrics.d.ts +0 -15
  808. package/dist/reporting/metrics.js +0 -202
  809. package/dist/reporting/report-formatter.d.ts +0 -5
  810. package/dist/reporting/report-formatter.js +0 -146
  811. package/dist/reporting/types.d.ts +0 -102
  812. package/dist/reporting/types.js +0 -1
  813. package/dist/scripts/activate-kernel-pipeline.d.ts +0 -7
  814. package/dist/scripts/activate-kernel-pipeline.js +0 -101
  815. package/dist/scripts/integration.d.ts +0 -36
  816. package/dist/scripts/integration.js +0 -233
  817. package/dist/scripts/pre-command +0 -26
  818. package/dist/scripts/pre-command.mjs +0 -358
  819. package/dist/security/comprehensive-security-audit.d.ts +0 -157
  820. package/dist/security/comprehensive-security-audit.js +0 -1004
  821. package/dist/security/index.d.ts +0 -13
  822. package/dist/security/index.js +0 -13
  823. package/dist/security/prompt-security-validator.d.ts +0 -44
  824. package/dist/security/prompt-security-validator.js +0 -148
  825. package/dist/security/security-agent-coordinator.d.ts +0 -71
  826. package/dist/security/security-agent-coordinator.js +0 -203
  827. package/dist/security/security-auditor.d.ts +0 -55
  828. package/dist/security/security-auditor.js +0 -583
  829. package/dist/security/security-hardener.d.ts +0 -61
  830. package/dist/security/security-hardener.js +0 -169
  831. package/dist/security/security-hardening-system.d.ts +0 -238
  832. package/dist/security/security-hardening-system.js +0 -726
  833. package/dist/security/security-headers.d.ts +0 -63
  834. package/dist/security/security-headers.js +0 -117
  835. package/dist/security/security-orchestration-layer.d.ts +0 -118
  836. package/dist/security/security-orchestration-layer.js +0 -495
  837. package/dist/security/security-scanner.d.ts +0 -119
  838. package/dist/security/security-scanner.js +0 -429
  839. package/dist/services/inference-tuner.d.ts +0 -76
  840. package/dist/services/inference-tuner.js +0 -300
  841. package/dist/session/index.d.ts +0 -3
  842. package/dist/session/index.js +0 -3
  843. package/dist/session/session-cleanup-manager.d.ts +0 -117
  844. package/dist/session/session-cleanup-manager.js +0 -365
  845. package/dist/session/session-monitor.d.ts +0 -132
  846. package/dist/session/session-monitor.js +0 -502
  847. package/dist/session/session-state-manager.d.ts +0 -144
  848. package/dist/session/session-state-manager.js +0 -521
  849. package/dist/skills/api-design/SKILL.md +0 -37
  850. package/dist/skills/architect-tools/SKILL.md +0 -37
  851. package/dist/skills/architecture-patterns/SKILL.md +0 -37
  852. package/dist/skills/auto-format/SKILL.md +0 -37
  853. package/dist/skills/backend-engineer/SKILL.md +0 -49
  854. package/dist/skills/boot-orchestrator/SKILL.md +0 -33
  855. package/dist/skills/bug-triage/SKILL.md +0 -43
  856. package/dist/skills/code-analyzer/SKILL.md +0 -45
  857. package/dist/skills/code-review/SKILL.md +0 -52
  858. package/dist/skills/content-creator/SKILL.md +0 -38
  859. package/dist/skills/database-engineer/SKILL.md +0 -46
  860. package/dist/skills/devops-engineer/SKILL.md +0 -49
  861. package/dist/skills/enforcer/SKILL.md +0 -37
  862. package/dist/skills/framework-compliance-audit/SKILL.md +0 -37
  863. package/dist/skills/frontend-engineer/SKILL.md +0 -49
  864. package/dist/skills/frontend-ui-ux-engineer/SKILL.md +0 -41
  865. package/dist/skills/git-workflow/SKILL.md +0 -37
  866. package/dist/skills/growth-strategist/SKILL.md +0 -48
  867. package/dist/skills/hermes-agent/SKILL.md +0 -212
  868. package/dist/skills/inference-improve/SKILL.md +0 -97
  869. package/dist/skills/lint/SKILL.md +0 -37
  870. package/dist/skills/log-monitor/SKILL.md +0 -44
  871. package/dist/skills/mobile-developer/SKILL.md +0 -42
  872. package/dist/skills/model-health-check/SKILL.md +0 -37
  873. package/dist/skills/multimodal-looker/SKILL.md +0 -45
  874. package/dist/skills/orchestrator/SKILL.md +0 -61
  875. package/dist/skills/performance-analysis/SKILL.md +0 -37
  876. package/dist/skills/performance-engineer/SKILL.md +0 -41
  877. package/dist/skills/performance-optimization/SKILL.md +0 -37
  878. package/dist/skills/processor-pipeline/SKILL.md +0 -37
  879. package/dist/skills/project-analysis/SKILL.md +0 -42
  880. package/dist/skills/refactoring-strategies/SKILL.md +0 -37
  881. package/dist/skills/registry.json +0 -65
  882. package/dist/skills/researcher/SKILL.md +0 -50
  883. package/dist/skills/security-audit/SKILL.md +0 -48
  884. package/dist/skills/security-scan/SKILL.md +0 -37
  885. package/dist/skills/seo-consultant/SKILL.md +0 -43
  886. package/dist/skills/session-management/SKILL.md +0 -36
  887. package/dist/skills/state-manager/SKILL.md +0 -37
  888. package/dist/skills/storyteller/SKILL.md +0 -130
  889. package/dist/skills/strategist/SKILL.md +0 -44
  890. package/dist/skills/tech-writer/SKILL.md +0 -37
  891. package/dist/skills/testing-best-practices/SKILL.md +0 -37
  892. package/dist/skills/testing-strategy/SKILL.md +0 -54
  893. package/dist/skills/ui-ux-design/SKILL.md +0 -603
  894. package/dist/skills/xray-orchestrator/SKILL.md +0 -141
  895. package/dist/skills/xray-orchestrator/index.d.ts +0 -12
  896. package/dist/skills/xray-orchestrator/index.js +0 -223
  897. package/dist/state/context-providers.d.ts +0 -4
  898. package/dist/state/context-providers.js +0 -1
  899. package/dist/state/index.d.ts +0 -4
  900. package/dist/state/index.js +0 -7
  901. package/dist/state/state-manager.d.ts +0 -41
  902. package/dist/state/state-manager.js +0 -207
  903. package/dist/state/state-types.d.ts +0 -5
  904. package/dist/state/state-types.js +0 -1
  905. package/dist/testing/memory-regression-suite.d.ts +0 -105
  906. package/dist/testing/memory-regression-suite.js +0 -258
  907. package/dist/tools/assess-complexity-tool.d.ts +0 -28
  908. package/dist/tools/assess-complexity-tool.js +0 -44
  909. package/dist/tools/query-routing-tool.d.ts +0 -17
  910. package/dist/tools/query-routing-tool.js +0 -59
  911. package/dist/types/metamorphosis.d.ts +0 -21
  912. package/dist/types/metamorphosis.js +0 -6
  913. package/dist/utils/batch-operations.d.ts +0 -25
  914. package/dist/utils/batch-operations.js +0 -292
  915. package/dist/utils/codex-parser.d.ts +0 -60
  916. package/dist/utils/codex-parser.js +0 -444
  917. package/dist/utils/command-runner.d.ts +0 -32
  918. package/dist/utils/command-runner.js +0 -96
  919. package/dist/utils/import-resolver.d.ts +0 -54
  920. package/dist/utils/import-resolver.js +0 -189
  921. package/dist/utils/language-detector.d.ts +0 -43
  922. package/dist/utils/language-detector.js +0 -382
  923. package/dist/utils/path-resolver.d.ts +0 -48
  924. package/dist/utils/path-resolver.js +0 -112
  925. package/dist/utils/shutdown-handler.d.ts +0 -26
  926. package/dist/utils/shutdown-handler.js +0 -74
  927. package/dist/utils/task-graph.d.ts +0 -29
  928. package/dist/utils/task-graph.js +0 -106
  929. package/dist/utils/test-template-generator.d.ts +0 -25
  930. package/dist/utils/test-template-generator.js +0 -178
  931. package/dist/utils/token-manager.d.ts +0 -48
  932. package/dist/utils/token-manager.js +0 -163
  933. package/dist/validation/agent-config-validator.d.ts +0 -110
  934. package/dist/validation/agent-config-validator.js +0 -280
  935. package/dist/validation/estimation-validator.d.ts +0 -61
  936. package/dist/validation/estimation-validator.js +0 -241
  937. package/dist/validation/orchestration-flow-validator.d.ts +0 -87
  938. package/dist/validation/orchestration-flow-validator.js +0 -606
  939. package/dist/validation/report-content-validator.d.ts +0 -42
  940. package/dist/validation/report-content-validator.js +0 -218
@@ -1,1537 +0,0 @@
1
- /**
2
- * xray Performance Optimization MCP Server
3
- *
4
- * Knowledge skill for performance analysis, optimization recommendations,
5
- * profiling, benchmarking, memory analysis, and Core Web Vitals measurement
6
- */
7
- import { frameworkLogger, generateJobId } from "../../core/framework-logger.js";
8
- import fs from "fs";
9
- import path from "path";
10
- import { XrayKnowledgeSkillBase } from "../shared/knowledge-skill-base.js";
11
- class XrayPerformanceOptimizationServer extends XrayKnowledgeSkillBase {
12
- constructor() {
13
- super("performance-optimization", "3.1.0");
14
- this.tools = [
15
- {
16
- name: "profile-application",
17
- description: "Run comprehensive performance profiling on the codebase to identify bottlenecks and hot paths",
18
- inputSchema: {
19
- type: "object",
20
- properties: {
21
- projectRoot: { type: "string", description: "Path to the project root directory" },
22
- scope: {
23
- type: "string",
24
- enum: ["full", "runtime", "build", "memory"],
25
- default: "full",
26
- description: "Scope of profiling analysis"
27
- },
28
- duration: { type: "number", default: 30, description: "Profiling duration in seconds" },
29
- includeHotPaths: { type: "boolean", default: true, description: "Include hot path analysis" }
30
- },
31
- required: ["projectRoot"]
32
- }
33
- },
34
- {
35
- name: "analyze-memory",
36
- description: "Perform memory leak detection and heap analysis to identify memory issues",
37
- inputSchema: {
38
- type: "object",
39
- properties: {
40
- projectRoot: { type: "string", description: "Path to the project root directory" },
41
- heapSnapshot: { type: "boolean", default: true, description: "Generate heap snapshot analysis" },
42
- gcAnalysis: { type: "boolean", default: true, description: "Analyze garbage collection patterns" },
43
- leakDetection: { type: "boolean", default: true, description: "Detect potential memory leaks" }
44
- },
45
- required: ["projectRoot"]
46
- }
47
- },
48
- {
49
- name: "benchmark-code",
50
- description: "Execute and compare benchmark results for code performance measurement",
51
- inputSchema: {
52
- type: "object",
53
- properties: {
54
- projectRoot: { type: "string", description: "Path to the project root directory" },
55
- testFile: { type: "string", description: "Specific benchmark test file to run" },
56
- iterations: { type: "number", default: 100, description: "Number of benchmark iterations" },
57
- warmupRuns: { type: "number", default: 10, description: "Number of warmup runs" },
58
- compareBaseline: { type: "boolean", default: false, description: "Compare results against baseline" }
59
- },
60
- required: ["projectRoot"]
61
- }
62
- },
63
- {
64
- name: "suggest-optimizations",
65
- description: "Generate specific, actionable optimization suggestions based on code analysis",
66
- inputSchema: {
67
- type: "object",
68
- properties: {
69
- projectRoot: { type: "string", description: "Path to the project root directory" },
70
- focus: {
71
- type: "string",
72
- enum: ["cpu", "memory", "network", "io", "all"],
73
- default: "all",
74
- description: "Focus area for optimizations"
75
- },
76
- threshold: { type: "number", default: 100, description: "Performance threshold in ms" }
77
- },
78
- required: ["projectRoot"]
79
- }
80
- },
81
- {
82
- name: "measure-core-web-vitals",
83
- description: "Analyze Core Web Vitals metrics (LCP, INP, CLS) for web application performance",
84
- inputSchema: {
85
- type: "object",
86
- properties: {
87
- projectRoot: { type: "string", description: "Path to the project root directory" },
88
- analyzeBundle: { type: "boolean", default: true, description: "Analyze JavaScript bundle" },
89
- checkAccessibility: { type: "boolean", default: true, description: "Check accessibility factors affecting CLS" },
90
- measureLCP: { type: "boolean", default: true, description: "Measure Largest Contentful Paint" },
91
- measureINP: { type: "boolean", default: true, description: "Measure Interaction to Next Paint" },
92
- measureCLS: { type: "boolean", default: true, description: "Measure Cumulative Layout Shift" }
93
- },
94
- required: ["projectRoot"]
95
- }
96
- }
97
- ];
98
- this.handlers = {
99
- "profile-application": async (args) => this.handleProfileApplication(args),
100
- "analyze-memory": async (args) => this.handleAnalyzeMemory(args),
101
- "benchmark-code": async (args) => this.handleBenchmarkCode(args),
102
- "suggest-optimizations": async (args) => this.handleSuggestOptimizations(args),
103
- "measure-core-web-vitals": async (args) => this.handleMeasureCoreWebVitals(args),
104
- };
105
- this.setupToolHandlers();
106
- }
107
- async handleProfileApplication(args) {
108
- const { projectRoot, scope = "full", duration = 30, includeHotPaths = true } = args;
109
- const jobId = generateJobId("mcp-perf-profiling");
110
- await frameworkLogger.log("mcp/performance-optimization", "profiling-started", "info", { projectRoot, scope }, undefined, jobId);
111
- try {
112
- const result = await this.performProfiling(projectRoot, scope, duration, includeHotPaths);
113
- const responseText = this.formatProfilingResult(result);
114
- return {
115
- content: [{ type: "text", text: responseText }],
116
- data: result
117
- };
118
- }
119
- catch (error) {
120
- return {
121
- content: [{
122
- type: "text",
123
- text: `Profiling failed: ${error instanceof Error ? error.message : String(error)}`
124
- }]
125
- };
126
- }
127
- }
128
- async performProfiling(projectRoot, scope, duration, includeHotPaths) {
129
- const result = {
130
- hotPaths: [],
131
- functionCallCounts: {},
132
- memoryFootprint: 0,
133
- bottlenecks: [],
134
- recommendations: [],
135
- cpuProfile: {},
136
- metrics: {
137
- totalFunctions: 0,
138
- hotFunctions: 0,
139
- avgExecutionTime: 0,
140
- peakMemory: 0,
141
- gcPauses: 0
142
- }
143
- };
144
- const memUsage = process.memoryUsage();
145
- result.memoryFootprint = Math.round(memUsage.heapUsed / 1024 / 1024);
146
- if (fs.existsSync(path.join(projectRoot, "src"))) {
147
- const codeFiles = this.findCodeFiles(projectRoot);
148
- const analysis = this.analyzeCodeForPerformance(codeFiles, scope);
149
- result.hotPaths = analysis.hotPaths;
150
- result.functionCallCounts = analysis.functionCounts;
151
- result.bottlenecks = analysis.bottlenecks;
152
- result.recommendations = analysis.recommendations;
153
- result.metrics.totalFunctions = analysis.totalFunctions;
154
- result.metrics.hotFunctions = analysis.hotFunctions;
155
- result.metrics.avgExecutionTime = analysis.avgExecutionTime;
156
- result.metrics.peakMemory = analysis.peakMemory;
157
- result.metrics.gcPauses = analysis.gcPauses;
158
- if (includeHotPaths) {
159
- result.cpuProfile = {
160
- topFunctions: this.getTopFunctions(analysis),
161
- callGraph: this.generateCallGraph(analysis),
162
- criticalPath: this.identifyCriticalPath(analysis)
163
- };
164
- }
165
- }
166
- return result;
167
- }
168
- analyzeCodeForPerformance(files, scope) {
169
- const hotPaths = [];
170
- const functionCounts = {};
171
- const bottlenecks = [];
172
- const recommendations = [];
173
- let totalFunctions = 0;
174
- let hotFunctions = 0;
175
- for (const file of files) {
176
- try {
177
- const content = fs.readFileSync(file, "utf8");
178
- const analysis = this.analyzeFilePerformance(content, file, scope);
179
- if (analysis.functions.length > 0) {
180
- totalFunctions += analysis.functions.length;
181
- hotFunctions += analysis.hotCount;
182
- analysis.functions.forEach((fn) => {
183
- functionCounts[`${file}:${fn.name}`] = fn.estimatedCalls;
184
- });
185
- }
186
- hotPaths.push(...analysis.hotPaths);
187
- bottlenecks.push(...analysis.bottlenecks);
188
- recommendations.push(...analysis.recommendations);
189
- }
190
- catch {
191
- // Skip files that can't be read
192
- }
193
- }
194
- const avgExecutionTime = this.calculateAverageExecutionTime(functionCounts);
195
- return {
196
- hotPaths: [...new Set(hotPaths)],
197
- functionCounts,
198
- bottlenecks: [...new Set(bottlenecks)],
199
- recommendations: [...new Set(recommendations)],
200
- totalFunctions,
201
- hotFunctions,
202
- avgExecutionTime,
203
- peakMemory: Math.round(process.memoryUsage().heapUsed / 1024 / 1024),
204
- gcPauses: this.estimateGCPauses()
205
- };
206
- }
207
- analyzeFilePerformance(content, filePath, scope) {
208
- const functions = [];
209
- const hotPaths = [];
210
- const bottlenecks = [];
211
- const recommendations = [];
212
- let hotCount = 0;
213
- const functionRegex = /(?:function\s+(\w+)|(?:const|let|var)\s+(\w+)\s*=\s*(?:async\s*)?\(|(\w+)\s*\([^)]*\)\s*\{)/g;
214
- let match;
215
- while ((match = functionRegex.exec(content)) !== null) {
216
- const fnName = match[1] || match[2] || match[3];
217
- if (fnName && !fnName.startsWith("_")) {
218
- const estimatedCalls = this.estimateFunctionCalls(content, fnName);
219
- functions.push({ name: fnName, estimatedCalls });
220
- if (estimatedCalls > 1000) {
221
- hotCount++;
222
- hotPaths.push(`${filePath}:${fnName}`);
223
- const complexity = this.calculateCyclomaticComplexity(content, fnName);
224
- if (complexity > 15) {
225
- bottlenecks.push(`High complexity function: ${fnName} (complexity: ${complexity})`);
226
- recommendations.push(`Consider simplifying ${fnName} - complexity ${complexity} exceeds recommended threshold`);
227
- }
228
- }
229
- }
230
- }
231
- if (scope === "memory" || scope === "full") {
232
- const closureMatches = content.match(/=>\s*\{[^}]*\}/g);
233
- if (closureMatches && closureMatches.length > 10) {
234
- recommendations.push(`${filePath}: High closure usage (${closureMatches.length}) may impact memory - consider refactoring`);
235
- }
236
- const nestedFuncMatches = content.match(/function\s+\w+[^}]*\{[^}]*function\s+/g);
237
- if (nestedFuncMatches) {
238
- bottlenecks.push(`${filePath}: Nested function detected - may cause memory leaks`);
239
- recommendations.push(`Consider extracting nested functions in ${filePath}`);
240
- }
241
- }
242
- return { functions, hotPaths, bottlenecks, recommendations, hotCount };
243
- }
244
- estimateFunctionCalls(content, fnName) {
245
- const callRegex = new RegExp(`${fnName}\\s*\\(`, "g");
246
- const calls = content.match(callRegex);
247
- return calls ? calls.length : 0;
248
- }
249
- calculateCyclomaticComplexity(content, fnName) {
250
- const fnStart = content.indexOf(`function ${fnName}`);
251
- if (fnStart === -1)
252
- return 1;
253
- let braceCount = 0;
254
- let complexity = 1;
255
- let inFunction = false;
256
- for (let i = fnStart; i < content.length && braceCount >= 0; i++) {
257
- const char = content[i];
258
- if (char === "{") {
259
- braceCount++;
260
- inFunction = true;
261
- }
262
- else if (char === "}") {
263
- braceCount--;
264
- }
265
- if (inFunction && braceCount > 0) {
266
- if (char === "\n" && (content[i + 1] === "if" || content[i + 1] === "else" || content[i + 1] === "for" || content[i + 1] === "while" || content[i + 1] === "case")) {
267
- complexity++;
268
- }
269
- }
270
- }
271
- return complexity;
272
- }
273
- calculateAverageExecutionTime(functionCounts) {
274
- const counts = Object.values(functionCounts);
275
- if (counts.length === 0)
276
- return 0;
277
- const avg = counts.reduce((sum, c) => sum + c, 0) / counts.length;
278
- return Math.round(avg * 0.1);
279
- }
280
- estimateGCPauses() {
281
- const memUsage = process.memoryUsage();
282
- const heapUsedMB = memUsage.heapUsed / 1024 / 1024;
283
- if (heapUsedMB > 500)
284
- return 15;
285
- if (heapUsedMB > 200)
286
- return 8;
287
- if (heapUsedMB > 100)
288
- return 4;
289
- return 2;
290
- }
291
- getTopFunctions(analysis) {
292
- return Object.entries(analysis.functionCounts)
293
- .sort(([, a], [, b]) => b - a)
294
- .slice(0, 10)
295
- .map(([name, calls]) => ({ name, calls }));
296
- }
297
- generateCallGraph(analysis) {
298
- const graph = {};
299
- for (const [fullName] of Object.entries(analysis.functionCounts)) {
300
- const parts = fullName.split(":");
301
- const file = parts[0] ?? "unknown";
302
- const fnName = parts[1] ?? fullName;
303
- if (!graph[file])
304
- graph[file] = [];
305
- graph[file].push(fnName);
306
- }
307
- return graph;
308
- }
309
- identifyCriticalPath(analysis) {
310
- return analysis.hotPaths.slice(0, 5);
311
- }
312
- formatProfilingResult(result) {
313
- return `📊 Performance Profiling Results
314
-
315
- **PROFILING METRICS**
316
- - Total Functions Analyzed: ${result.metrics.totalFunctions}
317
- - Hot Functions (>1000 calls): ${result.metrics.hotFunctions}
318
- - Average Execution Time: ${result.metrics.avgExecutionTime}ms
319
- - Peak Memory: ${result.metrics.peakMemory}MB
320
- - GC Pauses: ${result.metrics.gcPauses}
321
-
322
- **HOT PATHS** (${result.hotPaths.length} identified)
323
- ${result.hotPaths.slice(0, 10).map(p => `• 🔥 ${p}`).join("\n") || "None detected"}
324
-
325
- **TOP FUNCTIONS BY CALL COUNT**
326
- ${Object.entries(result.functionCallCounts)
327
- .sort(([, a], [, b]) => b - a)
328
- .slice(0, 5)
329
- .map(([name, count]) => `• ${name}: ${count.toLocaleString()} calls`)
330
- .join("\n") || "None"}
331
-
332
- **BOTTLENECKS** (${result.bottlenecks.length} detected)
333
- ${result.bottlenecks.slice(0, 5).map(b => `• 🚧 ${b}`).join("\n") || "None detected"}
334
-
335
- **RECOMMENDATIONS**
336
- ${result.recommendations.slice(0, 5).map((r, i) => `${i + 1}. ${r}`).join("\n") || "No specific recommendations"}
337
-
338
- **Status:** ${result.metrics.hotFunctions > 10 ? "❌ HIGH OPTIMIZATION NEEDED" : result.metrics.hotFunctions > 5 ? "⚠️ MODERATE OPTIMIZATION NEEDED" : "✅ PERFORMANCE ACCEPTABLE"}`;
339
- }
340
- async handleAnalyzeMemory(args) {
341
- const { projectRoot, heapSnapshot = true, gcAnalysis = true, leakDetection = true } = args;
342
- const jobId = generateJobId("mcp-perf-memory");
343
- await frameworkLogger.log("mcp/performance-optimization", "memory-analysis-started", "info", { projectRoot }, undefined, jobId);
344
- try {
345
- const result = await this.performMemoryAnalysis(projectRoot, heapSnapshot, gcAnalysis, leakDetection);
346
- const responseText = this.formatMemoryAnalysis(result);
347
- return {
348
- content: [{ type: "text", text: responseText }],
349
- data: result
350
- };
351
- }
352
- catch (error) {
353
- return {
354
- content: [{
355
- type: "text",
356
- text: `Memory analysis failed: ${error instanceof Error ? error.message : String(error)}`
357
- }]
358
- };
359
- }
360
- }
361
- async performMemoryAnalysis(projectRoot, heapSnapshot, gcAnalysis, leakDetection) {
362
- const memUsage = process.memoryUsage();
363
- const result = {
364
- heapUsed: Math.round(memUsage.heapUsed / 1024 / 1024),
365
- heapTotal: Math.round(memUsage.heapTotal / 1024 / 1024),
366
- external: Math.round(memUsage.external / 1024 / 1024),
367
- rss: Math.round(memUsage.rss / 1024 / 1024),
368
- memoryLeaks: [],
369
- gcEvents: [],
370
- recommendations: [],
371
- heapBreakdown: {
372
- strings: 0,
373
- arrays: 0,
374
- objects: 0,
375
- functions: 0,
376
- closures: 0,
377
- domNodes: 0
378
- },
379
- allocationsByType: {
380
- strings: 0,
381
- arrays: 0,
382
- objects: 0,
383
- functions: 0,
384
- buffers: 0,
385
- closures: 0,
386
- promises: 0,
387
- eventListeners: 0
388
- }
389
- };
390
- if (fs.existsSync(path.join(projectRoot, "src"))) {
391
- const codeFiles = this.findCodeFiles(projectRoot);
392
- if (heapSnapshot) {
393
- result.heapBreakdown = this.estimateHeapBreakdown(codeFiles);
394
- result.allocationsByType = this.estimateAllocationsByType(codeFiles);
395
- }
396
- if (gcAnalysis) {
397
- result.gcEvents = this.analyzeGCActivity(result.heapUsed);
398
- }
399
- if (leakDetection) {
400
- const leaks = this.detectMemoryLeaks(codeFiles);
401
- result.memoryLeaks = leaks.detected;
402
- result.recommendations = leaks.recommendations;
403
- }
404
- }
405
- this.addMemoryRecommendations(result);
406
- return result;
407
- }
408
- estimateHeapBreakdown(files) {
409
- const breakdown = {
410
- strings: 0,
411
- arrays: 0,
412
- objects: 0,
413
- functions: 0,
414
- closures: 0,
415
- domNodes: 0
416
- };
417
- for (const file of files) {
418
- try {
419
- const content = fs.readFileSync(file, "utf8");
420
- const stringMatches = content.match(/"[^"]{10,}"|'[^']{10,}'/g);
421
- breakdown.strings += stringMatches ? stringMatches.length * 50 : 0;
422
- const arrayMatches = content.match(/\[[\s\S]*?\]/g);
423
- breakdown.arrays += arrayMatches ? arrayMatches.length * 100 : 0;
424
- const objectMatches = content.match(/\{[\s\S]*?\}/g);
425
- breakdown.objects += objectMatches ? objectMatches.length * 150 : 0;
426
- const functionMatches = content.match(/function\s+\w+|const\s+\w+\s*=\s*(?:async\s*)?\(/g);
427
- breakdown.functions += functionMatches ? functionMatches.length * 200 : 0;
428
- const closureMatches = content.match(/\([^)]*\)\s*=>/g);
429
- breakdown.closures += closureMatches ? closureMatches.length * 150 : 0;
430
- }
431
- catch {
432
- // Skip unreadable files
433
- }
434
- }
435
- return breakdown;
436
- }
437
- estimateAllocationsByType(files) {
438
- const allocations = {
439
- strings: 0,
440
- arrays: 0,
441
- objects: 0,
442
- functions: 0,
443
- buffers: 0,
444
- closures: 0,
445
- promises: 0,
446
- eventListeners: 0
447
- };
448
- for (const file of files) {
449
- try {
450
- const content = fs.readFileSync(file, "utf8");
451
- allocations.strings += (content.match(/"[^"]*"|'[^']*'/g) || []).length;
452
- allocations.arrays += (content.match(/\[[\s\S]*?\]/g) || []).length;
453
- allocations.objects += (content.match(/\{[\s\S]*?\}/g) || []).length;
454
- allocations.functions += (content.match(/function\s+\w+|const\s+\w+\s*=\s*(?:async\s*)?\(/g) || []).length;
455
- allocations.closures += (content.match(/\([^)]*\)\s*=>/g) || []).length;
456
- allocations.promises += (content.match(/\bnew\s+Promise\b|\bPromise\.\w+\b|\basync\s+/g) || []).length;
457
- allocations.eventListeners += (content.match(/\.addEventListener\(/g) || []).length;
458
- allocations.buffers += (content.match(/\.push\(|\.concat\(|\.splice\(/g) || []).length;
459
- allocations.eventListeners += (content.match(/\.addEventListener\(/g) || []).length;
460
- allocations.buffers += (content.match(/\.push\(|\.concat\(|\.splice\(/g) || []).length;
461
- }
462
- catch {
463
- // Skip unreadable files
464
- }
465
- }
466
- return allocations;
467
- }
468
- analyzeGCActivity(heapUsedMB) {
469
- const events = [];
470
- const eventCount = Math.floor(heapUsedMB / 50);
471
- for (let i = 0; i < Math.min(eventCount, 10); i++) {
472
- events.push({
473
- type: heapUsedMB > 200 ? (i % 3 === 0 ? "major" : "minor") : "minor",
474
- duration: Math.round(Math.random() * 10 + 2),
475
- timestamp: Date.now() - (eventCount - i) * 60000,
476
- reclaimedBytes: Math.round(Math.random() * 1024 * 1024 * 10)
477
- });
478
- }
479
- return events;
480
- }
481
- detectMemoryLeaks(files) {
482
- const detected = [];
483
- const recommendations = [];
484
- for (const file of files) {
485
- try {
486
- const content = fs.readFileSync(file, "utf8");
487
- const eventListenersWithoutRemoval = this.checkEventListenerLeaks(content, file);
488
- detected.push(...eventListenersWithoutRemoval);
489
- const globalVariableLeaks = this.checkGlobalVariableLeaks(content, file);
490
- detected.push(...globalVariableLeaks);
491
- const closureLeaks = this.checkClosureLeaks(content, file);
492
- detected.push(...closureLeaks);
493
- const cacheLeaks = this.checkCacheLeaks(content, file);
494
- detected.push(...cacheLeaks);
495
- const timerLeaks = this.checkTimerLeaks(content, file);
496
- detected.push(...timerLeaks);
497
- }
498
- catch {
499
- // Skip unreadable files
500
- }
501
- }
502
- return { detected, recommendations: [...new Set(recommendations)] };
503
- }
504
- checkEventListenerLeaks(content, file) {
505
- const leaks = [];
506
- const addListeners = content.match(/\.addEventListener\(/g) || [];
507
- const removeListeners = content.match(/\.removeEventListener\(/g) || [];
508
- if (addListeners.length > removeListeners.length) {
509
- const diff = addListeners.length - removeListeners.length;
510
- leaks.push({
511
- location: file,
512
- severity: diff > 5 ? "high" : "medium",
513
- suspectedCause: `${diff} event listeners added without removal`,
514
- estimatedImpact: `${diff * 2}KB - ${diff * 10}KB potential leak`,
515
- fixSuggestion: "Ensure all addEventListener calls have corresponding removeEventListener in cleanup code"
516
- });
517
- }
518
- return leaks;
519
- }
520
- checkGlobalVariableLeaks(content, file) {
521
- const leaks = [];
522
- const windowAssignments = content.match(/window\.\w+\s*=/g) || [];
523
- const globalVarDeclarations = content.match(/^(?:var|let|const)\s+\w+\s*=/gm) || [];
524
- if (globalVarDeclarations.length > 20) {
525
- leaks.push({
526
- location: file,
527
- severity: "medium",
528
- suspectedCause: "Many global variable declarations detected",
529
- estimatedImpact: "Variable scope not properly managed",
530
- fixSuggestion: "Consider using module pattern or IIFE to scope variables"
531
- });
532
- }
533
- return leaks;
534
- }
535
- checkClosureLeaks(content, file) {
536
- const leaks = [];
537
- const closureMatches = content.match(/\([^)]*\)\s*=>/g) || [];
538
- const largeClosures = content.match(/\([^)]*\{.{500,}\}\s*\)/g) || [];
539
- if (largeClosures && largeClosures.length > 0) {
540
- leaks.push({
541
- location: file,
542
- severity: "medium",
543
- suspectedCause: `${largeClosures.length} large closures that may capture unnecessary variables`,
544
- estimatedImpact: "Memory retained until closure is garbage collected",
545
- fixSuggestion: "Use explicit parameter passing instead of capturing large objects in closure scope"
546
- });
547
- }
548
- if (closureMatches.length > 50) {
549
- leaks.push({
550
- location: file,
551
- severity: "low",
552
- suspectedCause: `${closureMatches.length} arrow functions detected`,
553
- estimatedImpact: "Each closure retains references to outer scope",
554
- fixSuggestion: "Consider memoization or function references for frequently created closures"
555
- });
556
- }
557
- return leaks;
558
- }
559
- checkCacheLeaks(content, file) {
560
- const leaks = [];
561
- const cacheCreations = content.match(/new\s+Map\(\)|new\s+Set\(\)|new\s+WeakMap\(\)|new\s+WeakSet\(\)/g) || [];
562
- const cacheClears = content.match(/\.clear\(\)/g) || [];
563
- if (cacheCreations.length > cacheClears.length + 2) {
564
- leaks.push({
565
- location: file,
566
- severity: "medium",
567
- suspectedCause: "Cache structures created without regular cleanup",
568
- estimatedImpact: "Unbounded cache growth over time",
569
- fixSuggestion: "Implement cache size limits and TTL-based eviction"
570
- });
571
- }
572
- return leaks;
573
- }
574
- checkTimerLeaks(content, file) {
575
- const leaks = [];
576
- const setTimeoutCalls = content.match(/setTimeout\(/g) || [];
577
- const clearTimeoutCalls = content.match(/clearTimeout\(/g) || [];
578
- const setIntervalCalls = content.match(/setInterval\(/g) || [];
579
- const clearIntervalCalls = content.match(/clearInterval\(/g) || [];
580
- if (setIntervalCalls.length > clearIntervalCalls.length) {
581
- leaks.push({
582
- location: file,
583
- severity: "high",
584
- suspectedCause: `${setIntervalCalls.length - clearIntervalCalls.length} intervals not properly cleared`,
585
- estimatedImpact: "Continuous memory growth until interval is cleared",
586
- fixSuggestion: "Ensure all setInterval calls are cleared in component unmount or cleanup"
587
- });
588
- }
589
- if (setTimeoutCalls.length > 10 && setTimeoutCalls.length > clearTimeoutCalls.length * 2) {
590
- leaks.push({
591
- location: file,
592
- severity: "medium",
593
- suspectedCause: "Many setTimeout calls without corresponding clearTimeout",
594
- estimatedImpact: "Pending timers may prevent garbage collection",
595
- fixSuggestion: "Track and clear timers when no longer needed"
596
- });
597
- }
598
- return leaks;
599
- }
600
- addMemoryRecommendations(result) {
601
- const memUsagePercent = (result.heapUsed / result.heapTotal) * 100;
602
- if (memUsagePercent > 80) {
603
- result.recommendations.push("High heap usage detected - consider implementing object pooling or lazy loading");
604
- }
605
- if (result.memoryLeaks.length > 0) {
606
- result.recommendations.push(`${result.memoryLeaks.length} potential memory leaks detected - review and fix`);
607
- }
608
- const highGcCount = result.gcEvents.filter(e => e.type === "major" || e.type === "full").length;
609
- if (highGcCount > 3) {
610
- result.recommendations.push("Frequent major GC events - consider optimizing memory allocations");
611
- }
612
- const largestAllocation = Object.entries(result.allocationsByType)
613
- .sort(([, a], [, b]) => b - a)[0];
614
- if (largestAllocation) {
615
- result.recommendations.push(`Most allocations: ${largestAllocation[0]} (${largestAllocation[1]}) - optimize if possible`);
616
- }
617
- }
618
- formatMemoryAnalysis(result) {
619
- return `🧠 Memory Analysis Results
620
-
621
- **HEAP USAGE**
622
- - Heap Used: ${result.heapUsed}MB
623
- - Heap Total: ${result.heapTotal}MB
624
- - External: ${result.external}MB
625
- - RSS: ${result.rss}MB
626
- - Usage: ${((result.heapUsed / result.heapTotal) * 100).toFixed(1)}%
627
-
628
- **HEAP BREAKDOWN**
629
- - Strings: ${(result.heapBreakdown.strings / 1024).toFixed(1)}KB
630
- - Arrays: ${(result.heapBreakdown.arrays / 1024).toFixed(1)}KB
631
- - Objects: ${(result.heapBreakdown.objects / 1024).toFixed(1)}KB
632
- - Functions: ${(result.heapBreakdown.functions / 1024).toFixed(1)}KB
633
- - Closures: ${(result.heapBreakdown.closures / 1024).toFixed(1)}KB
634
-
635
- **MEMORY LEAKS** (${result.memoryLeaks.length} detected)
636
- ${result.memoryLeaks.slice(0, 5).map(leak => `• ${leak.severity === "critical" || leak.severity === "high" ? "🔴" : "🟡"} ${leak.location}\n Cause: ${leak.suspectedCause}\n Fix: ${leak.fixSuggestion}`).join("\n\n") || "None detected"}
637
-
638
- **GC ACTIVITY** (${result.gcEvents.length} events)
639
- - Minor GC: ${result.gcEvents.filter(e => e.type === "minor").length}
640
- - Major GC: ${result.gcEvents.filter(e => e.type === "major").length}
641
- - Full GC: ${result.gcEvents.filter(e => e.type === "full").length}
642
-
643
- **ALLOCATIONS BY TYPE**
644
- ${Object.entries(result.allocationsByType)
645
- .sort(([, a], [, b]) => b - a)
646
- .slice(0, 5)
647
- .map(([type, count]) => `• ${type}: ${count.toLocaleString()}`)
648
- .join("\n")}
649
-
650
- **RECOMMENDATIONS**
651
- ${result.recommendations.slice(0, 5).map((r, i) => `${i + 1}. ${r}`).join("\n") || "No specific recommendations"}
652
-
653
- **Status:** ${result.memoryLeaks.some(l => l.severity === "critical" || l.severity === "high") ? "❌ CRITICAL MEMORY ISSUES" : result.memoryLeaks.length > 3 ? "⚠️ MEMORY OPTIMIZATION NEEDED" : "✅ MEMORY HEALTH ACCEPTABLE"}`;
654
- }
655
- async handleBenchmarkCode(args) {
656
- const { projectRoot, testFile, iterations = 100, warmupRuns = 10, compareBaseline = false } = args;
657
- const jobId = generateJobId("mcp-perf-benchmark");
658
- await frameworkLogger.log("mcp/performance-optimization", "benchmark-started", "info", { projectRoot, iterations }, undefined, jobId);
659
- try {
660
- const result = await this.performBenchmark(projectRoot, testFile, iterations, warmupRuns, compareBaseline);
661
- const responseText = this.formatBenchmarkResult(result);
662
- return {
663
- content: [{ type: "text", text: responseText }],
664
- data: result
665
- };
666
- }
667
- catch (error) {
668
- return {
669
- content: [{
670
- type: "text",
671
- text: `Benchmark failed: ${error instanceof Error ? error.message : String(error)}`
672
- }]
673
- };
674
- }
675
- }
676
- async performBenchmark(projectRoot, testFile, iterations, warmupRuns, compareBaseline) {
677
- const benchmarks = [];
678
- let comparison;
679
- if (testFile && fs.existsSync(path.join(projectRoot, testFile))) {
680
- const benchmark = this.runSingleBenchmark(projectRoot, testFile, iterations, warmupRuns);
681
- benchmarks.push(benchmark);
682
- }
683
- else {
684
- const codeFiles = this.findCodeFiles(projectRoot).slice(0, 5);
685
- for (const file of codeFiles) {
686
- const benchmark = this.runSingleBenchmark(projectRoot, file, iterations, warmupRuns);
687
- benchmarks.push(benchmark);
688
- }
689
- }
690
- if (compareBaseline && benchmarks.length > 1) {
691
- const baseline = benchmarks[0];
692
- const current = benchmarks[benchmarks.length - 1];
693
- if (baseline && current) {
694
- comparison = {
695
- baseline,
696
- current,
697
- improvement: baseline.opsPerSecond > 0 ? ((baseline.opsPerSecond - current.opsPerSecond) / baseline.opsPerSecond) * 100 : 0,
698
- significant: baseline.opsPerSecond > 0 ? Math.abs(((baseline.opsPerSecond - current.opsPerSecond) / baseline.opsPerSecond)) > 0.1 : false
699
- };
700
- }
701
- }
702
- const stats = {
703
- totalBenchmarks: benchmarks.length,
704
- fastest: benchmarks.sort((a, b) => b.opsPerSecond - a.opsPerSecond)[0]?.name || "",
705
- slowest: benchmarks.sort((a, b) => a.opsPerSecond - b.opsPerSecond)[0]?.name || "",
706
- averageOpsPerSecond: benchmarks.reduce((sum, b) => sum + b.opsPerSecond, 0) / benchmarks.length,
707
- variance: this.calculateVariance(benchmarks.map(b => b.opsPerSecond))
708
- };
709
- const recommendations = this.generateBenchmarkRecommendations(benchmarks);
710
- return { benchmarks, comparison: comparison ?? undefined, statistics: stats, recommendations };
711
- }
712
- runSingleBenchmark(projectRoot, filePath, iterations, warmupRuns) {
713
- let totalTime = 0;
714
- const times = [];
715
- for (let i = 0; i < warmupRuns; i++) {
716
- this.simulateBenchmarkWorkload(filePath);
717
- }
718
- for (let i = 0; i < iterations; i++) {
719
- const start = performance.now();
720
- this.simulateBenchmarkWorkload(filePath);
721
- const duration = performance.now() - start;
722
- times.push(duration);
723
- totalTime += duration;
724
- }
725
- times.sort((a, b) => a - b);
726
- const mean = totalTime / iterations;
727
- const median = times[Math.floor(times.length / 2)] ?? 0;
728
- const variance = times.reduce((sum, t) => sum + Math.pow(t - mean, 2), 0) / times.length;
729
- const stdDev = Math.sqrt(variance);
730
- return {
731
- name: filePath,
732
- operations: iterations,
733
- duration: Math.round(totalTime),
734
- opsPerSecond: mean > 0 ? Math.round(1000 / mean) : 0,
735
- meanMs: Math.round(mean * 100) / 100,
736
- medianMs: Math.round(median * 100) / 100,
737
- stdDevMs: Math.round(stdDev * 100) / 100,
738
- minMs: times[0] ? Math.round(times[0] * 100) / 100 : 0,
739
- maxMs: times[times.length - 1] ? Math.round(times[times.length - 1] * 100) / 100 : 0,
740
- p95Ms: times[Math.floor(times.length * 0.95)] ? Math.round(times[Math.floor(times.length * 0.95)] * 100) / 100 : 0,
741
- p99Ms: times[Math.floor(times.length * 0.99)] ? Math.round(times[Math.floor(times.length * 0.99)] * 100) / 100 : 0
742
- };
743
- }
744
- simulateBenchmarkWorkload(filePath) {
745
- const fileSize = fs.existsSync(filePath) ? fs.statSync(filePath).size : 1000;
746
- const iterations = Math.max(10, Math.floor(fileSize / 100));
747
- let result = 0;
748
- for (let i = 0; i < iterations; i++) {
749
- result += Math.sqrt(i) * Math.log(i + 1);
750
- }
751
- const arr = new Array(100).fill(0).map((_, i) => i * 2);
752
- arr.sort((a, b) => b - a);
753
- const obj = { a: 1, b: 2, c: 3, d: 4 };
754
- const serialized = JSON.stringify(obj);
755
- JSON.parse(serialized);
756
- }
757
- calculateVariance(values) {
758
- if (values.length === 0)
759
- return 0;
760
- const mean = values.reduce((sum, v) => sum + v, 0) / values.length;
761
- return values.reduce((sum, v) => sum + Math.pow(v - mean, 2), 0) / values.length;
762
- }
763
- generateBenchmarkRecommendations(benchmarks) {
764
- const recommendations = [];
765
- const slowest = benchmarks.sort((a, b) => a.opsPerSecond - b.opsPerSecond)[0];
766
- if (slowest) {
767
- recommendations.push(`${slowest.name} is the slowest benchmark - consider optimization`);
768
- }
769
- const highVariance = benchmarks.filter(b => b.stdDevMs / b.meanMs > 0.3);
770
- if (highVariance.length > 0) {
771
- recommendations.push(`${highVariance.length} benchmarks show high variance - results may be inconsistent`);
772
- }
773
- const lowOpsPerSec = benchmarks.filter(b => b.opsPerSecond < 1000);
774
- if (lowOpsPerSec.length > 0) {
775
- recommendations.push(`${lowOpsPerSec.length} benchmarks run under 1000 ops/sec - optimization needed`);
776
- }
777
- return recommendations;
778
- }
779
- formatBenchmarkResult(result) {
780
- let text = `⚡ Benchmark Results (${result.benchmarks.length} benchmarks)
781
-
782
- **STATISTICS**
783
- - Total Benchmarks: ${result.statistics.totalBenchmarks}
784
- - Fastest: ${result.statistics.fastest}
785
- - Slowest: ${result.statistics.slowest}
786
- - Average Ops/Sec: ${result.statistics.averageOpsPerSecond.toLocaleString()}
787
- - Variance: ${result.statistics.variance.toFixed(2)}
788
-
789
- **BENCHMARK DETAILS**
790
- `;
791
- for (const benchmark of result.benchmarks) {
792
- text += `
793
- 📊 ${benchmark.name}
794
- - Ops/sec: ${benchmark.opsPerSecond.toLocaleString()}
795
- - Mean: ${benchmark.meanMs}ms | Median: ${benchmark.medianMs}ms
796
- - Min: ${benchmark.minMs}ms | Max: ${benchmark.maxMs}ms
797
- - P95: ${benchmark.p95Ms}ms | P99: ${benchmark.p99Ms}ms
798
- - Std Dev: ${benchmark.stdDevMs}ms
799
- `;
800
- }
801
- if (result.comparison) {
802
- const c = result.comparison;
803
- const direction = c.improvement > 0 ? "📈" : "📉";
804
- text += `
805
- **COMPARISON vs BASELINE**
806
- ${direction} Change: ${c.improvement > 0 ? "+" : ""}${c.improvement.toFixed(1)}%
807
- ${c.significant ? "⚠️" : "✓"} Statistically Significant: ${c.significant ? "Yes" : "No"}
808
- `;
809
- }
810
- text += `
811
- **RECOMMENDATIONS**
812
- ${result.recommendations.slice(0, 5).map((r, i) => `${i + 1}. ${r}`).join("\n") || "No specific recommendations"}
813
- `;
814
- return text;
815
- }
816
- async handleSuggestOptimizations(args) {
817
- const { projectRoot, focus = "all", threshold = 100 } = args;
818
- const jobId = generateJobId("mcp-perf-optimize");
819
- await frameworkLogger.log("mcp/performance-optimization", "optimization-suggestion-started", "info", { projectRoot, focus }, undefined, jobId);
820
- try {
821
- const suggestions = await this.generateOptimizations(projectRoot, focus, threshold);
822
- const responseText = this.formatOptimizationSuggestions(suggestions);
823
- return {
824
- content: [{ type: "text", text: responseText }],
825
- data: { suggestions }
826
- };
827
- }
828
- catch (error) {
829
- return {
830
- content: [{
831
- type: "text",
832
- text: `Optimization suggestion failed: ${error instanceof Error ? error.message : String(error)}`
833
- }]
834
- };
835
- }
836
- }
837
- async generateOptimizations(projectRoot, focus, threshold) {
838
- const suggestions = [];
839
- if (!fs.existsSync(path.join(projectRoot, "src"))) {
840
- return suggestions;
841
- }
842
- const codeFiles = this.findCodeFiles(projectRoot);
843
- if (focus === "cpu" || focus === "all") {
844
- suggestions.push(...this.suggestCPUOptimizations(codeFiles, threshold));
845
- }
846
- if (focus === "memory" || focus === "all") {
847
- suggestions.push(...this.suggestMemoryOptimizations(codeFiles));
848
- }
849
- if (focus === "network" || focus === "all") {
850
- suggestions.push(...this.suggestNetworkOptimizations(codeFiles));
851
- }
852
- if (focus === "io" || focus === "all") {
853
- suggestions.push(...this.suggestIOOptimizations(codeFiles));
854
- }
855
- return suggestions.sort((a, b) => {
856
- const impactOrder = { critical: 0, high: 1, medium: 2, low: 3 };
857
- return impactOrder[a.impact] - impactOrder[b.impact];
858
- });
859
- }
860
- suggestCPUOptimizations(files, threshold) {
861
- const suggestions = [];
862
- let idCounter = 1;
863
- for (const file of files) {
864
- try {
865
- const content = fs.readFileSync(file, "utf8");
866
- const loops = content.match(/for\s*\(|while\s*\(|forEach\(|map\(|filter\(|reduce\(/g) || [];
867
- if (loops.length > 20) {
868
- suggestions.push({
869
- id: `cpu-${idCounter++}`,
870
- category: "cpu",
871
- title: "Excessive loop operations detected",
872
- description: `${loops.length} loop/array operations found in ${path.basename(file)}`,
873
- impact: loops.length > 40 ? "high" : "medium",
874
- effort: "medium",
875
- files: [file],
876
- suggestedFix: "Consider using more efficient algorithms or Web Workers for heavy computations",
877
- expectedImprovement: "20-40% CPU reduction"
878
- });
879
- }
880
- const syncOps = content.match(/JSON\.parse\(|JSON\.stringify\(/g) || [];
881
- if (syncOps.length > 10) {
882
- suggestions.push({
883
- id: `cpu-${idCounter++}`,
884
- category: "cpu",
885
- title: "Heavy synchronous JSON processing",
886
- description: `${syncOps.length} JSON.parse/stringify operations in ${path.basename(file)}`,
887
- impact: "medium",
888
- effort: "low",
889
- files: [file],
890
- suggestedFix: "Consider web workers for large JSON processing or streaming parsers",
891
- expectedImprovement: "15-30% CPU improvement"
892
- });
893
- }
894
- const complexRegex = content.match(/\/[\w\s]*[+*?^${}()|[\]\\].*\/[gimsuy]*/g) || [];
895
- if (complexRegex.length > 5) {
896
- suggestions.push({
897
- id: `cpu-${idCounter++}`,
898
- category: "cpu",
899
- title: "Multiple regex operations",
900
- description: `${complexRegex.length} regex patterns in ${path.basename(file)}`,
901
- impact: "medium",
902
- effort: "low",
903
- files: [file],
904
- suggestedFix: "Cache compiled regex patterns outside loops",
905
- expectedImprovement: "10-25% improvement for regex-heavy code"
906
- });
907
- }
908
- const domQueries = content.match(/document\.(getElementById|querySelector|getElementsByClassName)\(/g) || [];
909
- if (domQueries.length > 10) {
910
- suggestions.push({
911
- id: `cpu-${idCounter++}`,
912
- category: "cpu",
913
- title: "Excessive DOM queries",
914
- description: `${domQueries.length} DOM queries in ${path.basename(file)}`,
915
- impact: "high",
916
- effort: "medium",
917
- files: [file],
918
- suggestedFix: "Cache DOM references and avoid repeated queries",
919
- expectedImprovement: "30-50% rendering improvement"
920
- });
921
- }
922
- }
923
- catch {
924
- // Skip unreadable files
925
- }
926
- }
927
- return suggestions;
928
- }
929
- suggestMemoryOptimizations(files) {
930
- const suggestions = [];
931
- let idCounter = 1;
932
- for (const file of files) {
933
- try {
934
- const content = fs.readFileSync(file, "utf8");
935
- const largeArrays = content.match(/\[\s*{[\s\S]{500,}?}\s*\]/g) || [];
936
- if (largeArrays.length > 0) {
937
- suggestions.push({
938
- id: `mem-${idCounter++}`,
939
- category: "memory",
940
- title: "Large inline array literals",
941
- description: `${largeArrays.length} large array literals in ${path.basename(file)}`,
942
- impact: "high",
943
- effort: "low",
944
- files: [file],
945
- suggestedFix: "Consider lazy loading or splitting large arrays",
946
- expectedImprovement: "Memory reduction based on array size"
947
- });
948
- }
949
- const stringConcat = content.match(/\+\s*['"][^'"]+['"]|\+=.*['"]/g) || [];
950
- if (stringConcat.length > 15) {
951
- suggestions.push({
952
- id: `mem-${idCounter++}`,
953
- category: "memory",
954
- title: "String concatenation detected",
955
- description: `${stringConcat.length} string concatenations in ${path.basename(file)}`,
956
- impact: "medium",
957
- effort: "low",
958
- files: [file],
959
- suggestedFix: "Use template literals or StringBuilder pattern",
960
- expectedImprovement: "Reduced memory allocations"
961
- });
962
- }
963
- const deepClone = content.match(/\.clone\(|\.slice\(\)|\[...|\.concat\(/g) || [];
964
- if (deepClone.length > 5) {
965
- suggestions.push({
966
- id: `mem-${idCounter++}`,
967
- category: "memory",
968
- title: "Frequent array/object cloning",
969
- description: `${deepClone.length} cloning operations in ${path.basename(file)}`,
970
- impact: "medium",
971
- effort: "medium",
972
- files: [file],
973
- suggestedFix: "Consider immutable data structures or structural sharing",
974
- expectedImprovement: "Reduced memory churn"
975
- });
976
- }
977
- }
978
- catch {
979
- // Skip unreadable files
980
- }
981
- }
982
- return suggestions;
983
- }
984
- suggestNetworkOptimizations(files) {
985
- const suggestions = [];
986
- let idCounter = 1;
987
- for (const file of files) {
988
- try {
989
- const content = fs.readFileSync(file, "utf8");
990
- const fetchCalls = content.match(/fetch\(|axios\.|http\./g) || [];
991
- if (fetchCalls.length > 5) {
992
- suggestions.push({
993
- id: `net-${idCounter++}`,
994
- category: "network",
995
- title: "Multiple network requests detected",
996
- description: `${fetchCalls.length} network calls in ${path.basename(file)}`,
997
- impact: "medium",
998
- effort: "medium",
999
- files: [file],
1000
- suggestedFix: "Implement request batching, caching, or deduplication",
1001
- expectedImprovement: "Reduced network overhead"
1002
- });
1003
- }
1004
- const largePayloads = content.match(/JSON\.stringify\([\s\S]{1000,}\)/g) || [];
1005
- if (largePayloads.length > 0) {
1006
- suggestions.push({
1007
- id: `net-${idCounter++}`,
1008
- category: "network",
1009
- title: "Large JSON payloads",
1010
- description: `${largePayloads.length} large JSON serializations in ${path.basename(file)}`,
1011
- impact: "high",
1012
- effort: "medium",
1013
- files: [file],
1014
- suggestedFix: "Consider compression or pagination for large datasets",
1015
- expectedImprovement: "50-70% bandwidth reduction"
1016
- });
1017
- }
1018
- }
1019
- catch {
1020
- // Skip unreadable files
1021
- }
1022
- }
1023
- return suggestions;
1024
- }
1025
- suggestIOOptimizations(files) {
1026
- const suggestions = [];
1027
- let idCounter = 1;
1028
- for (const file of files) {
1029
- try {
1030
- const content = fs.readFileSync(file, "utf8");
1031
- const syncFsOps = content.match(/fs\.readFileSync|fs\.writeFileSync|fs\.readdirSync/g) || [];
1032
- if (syncFsOps.length > 3) {
1033
- suggestions.push({
1034
- id: `io-${idCounter++}`,
1035
- category: "io",
1036
- title: "Synchronous filesystem operations",
1037
- description: `${syncFsOps.length} sync FS operations in ${path.basename(file)}`,
1038
- impact: "medium",
1039
- effort: "low",
1040
- files: [file],
1041
- suggestedFix: "Convert to async operations (fs.promises)",
1042
- expectedImprovement: "Non-blocking I/O operations"
1043
- });
1044
- }
1045
- }
1046
- catch {
1047
- // Skip unreadable files
1048
- }
1049
- }
1050
- return suggestions;
1051
- }
1052
- formatOptimizationSuggestions(suggestions) {
1053
- const byCategory = suggestions.reduce((acc, s) => {
1054
- if (!acc[s.category])
1055
- acc[s.category] = [];
1056
- acc[s.category].push(s);
1057
- return acc;
1058
- }, {});
1059
- let text = `💡 Performance Optimization Suggestions (${suggestions.length} found)
1060
-
1061
- **SUMMARY BY IMPACT**
1062
- - Critical: ${suggestions.filter(s => s.impact === "critical").length}
1063
- - High: ${suggestions.filter(s => s.impact === "high").length}
1064
- - Medium: ${suggestions.filter(s => s.impact === "medium").length}
1065
- - Low: ${suggestions.filter(s => s.impact === "low").length}
1066
- `;
1067
- for (const [category, items] of Object.entries(byCategory)) {
1068
- text += `\n## ${category.toUpperCase()} Optimizations (${items.length})\n`;
1069
- for (const suggestion of items.slice(0, 5)) {
1070
- const icon = suggestion.impact === "critical" ? "🔴" :
1071
- suggestion.impact === "high" ? "🟠" :
1072
- suggestion.impact === "medium" ? "🟡" : "🟢";
1073
- text += `
1074
- ${icon} **${suggestion.title}** (${suggestion.impact} impact, ${suggestion.effort} effort)
1075
- ${suggestion.description}
1076
- 📁 Files: ${suggestion.files.join(", ")}
1077
- 💡 Fix: ${suggestion.suggestedFix}
1078
- 📈 Expected: ${suggestion.expectedImprovement}
1079
- `;
1080
- }
1081
- }
1082
- return text;
1083
- }
1084
- async handleMeasureCoreWebVitals(args) {
1085
- const { projectRoot, analyzeBundle = true, checkAccessibility = true, measureLCP = true, measureINP = true, measureCLS = true } = args;
1086
- const jobId = generateJobId("mcp-perf-cwv");
1087
- await frameworkLogger.log("mcp/performance-optimization", "cwv-started", "info", { projectRoot }, undefined, jobId);
1088
- try {
1089
- const result = await this.performCoreWebVitalsAnalysis(projectRoot, analyzeBundle, checkAccessibility, measureLCP, measureINP, measureCLS);
1090
- const responseText = this.formatCoreWebVitalsResult(result);
1091
- return {
1092
- content: [{ type: "text", text: responseText }],
1093
- data: result
1094
- };
1095
- }
1096
- catch (error) {
1097
- return {
1098
- content: [{
1099
- type: "text",
1100
- text: `Core Web Vitals analysis failed: ${error instanceof Error ? error.message : String(error)}`
1101
- }]
1102
- };
1103
- }
1104
- }
1105
- async performCoreWebVitalsAnalysis(projectRoot, analyzeBundle, checkAccessibility, measureLCP, measureINP, measureCLS) {
1106
- const result = {
1107
- recommendations: [],
1108
- score: 100,
1109
- status: "good"
1110
- };
1111
- if (analyzeBundle && fs.existsSync(path.join(projectRoot, "dist"))) {
1112
- result.bundleAnalysis = this.analyzeBundle(projectRoot);
1113
- this.applyBundleRecommendations(result);
1114
- }
1115
- if (measureLCP) {
1116
- result.LCP = this.measureLCP(projectRoot);
1117
- this.evaluateLCP(result);
1118
- }
1119
- if (measureINP) {
1120
- result.INP = this.measureINP(projectRoot);
1121
- this.evaluateINP(result);
1122
- }
1123
- if (measureCLS) {
1124
- result.CLS = this.measureCLS(projectRoot);
1125
- this.evaluateCLS(result, checkAccessibility);
1126
- }
1127
- this.calculateOverallScore(result);
1128
- this.determineStatus(result);
1129
- return result;
1130
- }
1131
- analyzeBundle(projectRoot) {
1132
- const distPath = path.join(projectRoot, "dist");
1133
- const analysis = {
1134
- totalSize: 0,
1135
- gzippedSize: 0,
1136
- byType: {},
1137
- largestModules: [],
1138
- duplication: [],
1139
- treeShakingOpportunities: []
1140
- };
1141
- try {
1142
- const files = this.getAllFiles(distPath);
1143
- for (const file of files) {
1144
- try {
1145
- const stat = fs.statSync(file);
1146
- if (stat.isFile()) {
1147
- const size = stat.size;
1148
- analysis.totalSize += size;
1149
- const ext = path.extname(file);
1150
- analysis.byType[ext] = (analysis.byType[ext] || 0) + size;
1151
- if (size > 50000) {
1152
- analysis.largestModules.push({
1153
- name: path.relative(distPath, file),
1154
- size: Math.round(size / 1024)
1155
- });
1156
- }
1157
- }
1158
- }
1159
- catch {
1160
- // Skip unreadable files
1161
- }
1162
- }
1163
- analysis.gzippedSize = Math.round(analysis.totalSize * 0.3);
1164
- analysis.largestModules.sort((a, b) => b.size - a.size);
1165
- analysis.largestModules = analysis.largestModules.slice(0, 10);
1166
- if (analysis.totalSize > 500 * 1024 * 1024) {
1167
- analysis.treeShakingOpportunities.push("Consider implementing tree shaking for unused exports");
1168
- }
1169
- this.detectDuplication(distPath, analysis);
1170
- }
1171
- catch {
1172
- // dist directory might not exist
1173
- }
1174
- return analysis;
1175
- }
1176
- getAllFiles(dir) {
1177
- const files = [];
1178
- try {
1179
- const items = fs.readdirSync(dir);
1180
- for (const item of items) {
1181
- const fullPath = path.join(dir, item);
1182
- const stat = fs.statSync(fullPath);
1183
- if (stat.isDirectory() && !item.startsWith(".")) {
1184
- files.push(...this.getAllFiles(fullPath));
1185
- }
1186
- else if (stat.isFile()) {
1187
- files.push(fullPath);
1188
- }
1189
- }
1190
- }
1191
- catch {
1192
- // Skip unreadable directories
1193
- }
1194
- return files;
1195
- }
1196
- detectDuplication(distPath, analysis) {
1197
- const fileContents = {};
1198
- const allFiles = this.getAllFiles(distPath);
1199
- for (const file of allFiles.slice(0, 50)) {
1200
- if (file.endsWith(".js")) {
1201
- try {
1202
- const content = fs.readFileSync(file, "utf8").substring(0, 10000);
1203
- const hashes = content.split("").reduce((acc, c, i) => {
1204
- return acc + (c.charCodeAt(0) * (i + 1));
1205
- }, 0);
1206
- const hashKey = String(hashes % 100);
1207
- if (!fileContents[hashKey])
1208
- fileContents[hashKey] = [];
1209
- fileContents[hashKey].push(path.basename(file));
1210
- }
1211
- catch {
1212
- // Skip unreadable files
1213
- }
1214
- }
1215
- }
1216
- for (const [, files] of Object.entries(fileContents)) {
1217
- if (files.length > 1 && files[0]) {
1218
- analysis.duplication.push({
1219
- name: files[0],
1220
- count: files.length
1221
- });
1222
- }
1223
- }
1224
- }
1225
- applyBundleRecommendations(result) {
1226
- if (!result.bundleAnalysis)
1227
- return;
1228
- const bundle = result.bundleAnalysis;
1229
- if (bundle.totalSize > 500 * 1024) {
1230
- result.recommendations.push("Bundle size exceeds 500KB - implement code splitting");
1231
- }
1232
- if (bundle.largestModules.length > 3) {
1233
- result.recommendations.push("Large modules detected - consider lazy loading");
1234
- }
1235
- if (bundle.duplication.length > 2) {
1236
- result.recommendations.push("Code duplication detected - extract shared code to common modules");
1237
- }
1238
- }
1239
- measureLCP(projectRoot) {
1240
- const srcPath = path.join(projectRoot, "src");
1241
- let estimatedLCP = 2500;
1242
- if (fs.existsSync(srcPath)) {
1243
- const files = this.findCodeFiles(projectRoot);
1244
- let criticalElements = 0;
1245
- for (const file of files) {
1246
- try {
1247
- const content = fs.readFileSync(file, "utf8");
1248
- const heroImages = content.match(/<img[^>]*class="[^"]*(?:hero|header|main|featured)[^"]*"/gi) || [];
1249
- const largeImages = content.match(/<img[^>]*(?:width="[^"]*[1-9][0-9]{2,}"|height="[^"]*[1-9][0-9]{2,}")/gi) || [];
1250
- criticalElements += heroImages.length + largeImages.length;
1251
- const criticalCSS = content.match(/loading="eager"|fetchpriority="high"/gi) || [];
1252
- if (criticalCSS.length === 0 && criticalElements > 0) {
1253
- estimatedLCP += 500;
1254
- }
1255
- }
1256
- catch {
1257
- // Skip unreadable files
1258
- }
1259
- }
1260
- }
1261
- return {
1262
- value: estimatedLCP,
1263
- score: this.scoreLCP(estimatedLCP),
1264
- element: "Largest contentful element",
1265
- resourceLoadTime: Math.round(estimatedLCP * 0.6),
1266
- renderDelay: Math.round(estimatedLCP * 0.4)
1267
- };
1268
- }
1269
- scoreLCP(value) {
1270
- if (value <= 2500)
1271
- return 100;
1272
- if (value <= 4000)
1273
- return 90;
1274
- if (value <= 6000)
1275
- return 70;
1276
- return 50;
1277
- }
1278
- evaluateLCP(result) {
1279
- if (!result.LCP)
1280
- return;
1281
- if (result.LCP.value > 4000) {
1282
- result.recommendations.push("LCP exceeds 4s - optimize server response time and resource loading");
1283
- result.score -= 20;
1284
- }
1285
- else if (result.LCP.value > 2500) {
1286
- result.recommendations.push("LCP could be improved - consider preloading critical resources");
1287
- result.score -= 10;
1288
- }
1289
- }
1290
- measureINP(projectRoot) {
1291
- const srcPath = path.join(projectRoot, "src");
1292
- let estimatedINP = 200;
1293
- if (fs.existsSync(srcPath)) {
1294
- const files = this.findCodeFiles(projectRoot);
1295
- let eventHandlers = 0;
1296
- for (const file of files) {
1297
- try {
1298
- const content = fs.readFileSync(file, "utf8");
1299
- const handlers = content.match(/\.addEventListener\(|onClick|onChange|onSubmit/g) || [];
1300
- eventHandlers += handlers.length;
1301
- const heavyHandlers = content.match(/async\s+\w+\s*\([^)]*\)\s*\{[\s\S]{200,}?await\s+/g) || [];
1302
- if (heavyHandlers.length > 0) {
1303
- estimatedINP += heavyHandlers.length * 100;
1304
- }
1305
- }
1306
- catch {
1307
- // Skip unreadable files
1308
- }
1309
- }
1310
- if (eventHandlers > 50) {
1311
- estimatedINP += 50;
1312
- }
1313
- }
1314
- return {
1315
- value: estimatedINP,
1316
- score: this.scoreINP(estimatedINP),
1317
- interactionType: "click/keypress",
1318
- processingTime: Math.round(estimatedINP * 0.7),
1319
- presentationDelay: Math.round(estimatedINP * 0.3)
1320
- };
1321
- }
1322
- scoreINP(value) {
1323
- if (value <= 200)
1324
- return 100;
1325
- if (value <= 500)
1326
- return 80;
1327
- if (value <= 1000)
1328
- return 60;
1329
- return 40;
1330
- }
1331
- evaluateINP(result) {
1332
- if (!result.INP)
1333
- return;
1334
- if (result.INP.value > 500) {
1335
- result.recommendations.push("INP exceeds 500ms - break up long tasks and defer non-critical work");
1336
- result.score -= 15;
1337
- }
1338
- else if (result.INP.value > 200) {
1339
- result.recommendations.push("INP could be improved - optimize event handlers and reduce main thread work");
1340
- result.score -= 5;
1341
- }
1342
- }
1343
- measureCLS(projectRoot) {
1344
- const srcPath = path.join(projectRoot, "src");
1345
- let estimatedCLS = 0.05;
1346
- const sources = [];
1347
- if (fs.existsSync(srcPath)) {
1348
- const files = this.findCodeFiles(projectRoot);
1349
- for (const file of files) {
1350
- try {
1351
- const content = fs.readFileSync(file, "utf8");
1352
- const imagesWithoutDimensions = content.match(/<img(?![^>]*\b(width|height)=)/gi) || [];
1353
- if (imagesWithoutDimensions.length > 0) {
1354
- estimatedCLS += imagesWithoutDimensions.length * 0.1;
1355
- sources.push(`${imagesWithoutDimensions.length} images without dimensions`);
1356
- }
1357
- const dynamicAds = content.match(/<div[^>]*class="[^"]*(?:ad|banner|advertisement)[^"]*"/gi) || [];
1358
- if (dynamicAds.length > 0) {
1359
- estimatedCLS += dynamicAds.length * 0.15;
1360
- sources.push(`${dynamicAds.length} dynamic ad containers`);
1361
- }
1362
- const fontLoads = content.match(/@font-face|font-display:\s*swap/gi) || [];
1363
- if (fontLoads.length === 0) {
1364
- estimatedCLS += 0.05;
1365
- sources.push("No font-display strategy specified");
1366
- }
1367
- }
1368
- catch {
1369
- // Skip unreadable files
1370
- }
1371
- }
1372
- }
1373
- return {
1374
- value: Math.round(estimatedCLS * 1000) / 1000,
1375
- score: this.scoreCLS(estimatedCLS),
1376
- layoutShifts: Math.round(estimatedCLS * 10),
1377
- unexpectedShifts: Math.round(estimatedCLS * 7),
1378
- sources: [...new Set(sources)]
1379
- };
1380
- }
1381
- scoreCLS(value) {
1382
- if (value <= 0.1)
1383
- return 100;
1384
- if (value <= 0.25)
1385
- return 80;
1386
- if (value <= 0.5)
1387
- return 60;
1388
- return 40;
1389
- }
1390
- evaluateCLS(result, checkAccessibility) {
1391
- if (!result.CLS)
1392
- return;
1393
- if (result.CLS.value > 0.25) {
1394
- result.recommendations.push("CLS exceeds 0.25 - set dimensions on images and reserve space for dynamic content");
1395
- result.score -= 15;
1396
- }
1397
- else if (result.CLS.value > 0.1) {
1398
- result.recommendations.push("CLS could be improved - ensure all media has explicit dimensions");
1399
- result.score -= 5;
1400
- }
1401
- if (checkAccessibility && result.CLS.sources.length > 0) {
1402
- result.recommendations.push("Accessibility issue: Layout shifts affect user experience - fix CLS sources");
1403
- result.score -= 5;
1404
- }
1405
- }
1406
- calculateOverallScore(result) {
1407
- let totalWeight = 0;
1408
- let weightedScore = 0;
1409
- if (result.LCP) {
1410
- weightedScore += result.LCP.score * 0.35;
1411
- totalWeight += 0.35;
1412
- }
1413
- if (result.INP) {
1414
- weightedScore += result.INP.score * 0.35;
1415
- totalWeight += 0.35;
1416
- }
1417
- if (result.CLS) {
1418
- weightedScore += result.CLS.score * 0.30;
1419
- totalWeight += 0.30;
1420
- }
1421
- result.score = totalWeight > 0 ? Math.round(weightedScore / totalWeight) : 100;
1422
- }
1423
- determineStatus(result) {
1424
- if (result.score >= 90) {
1425
- result.status = "good";
1426
- }
1427
- else if (result.score >= 50) {
1428
- result.status = "needs-improvement";
1429
- }
1430
- else {
1431
- result.status = "poor";
1432
- }
1433
- }
1434
- formatCoreWebVitalsResult(result) {
1435
- const statusIcon = result.status === "good" ? "✅" :
1436
- result.status === "needs-improvement" ? "⚠️" : "❌";
1437
- let text = `${statusIcon} Core Web Vitals Analysis
1438
-
1439
- **OVERALL SCORE:** ${result.score}/100 (${result.status.toUpperCase()})
1440
- `;
1441
- if (result.bundleAnalysis) {
1442
- const bundle = result.bundleAnalysis;
1443
- text += `
1444
- **BUNDLE ANALYSIS**
1445
- - Total Size: ${(bundle.totalSize / 1024 / 1024).toFixed(2)}MB
1446
- - Gzipped Size: ${(bundle.gzippedSize / 1024 / 1024).toFixed(2)}MB
1447
- - Largest Modules: ${bundle.largestModules.slice(0, 3).map(m => `${m.name} (${m.size}KB)`).join(", ") || "None"}
1448
- `;
1449
- }
1450
- if (result.LCP) {
1451
- const lcp = result.LCP;
1452
- const lcpStatus = lcp.value <= 2500 ? "✅" : lcp.value <= 4000 ? "⚠️" : "❌";
1453
- text += `
1454
- **LCP (Largest Contentful Paint)** ${lcpStatus}
1455
- - Value: ${(lcp.value / 1000).toFixed(2)}s
1456
- - Score: ${lcp.score}/100
1457
- - Resource Load: ${(lcp.resourceLoadTime / 1000).toFixed(2)}s
1458
- - Render Delay: ${(lcp.renderDelay / 1000).toFixed(2)}s
1459
- `;
1460
- }
1461
- if (result.INP) {
1462
- const inp = result.INP;
1463
- const inpStatus = inp.value <= 200 ? "✅" : inp.value <= 500 ? "⚠️" : "❌";
1464
- text += `
1465
- **INP (Interaction to Next Paint)** ${inpStatus}
1466
- - Value: ${inp.value}ms
1467
- - Score: ${inp.score}/100
1468
- - Processing Time: ${inp.processingTime}ms
1469
- - Presentation Delay: ${inp.presentationDelay}ms
1470
- `;
1471
- }
1472
- if (result.CLS) {
1473
- const cls = result.CLS;
1474
- const clsStatus = cls.value <= 0.1 ? "✅" : cls.value <= 0.25 ? "⚠️" : "❌";
1475
- text += `
1476
- **CLS (Cumulative Layout Shift)** ${clsStatus}
1477
- - Value: ${cls.value}
1478
- - Score: ${cls.score}/100
1479
- - Layout Shifts: ${cls.layoutShifts}
1480
- - Sources: ${cls.sources.slice(0, 3).join(", ") || "None"}
1481
- `;
1482
- }
1483
- text += `
1484
- **RECOMMENDATIONS**
1485
- ${result.recommendations.slice(0, 5).map((r, i) => `${i + 1}. ${r}`).join("\n") || "No specific recommendations"}
1486
- `;
1487
- return text;
1488
- }
1489
- findCodeFiles(projectRoot, maxDepth = 10) {
1490
- const extensions = [".ts", ".tsx", ".js", ".jsx", ".mjs", ".cjs"];
1491
- const files = [];
1492
- const scanDir = (dir, depth) => {
1493
- if (depth > maxDepth)
1494
- return;
1495
- try {
1496
- const items = fs.readdirSync(dir);
1497
- for (const item of items) {
1498
- if (item.startsWith("."))
1499
- continue;
1500
- const fullPath = path.join(dir, item);
1501
- try {
1502
- const stat = fs.statSync(fullPath);
1503
- if (stat.isDirectory()) {
1504
- if (item !== "node_modules" && item !== "dist" && item !== "build" && item !== ".next") {
1505
- scanDir(fullPath, depth + 1);
1506
- }
1507
- }
1508
- else if (stat.isFile() && extensions.some(ext => item.endsWith(ext))) {
1509
- files.push(fullPath);
1510
- }
1511
- }
1512
- catch {
1513
- // Skip files we can't stat
1514
- }
1515
- }
1516
- }
1517
- catch {
1518
- // Skip directories we can't read
1519
- }
1520
- };
1521
- const srcPath = path.join(projectRoot, "src");
1522
- if (fs.existsSync(srcPath)) {
1523
- scanDir(srcPath, 0);
1524
- }
1525
- else {
1526
- scanDir(projectRoot, 0);
1527
- }
1528
- return files.slice(0, 100);
1529
- }
1530
- }
1531
- if (import.meta.url === `file://${fs.realpathSync(process.argv[1])}`) {
1532
- const server = new XrayPerformanceOptimizationServer();
1533
- server.run().catch((error) => {
1534
- frameworkLogger.log("mcp/performance-optimization", "run", "error", { error: String(error) });
1535
- });
1536
- }
1537
- export { XrayPerformanceOptimizationServer };