0xray 4.0.11 → 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 (1009) hide show
  1. package/.grok-plugin/plugin.json +1 -1
  2. package/.xray/features.json +1 -1
  3. package/AGENTS-consumer.md +1 -1
  4. package/AGENTS.md +1 -1
  5. package/README.md +2 -2
  6. package/SKILLS.md +1 -1
  7. package/llms.txt +2 -2
  8. package/package.json +1 -1
  9. package/scripts/foundry/CHANGELOG.md +3 -1
  10. package/scripts/foundry/README.md +2 -2
  11. package/scripts/foundry/inspect.mjs +22 -6
  12. package/scripts/foundry/mint-suit.cjs +24 -0
  13. package/scripts/foundry/package.json +1 -1
  14. package/scripts/foundry/plant/agents/inspect.yml +1 -1
  15. package/scripts/foundry/plant/agents/mill.yml +1 -1
  16. package/scripts/foundry/plant/skills/inspect/SKILL.md +1 -1
  17. package/scripts/node/install-bridges.cjs +39 -24
  18. package/src/integrations/openclaw/plugin/xray-pre-tool/package.json +1 -1
  19. package/xray/features.json +1 -1
  20. package/.opencode/agents/api-design.yml +0 -31
  21. package/.opencode/agents/architect.yml +0 -15
  22. package/.opencode/agents/architecture-patterns.yml +0 -14
  23. package/.opencode/agents/auto-format.yml +0 -14
  24. package/.opencode/agents/backend-engineer.yml +0 -12
  25. package/.opencode/agents/boot-orchestrator.yml +0 -14
  26. package/.opencode/agents/bug-triage-specialist.yml +0 -15
  27. package/.opencode/agents/code-analyzer.yml +0 -12
  28. package/.opencode/agents/code-reviewer.yml +0 -14
  29. package/.opencode/agents/content-creator.yml +0 -12
  30. package/.opencode/agents/database-engineer.yml +0 -12
  31. package/.opencode/agents/devops-engineer.yml +0 -12
  32. package/.opencode/agents/framework-compliance-audit.yml +0 -14
  33. package/.opencode/agents/frontend-engineer.yml +0 -12
  34. package/.opencode/agents/frontend-ui-ux-engineer.yml +0 -12
  35. package/.opencode/agents/git-workflow.yml +0 -15
  36. package/.opencode/agents/growth-strategist.yml +0 -12
  37. package/.opencode/agents/hermes-agent.yml +0 -12
  38. package/.opencode/agents/inference-improve.yml +0 -12
  39. package/.opencode/agents/lint.yml +0 -14
  40. package/.opencode/agents/log-monitor.yml +0 -12
  41. package/.opencode/agents/mobile-developer.yml +0 -12
  42. package/.opencode/agents/model-health-check.yml +0 -12
  43. package/.opencode/agents/multimodal-looker.yml +0 -12
  44. package/.opencode/agents/performance-analysis.yml +0 -12
  45. package/.opencode/agents/performance-engineer.yml +0 -12
  46. package/.opencode/agents/performance-optimization.yml +0 -12
  47. package/.opencode/agents/processor-pipeline.yml +0 -14
  48. package/.opencode/agents/project-analysis.yml +0 -12
  49. package/.opencode/agents/refactorer.yml +0 -12
  50. package/.opencode/agents/researcher.yml +0 -12
  51. package/.opencode/agents/security-auditor.yml +0 -12
  52. package/.opencode/agents/security-scan.yml +0 -12
  53. package/.opencode/agents/seo-consultant.yml +0 -12
  54. package/.opencode/agents/session-management.yml +0 -12
  55. package/.opencode/agents/state-manager.yml +0 -12
  56. package/.opencode/agents/storyteller.yml +0 -12
  57. package/.opencode/agents/strategist.yml +0 -12
  58. package/.opencode/agents/tech-writer.yml +0 -12
  59. package/.opencode/agents/testing-best-practices.yml +0 -12
  60. package/.opencode/agents/testing-lead.yml +0 -12
  61. package/.opencode/agents/ui-ux-design.yml +0 -12
  62. package/.opencode/codex.codex +0 -8
  63. package/.opencode/commands/auto-format.md +0 -99
  64. package/.opencode/commands/auto-summary-capture.md +0 -90
  65. package/.opencode/commands/dependency-audit.md +0 -184
  66. package/.opencode/commands/enforcer-daily-scan.md +0 -137
  67. package/.opencode/commands/framework-compliance-audit.md +0 -205
  68. package/.opencode/commands/interactive-validator.md +0 -75
  69. package/.opencode/commands/job-summary-logger.md +0 -68
  70. package/.opencode/commands/lint.md +0 -11
  71. package/.opencode/commands/mode-switch.md +0 -95
  72. package/.opencode/commands/model-health-check.md +0 -186
  73. package/.opencode/commands/performance-analysis.md +0 -144
  74. package/.opencode/commands/pre-commit-introspection.md +0 -185
  75. package/.opencode/commands/pre-commit-introspection.sh +0 -133
  76. package/.opencode/commands/security-scan.md +0 -157
  77. package/.opencode/commands/sisyphus-validation.md +0 -128
  78. package/.opencode/commands/summary-logger.md +0 -83
  79. package/.opencode/enforcer-config.json +0 -282
  80. package/.opencode/skills/api-design/SKILL.md +0 -37
  81. package/.opencode/skills/architect-tools/SKILL.md +0 -37
  82. package/.opencode/skills/architecture-patterns/SKILL.md +0 -37
  83. package/.opencode/skills/auto-format/SKILL.md +0 -37
  84. package/.opencode/skills/backend-engineer/SKILL.md +0 -49
  85. package/.opencode/skills/boot-orchestrator/SKILL.md +0 -33
  86. package/.opencode/skills/bug-triage/SKILL.md +0 -43
  87. package/.opencode/skills/code-analyzer/SKILL.md +0 -45
  88. package/.opencode/skills/code-review/SKILL.md +0 -52
  89. package/.opencode/skills/content-creator/SKILL.md +0 -38
  90. package/.opencode/skills/database-engineer/SKILL.md +0 -46
  91. package/.opencode/skills/devops-engineer/SKILL.md +0 -49
  92. package/.opencode/skills/enforcer/SKILL.md +0 -37
  93. package/.opencode/skills/framework-compliance-audit/SKILL.md +0 -37
  94. package/.opencode/skills/frontend-engineer/SKILL.md +0 -49
  95. package/.opencode/skills/frontend-ui-ux-engineer/SKILL.md +0 -41
  96. package/.opencode/skills/git-workflow/SKILL.md +0 -37
  97. package/.opencode/skills/growth-strategist/SKILL.md +0 -48
  98. package/.opencode/skills/hermes-agent/SKILL.md +0 -212
  99. package/.opencode/skills/inference-improve/SKILL.md +0 -97
  100. package/.opencode/skills/lint/SKILL.md +0 -37
  101. package/.opencode/skills/log-monitor/SKILL.md +0 -44
  102. package/.opencode/skills/mobile-developer/SKILL.md +0 -42
  103. package/.opencode/skills/model-health-check/SKILL.md +0 -37
  104. package/.opencode/skills/multimodal-looker/SKILL.md +0 -45
  105. package/.opencode/skills/orchestrator/SKILL.md +0 -61
  106. package/.opencode/skills/performance-analysis/SKILL.md +0 -37
  107. package/.opencode/skills/performance-engineer/SKILL.md +0 -41
  108. package/.opencode/skills/performance-optimization/SKILL.md +0 -37
  109. package/.opencode/skills/processor-pipeline/SKILL.md +0 -37
  110. package/.opencode/skills/project-analysis/SKILL.md +0 -42
  111. package/.opencode/skills/refactoring-strategies/SKILL.md +0 -37
  112. package/.opencode/skills/registry.json +0 -65
  113. package/.opencode/skills/researcher/SKILL.md +0 -50
  114. package/.opencode/skills/security-audit/SKILL.md +0 -48
  115. package/.opencode/skills/security-scan/SKILL.md +0 -37
  116. package/.opencode/skills/seo-consultant/SKILL.md +0 -43
  117. package/.opencode/skills/session-management/SKILL.md +0 -36
  118. package/.opencode/skills/state-manager/SKILL.md +0 -37
  119. package/.opencode/skills/storyteller/SKILL.md +0 -130
  120. package/.opencode/skills/strategist/SKILL.md +0 -44
  121. package/.opencode/skills/tech-writer/SKILL.md +0 -37
  122. package/.opencode/skills/testing-best-practices/SKILL.md +0 -37
  123. package/.opencode/skills/testing-strategy/SKILL.md +0 -54
  124. package/.opencode/skills/ui-ux-design/SKILL.md +0 -603
  125. package/.opencode/skills/xray-orchestrator/SKILL.md +0 -141
  126. package/.opencode/skills/xray-orchestrator/index.ts +0 -267
  127. package/.opencode/workflows/post-deployment-audit.yml +0 -123
  128. package/dist/.gitignore.default +0 -67
  129. package/dist/AGENTS.md +0 -225
  130. package/dist/CHANGELOG.md +0 -2755
  131. package/dist/LICENSE +0 -21
  132. package/dist/README.md +0 -233
  133. package/dist/SKILLS.md +0 -166
  134. package/dist/agents/architect.d.ts +0 -2
  135. package/dist/agents/architect.js +0 -56
  136. package/dist/agents/backend-engineer.d.ts +0 -8
  137. package/dist/agents/backend-engineer.js +0 -81
  138. package/dist/agents/bug-triage-specialist.d.ts +0 -2
  139. package/dist/agents/bug-triage-specialist.js +0 -74
  140. package/dist/agents/code-analyzer.d.ts +0 -7
  141. package/dist/agents/code-analyzer.js +0 -150
  142. package/dist/agents/code-reviewer.d.ts +0 -2
  143. package/dist/agents/code-reviewer.js +0 -69
  144. package/dist/agents/content-creator.d.ts +0 -9
  145. package/dist/agents/content-creator.js +0 -72
  146. package/dist/agents/database-engineer.d.ts +0 -8
  147. package/dist/agents/database-engineer.js +0 -76
  148. package/dist/agents/devops-engineer.d.ts +0 -8
  149. package/dist/agents/devops-engineer.js +0 -84
  150. package/dist/agents/frontend-engineer.d.ts +0 -8
  151. package/dist/agents/frontend-engineer.js +0 -78
  152. package/dist/agents/frontend-ui-ux-engineer.d.ts +0 -8
  153. package/dist/agents/frontend-ui-ux-engineer.js +0 -64
  154. package/dist/agents/growth-strategist.d.ts +0 -8
  155. package/dist/agents/growth-strategist.js +0 -111
  156. package/dist/agents/index.d.ts +0 -25
  157. package/dist/agents/index.js +0 -47
  158. package/dist/agents/known-names.d.ts +0 -26
  159. package/dist/agents/known-names.js +0 -72
  160. package/dist/agents/librarian-agents-updater.d.ts +0 -30
  161. package/dist/agents/librarian-agents-updater.js +0 -333
  162. package/dist/agents/log-monitor.d.ts +0 -2
  163. package/dist/agents/log-monitor.js +0 -109
  164. package/dist/agents/mobile-developer.d.ts +0 -9
  165. package/dist/agents/mobile-developer.js +0 -102
  166. package/dist/agents/multimodal-looker.d.ts +0 -9
  167. package/dist/agents/multimodal-looker.js +0 -93
  168. package/dist/agents/performance-engineer.d.ts +0 -8
  169. package/dist/agents/performance-engineer.js +0 -86
  170. package/dist/agents/refactorer.d.ts +0 -2
  171. package/dist/agents/refactorer.js +0 -80
  172. package/dist/agents/registry.d.ts +0 -37
  173. package/dist/agents/registry.js +0 -354
  174. package/dist/agents/researcher.d.ts +0 -2
  175. package/dist/agents/researcher.js +0 -83
  176. package/dist/agents/security-auditor.d.ts +0 -2
  177. package/dist/agents/security-auditor.js +0 -158
  178. package/dist/agents/seo-consultant.d.ts +0 -8
  179. package/dist/agents/seo-consultant.js +0 -53
  180. package/dist/agents/strategist.d.ts +0 -7
  181. package/dist/agents/strategist.js +0 -47
  182. package/dist/agents/tech-writer.d.ts +0 -8
  183. package/dist/agents/tech-writer.js +0 -84
  184. package/dist/agents/testing-lead.d.ts +0 -2
  185. package/dist/agents/testing-lead.js +0 -95
  186. package/dist/agents/types.d.ts +0 -45
  187. package/dist/agents/types.js +0 -1
  188. package/dist/analytics/consent-manager.d.ts +0 -92
  189. package/dist/analytics/consent-manager.js +0 -257
  190. package/dist/analytics/emerging-pattern-detector.d.ts +0 -66
  191. package/dist/analytics/emerging-pattern-detector.js +0 -259
  192. package/dist/analytics/pattern-learning-engine.d.ts +0 -79
  193. package/dist/analytics/pattern-learning-engine.js +0 -277
  194. package/dist/analytics/pattern-performance-tracker.d.ts +0 -96
  195. package/dist/analytics/pattern-performance-tracker.js +0 -335
  196. package/dist/analytics/predictive-analytics.d.ts +0 -40
  197. package/dist/analytics/predictive-analytics.js +0 -247
  198. package/dist/analytics/prompt-pattern-analyzer.d.ts +0 -98
  199. package/dist/analytics/prompt-pattern-analyzer.js +0 -370
  200. package/dist/analytics/routing-performance-analyzer.d.ts +0 -100
  201. package/dist/analytics/routing-performance-analyzer.js +0 -355
  202. package/dist/analytics/routing-refiner.d.ts +0 -102
  203. package/dist/analytics/routing-refiner.js +0 -377
  204. package/dist/analytics/simple-pattern-analyzer.d.ts +0 -79
  205. package/dist/analytics/simple-pattern-analyzer.js +0 -296
  206. package/dist/architect/architect-tools.d.ts +0 -70
  207. package/dist/architect/architect-tools.js +0 -437
  208. package/dist/architect/architectural-integrity.d.ts +0 -20
  209. package/dist/architect/architectural-integrity.js +0 -78
  210. package/dist/benchmark/performance-benchmark.d.ts +0 -103
  211. package/dist/benchmark/performance-benchmark.js +0 -373
  212. package/dist/cli/commands/analytics-disable.d.ts +0 -9
  213. package/dist/cli/commands/analytics-disable.js +0 -72
  214. package/dist/cli/commands/analytics-enable-action.d.ts +0 -8
  215. package/dist/cli/commands/analytics-enable-action.js +0 -82
  216. package/dist/cli/commands/analytics-preview.d.ts +0 -9
  217. package/dist/cli/commands/analytics-preview.js +0 -106
  218. package/dist/cli/commands/analytics-status.d.ts +0 -9
  219. package/dist/cli/commands/analytics-status.js +0 -68
  220. package/dist/cli/commands/antigravity-status.d.ts +0 -9
  221. package/dist/cli/commands/antigravity-status.js +0 -106
  222. package/dist/cli/commands/archive-logs.d.ts +0 -23
  223. package/dist/cli/commands/archive-logs.js +0 -160
  224. package/dist/cli/commands/credible-init.d.ts +0 -11
  225. package/dist/cli/commands/credible-init.js +0 -82
  226. package/dist/cli/commands/enforce.d.ts +0 -12
  227. package/dist/cli/commands/enforce.js +0 -78
  228. package/dist/cli/commands/foundry-mint-wear.d.ts +0 -3
  229. package/dist/cli/commands/foundry-mint-wear.js +0 -17
  230. package/dist/cli/commands/govern.d.ts +0 -29
  231. package/dist/cli/commands/govern.js +0 -149
  232. package/dist/cli/commands/grok-install.d.ts +0 -7
  233. package/dist/cli/commands/grok-install.js +0 -16
  234. package/dist/cli/commands/hermes-install.d.ts +0 -2
  235. package/dist/cli/commands/hermes-install.js +0 -90
  236. package/dist/cli/commands/mcp-install.d.ts +0 -4
  237. package/dist/cli/commands/mcp-install.js +0 -253
  238. package/dist/cli/commands/openclaw-install.d.ts +0 -2
  239. package/dist/cli/commands/openclaw-install.js +0 -80
  240. package/dist/cli/commands/opencode-install.d.ts +0 -2
  241. package/dist/cli/commands/opencode-install.js +0 -153
  242. package/dist/cli/commands/plugin-commands.d.ts +0 -18
  243. package/dist/cli/commands/plugin-commands.js +0 -245
  244. package/dist/cli/commands/publish-agent.d.ts +0 -15
  245. package/dist/cli/commands/publish-agent.js +0 -184
  246. package/dist/cli/commands/security-audit.d.ts +0 -23
  247. package/dist/cli/commands/security-audit.js +0 -219
  248. package/dist/cli/commands/skill-install.d.ts +0 -6
  249. package/dist/cli/commands/skill-install.js +0 -522
  250. package/dist/cli/commands/status.d.ts +0 -41
  251. package/dist/cli/commands/status.js +0 -199
  252. package/dist/cli/commands/storyteller.d.ts +0 -19
  253. package/dist/cli/commands/storyteller.js +0 -230
  254. package/dist/cli/index.d.ts +0 -7
  255. package/dist/cli/index.js +0 -996
  256. package/dist/cli/server.d.ts +0 -1
  257. package/dist/cli/server.js +0 -147
  258. package/dist/config/default-agents.d.ts +0 -12
  259. package/dist/config/default-agents.js +0 -16
  260. package/dist/config/routing-mappings.d.ts +0 -26
  261. package/dist/config/routing-mappings.js +0 -151
  262. package/dist/core/activity-logger.d.ts +0 -71
  263. package/dist/core/activity-logger.js +0 -259
  264. package/dist/core/adaptive-kernel.d.ts +0 -108
  265. package/dist/core/adaptive-kernel.js +0 -191
  266. package/dist/core/agent-spawn-gate.d.ts +0 -56
  267. package/dist/core/agent-spawn-gate.js +0 -120
  268. package/dist/core/boot-orchestrator.d.ts +0 -99
  269. package/dist/core/boot-orchestrator.js +0 -809
  270. package/dist/core/bridge.mjs +0 -922
  271. package/dist/core/codex-formatter.d.ts +0 -95
  272. package/dist/core/codex-formatter.js +0 -218
  273. package/dist/core/codex-injector.d.ts +0 -73
  274. package/dist/core/codex-injector.js +0 -423
  275. package/dist/core/config-loader.d.ts +0 -59
  276. package/dist/core/config-loader.js +0 -157
  277. package/dist/core/config-paths.d.ts +0 -66
  278. package/dist/core/config-paths.js +0 -169
  279. package/dist/core/context-loader.d.ts +0 -120
  280. package/dist/core/context-loader.js +0 -268
  281. package/dist/core/context-validator.d.ts +0 -52
  282. package/dist/core/context-validator.js +0 -211
  283. package/dist/core/features-config.d.ts +0 -531
  284. package/dist/core/features-config.js +0 -524
  285. package/dist/core/framework-logger.d.ts +0 -76
  286. package/dist/core/framework-logger.js +0 -275
  287. package/dist/core/index.d.ts +0 -5
  288. package/dist/core/index.js +0 -6
  289. package/dist/core/kernel-patterns.d.ts +0 -129
  290. package/dist/core/kernel-patterns.js +0 -301
  291. package/dist/core/logging-config.d.ts +0 -10
  292. package/dist/core/logging-config.js +0 -43
  293. package/dist/core/model-router.d.ts +0 -56
  294. package/dist/core/model-router.js +0 -134
  295. package/dist/core/orchestrator.d.ts +0 -71
  296. package/dist/core/orchestrator.js +0 -408
  297. package/dist/core/system-prompt-generator.d.ts +0 -34
  298. package/dist/core/system-prompt-generator.js +0 -264
  299. package/dist/core/trace-context.d.ts +0 -12
  300. package/dist/core/trace-context.js +0 -33
  301. package/dist/core/xray-activation.d.ts +0 -14
  302. package/dist/core/xray-activation.js +0 -135
  303. package/dist/delegation/agent-delegator.d.ts +0 -185
  304. package/dist/delegation/agent-delegator.js +0 -768
  305. package/dist/delegation/agent-expertise.d.ts +0 -15
  306. package/dist/delegation/agent-expertise.js +0 -155
  307. package/dist/delegation/analytics/index.d.ts +0 -11
  308. package/dist/delegation/analytics/index.js +0 -11
  309. package/dist/delegation/analytics/learning-engine.d.ts +0 -84
  310. package/dist/delegation/analytics/learning-engine.js +0 -276
  311. package/dist/delegation/analytics/outcome-tracker.d.ts +0 -117
  312. package/dist/delegation/analytics/outcome-tracker.js +0 -278
  313. package/dist/delegation/analytics/routing-analytics.d.ts +0 -60
  314. package/dist/delegation/analytics/routing-analytics.js +0 -192
  315. package/dist/delegation/ast-code-parser.d.ts +0 -173
  316. package/dist/delegation/ast-code-parser.js +0 -877
  317. package/dist/delegation/codebase-context-analyzer.d.ts +0 -164
  318. package/dist/delegation/codebase-context-analyzer.js +0 -1040
  319. package/dist/delegation/complexity-analyzer.d.ts +0 -110
  320. package/dist/delegation/complexity-analyzer.js +0 -281
  321. package/dist/delegation/complexity-core.d.ts +0 -119
  322. package/dist/delegation/complexity-core.js +0 -219
  323. package/dist/delegation/config/types.d.ts +0 -247
  324. package/dist/delegation/config/types.js +0 -6
  325. package/dist/delegation/dependency-graph-builder.d.ts +0 -94
  326. package/dist/delegation/dependency-graph-builder.js +0 -408
  327. package/dist/delegation/index.d.ts +0 -25
  328. package/dist/delegation/index.js +0 -20
  329. package/dist/delegation/metrics-aggregator.d.ts +0 -91
  330. package/dist/delegation/metrics-aggregator.js +0 -334
  331. package/dist/delegation/session-coordinator.d.ts +0 -132
  332. package/dist/delegation/session-coordinator.js +0 -351
  333. package/dist/delegation/strategy-selector.d.ts +0 -27
  334. package/dist/delegation/strategy-selector.js +0 -107
  335. package/dist/delegation/voting-coordinator.d.ts +0 -48
  336. package/dist/delegation/voting-coordinator.js +0 -374
  337. package/dist/delegation/voting-types.d.ts +0 -154
  338. package/dist/delegation/voting-types.js +0 -9
  339. package/dist/delegation/weighted-voting-aggregator.d.ts +0 -36
  340. package/dist/delegation/weighted-voting-aggregator.js +0 -193
  341. package/dist/enforcement/core/index.d.ts +0 -14
  342. package/dist/enforcement/core/index.js +0 -18
  343. package/dist/enforcement/core/rule-executor.d.ts +0 -157
  344. package/dist/enforcement/core/rule-executor.js +0 -364
  345. package/dist/enforcement/core/rule-hierarchy.d.ts +0 -145
  346. package/dist/enforcement/core/rule-hierarchy.js +0 -258
  347. package/dist/enforcement/core/rule-registry.d.ts +0 -196
  348. package/dist/enforcement/core/rule-registry.js +0 -239
  349. package/dist/enforcement/core/violation-fixer.d.ts +0 -105
  350. package/dist/enforcement/core/violation-fixer.js +0 -650
  351. package/dist/enforcement/enforcer-tools.d.ts +0 -85
  352. package/dist/enforcement/enforcer-tools.js +0 -818
  353. package/dist/enforcement/index.d.ts +0 -22
  354. package/dist/enforcement/index.js +0 -40
  355. package/dist/enforcement/loaders/agent-triage-loader.d.ts +0 -98
  356. package/dist/enforcement/loaders/agent-triage-loader.js +0 -221
  357. package/dist/enforcement/loaders/agents-md-validation-loader.d.ts +0 -75
  358. package/dist/enforcement/loaders/agents-md-validation-loader.js +0 -251
  359. package/dist/enforcement/loaders/base-loader.d.ts +0 -82
  360. package/dist/enforcement/loaders/base-loader.js +0 -85
  361. package/dist/enforcement/loaders/codex-loader.d.ts +0 -76
  362. package/dist/enforcement/loaders/codex-loader.js +0 -395
  363. package/dist/enforcement/loaders/index.d.ts +0 -36
  364. package/dist/enforcement/loaders/index.js +0 -39
  365. package/dist/enforcement/loaders/loader-orchestrator.d.ts +0 -96
  366. package/dist/enforcement/loaders/loader-orchestrator.js +0 -167
  367. package/dist/enforcement/loaders/processor-loader.d.ts +0 -59
  368. package/dist/enforcement/loaders/processor-loader.js +0 -112
  369. package/dist/enforcement/rule-enforcer.d.ts +0 -142
  370. package/dist/enforcement/rule-enforcer.js +0 -298
  371. package/dist/enforcement/test-auto-healing.d.ts +0 -83
  372. package/dist/enforcement/test-auto-healing.js +0 -325
  373. package/dist/enforcement/types.d.ts +0 -500
  374. package/dist/enforcement/types.js +0 -29
  375. package/dist/enforcement/validators/architecture-validators.d.ts +0 -154
  376. package/dist/enforcement/validators/architecture-validators.js +0 -599
  377. package/dist/enforcement/validators/base-validator.d.ts +0 -87
  378. package/dist/enforcement/validators/base-validator.js +0 -107
  379. package/dist/enforcement/validators/code-quality-validators.d.ts +0 -88
  380. package/dist/enforcement/validators/code-quality-validators.js +0 -335
  381. package/dist/enforcement/validators/index.d.ts +0 -14
  382. package/dist/enforcement/validators/index.js +0 -20
  383. package/dist/enforcement/validators/security-validators.d.ts +0 -52
  384. package/dist/enforcement/validators/security-validators.js +0 -219
  385. package/dist/enforcement/validators/testing-validators.d.ts +0 -80
  386. package/dist/enforcement/validators/testing-validators.js +0 -252
  387. package/dist/enforcement/validators/validator-registry.d.ts +0 -91
  388. package/dist/enforcement/validators/validator-registry.js +0 -149
  389. package/dist/execution/opencode-cli-invoker.d.ts +0 -8
  390. package/dist/execution/opencode-cli-invoker.js +0 -173
  391. package/dist/execution/proposal-applier.d.ts +0 -24
  392. package/dist/execution/proposal-applier.js +0 -254
  393. package/dist/governance/codex-policy.service.d.ts +0 -56
  394. package/dist/governance/codex-policy.service.js +0 -166
  395. package/dist/governance/governance-core.d.ts +0 -53
  396. package/dist/governance/governance-core.js +0 -168
  397. package/dist/governance/governance-service.d.ts +0 -39
  398. package/dist/governance/governance-service.js +0 -351
  399. package/dist/governance/governance-types.d.ts +0 -90
  400. package/dist/governance/governance-types.js +0 -11
  401. package/dist/governance/llm-governance-provider.d.ts +0 -16
  402. package/dist/governance/llm-governance-provider.js +0 -284
  403. package/dist/governance/local-confer.d.ts +0 -10
  404. package/dist/governance/local-confer.js +0 -27
  405. package/dist/index.d.ts +0 -28
  406. package/dist/index.js +0 -24
  407. package/dist/inference/deploy-verifier.d.ts +0 -26
  408. package/dist/inference/deploy-verifier.js +0 -161
  409. package/dist/inference/index.d.ts +0 -10
  410. package/dist/inference/index.js +0 -5
  411. package/dist/inference/inference-accumulator.d.ts +0 -29
  412. package/dist/inference/inference-accumulator.js +0 -126
  413. package/dist/inference/inference-agent-invoker.d.ts +0 -3
  414. package/dist/inference/inference-agent-invoker.js +0 -67
  415. package/dist/inference/inference-applier.d.ts +0 -4
  416. package/dist/inference/inference-applier.js +0 -178
  417. package/dist/inference/inference-cycle.d.ts +0 -70
  418. package/dist/inference/inference-cycle.js +0 -392
  419. package/dist/inference/inference-proposal-generator.d.ts +0 -3
  420. package/dist/inference/inference-proposal-generator.js +0 -149
  421. package/dist/inference/semantic-patterns.d.ts +0 -7
  422. package/dist/inference/semantic-patterns.js +0 -310
  423. package/dist/inference/session-capture.d.ts +0 -32
  424. package/dist/inference/session-capture.js +0 -308
  425. package/dist/infrastructure/iac-validator.d.ts +0 -150
  426. package/dist/infrastructure/iac-validator.js +0 -465
  427. package/dist/infrastructure/schemas/cloud-schemas.d.ts +0 -482
  428. package/dist/infrastructure/schemas/cloud-schemas.js +0 -488
  429. package/dist/integrations/base/ExampleIntegration.d.ts +0 -46
  430. package/dist/integrations/base/ExampleIntegration.js +0 -180
  431. package/dist/integrations/base/Integration.d.ts +0 -266
  432. package/dist/integrations/base/Integration.js +0 -394
  433. package/dist/integrations/base/README.md +0 -446
  434. package/dist/integrations/base/index.d.ts +0 -11
  435. package/dist/integrations/base/index.js +0 -15
  436. package/dist/integrations/base/registry.d.ts +0 -272
  437. package/dist/integrations/base/registry.js +0 -605
  438. package/dist/integrations/base/types.d.ts +0 -167
  439. package/dist/integrations/base/types.js +0 -117
  440. package/dist/integrations/enforcement-gate.d.ts +0 -44
  441. package/dist/integrations/enforcement-gate.js +0 -348
  442. package/dist/integrations/governance/governance-client.d.ts +0 -75
  443. package/dist/integrations/governance/governance-client.js +0 -315
  444. package/dist/integrations/governance/index.d.ts +0 -98
  445. package/dist/integrations/governance/index.js +0 -365
  446. package/dist/integrations/governance/types.d.ts +0 -238
  447. package/dist/integrations/governance/types.js +0 -96
  448. package/dist/integrations/grok/grok-cli.d.ts +0 -28
  449. package/dist/integrations/grok/grok-cli.js +0 -216
  450. package/dist/integrations/grok/hooks/grok-hook-activity.js +0 -53
  451. package/dist/integrations/grok/hooks/grok-hook-utils.js +0 -372
  452. package/dist/integrations/grok/hooks/post-tool-use.js +0 -118
  453. package/dist/integrations/grok/hooks/pre-tool-use.js +0 -136
  454. package/dist/integrations/grok/hooks/session-start.js +0 -189
  455. package/dist/integrations/grok/plugin/0xray/.mcp.json +0 -35
  456. package/dist/integrations/grok/plugin/0xray/hooks/hooks.json +0 -70
  457. package/dist/integrations/hermes-agent/.mcp.json +0 -32
  458. package/dist/integrations/hermes-agent/__init__.py +0 -790
  459. package/dist/integrations/hermes-agent/__pycache__/__init__.cpython-313.pyc +0 -0
  460. package/dist/integrations/hermes-agent/__pycache__/schemas.cpython-313.pyc +0 -0
  461. package/dist/integrations/hermes-agent/__pycache__/tools.cpython-313.pyc +0 -0
  462. package/dist/integrations/hermes-agent/after-install.md +0 -71
  463. package/dist/integrations/hermes-agent/bridge.mjs +0 -1060
  464. package/dist/integrations/hermes-agent/conftest.py +0 -14
  465. package/dist/integrations/hermes-agent/logs/framework/routing-outcomes.json +0 -1
  466. package/dist/integrations/hermes-agent/plugin.yaml +0 -12
  467. package/dist/integrations/hermes-agent/schemas.py +0 -149
  468. package/dist/integrations/hermes-agent/test_plugin.py +0 -1100
  469. package/dist/integrations/hermes-agent/tools.py +0 -357
  470. package/dist/integrations/hooks/confer-hook-runtime.mjs +0 -49
  471. package/dist/integrations/hooks/delegation-gate-runtime.mjs +0 -110
  472. package/dist/integrations/hooks/pipeline-hook-runtime.mjs +0 -211
  473. package/dist/integrations/hooks/plan-hook-runtime.mjs +0 -68
  474. package/dist/integrations/hooks/station-hook-runtime.cjs +0 -421
  475. package/dist/integrations/hooks/station-hook-runtime.mjs +0 -24
  476. package/dist/integrations/hooks/station-memory-ingest.mjs +0 -45
  477. package/dist/integrations/hooks/station-memory-match.mjs +0 -47
  478. package/dist/integrations/hooks/synthesis-hook-runtime.mjs +0 -50
  479. package/dist/integrations/hooks/user-aside-hook-runtime.mjs +0 -49
  480. package/dist/integrations/openclaw/README.md +0 -134
  481. package/dist/integrations/openclaw/api-server.d.ts +0 -86
  482. package/dist/integrations/openclaw/api-server.js +0 -388
  483. package/dist/integrations/openclaw/client.d.ts +0 -125
  484. package/dist/integrations/openclaw/client.js +0 -499
  485. package/dist/integrations/openclaw/config.d.ts +0 -95
  486. package/dist/integrations/openclaw/config.js +0 -372
  487. package/dist/integrations/openclaw/hooks/pre-tool-gate-runtime.mjs +0 -102
  488. package/dist/integrations/openclaw/hooks/xray-hooks.d.ts +0 -123
  489. package/dist/integrations/openclaw/hooks/xray-hooks.js +0 -279
  490. package/dist/integrations/openclaw/index.d.ts +0 -100
  491. package/dist/integrations/openclaw/index.js +0 -367
  492. package/dist/integrations/openclaw/plugin/xray-pre-tool/index.js +0 -75
  493. package/dist/integrations/openclaw/plugin/xray-pre-tool/openclaw.plugin.json +0 -10
  494. package/dist/integrations/openclaw/plugin/xray-pre-tool/package.json +0 -12
  495. package/dist/integrations/openclaw/pre-tool-gate.d.ts +0 -19
  496. package/dist/integrations/openclaw/pre-tool-gate.js +0 -39
  497. package/dist/integrations/openclaw/types.d.ts +0 -425
  498. package/dist/integrations/openclaw/types.js +0 -152
  499. package/dist/integrations/plugins/index.d.ts +0 -9
  500. package/dist/integrations/plugins/index.js +0 -9
  501. package/dist/integrations/plugins/plugin-integration.d.ts +0 -288
  502. package/dist/integrations/plugins/plugin-integration.js +0 -605
  503. package/dist/integrations/plugins/plugin-registry.d.ts +0 -223
  504. package/dist/integrations/plugins/plugin-registry.js +0 -579
  505. package/dist/mcps/agent-resolver.d.ts +0 -45
  506. package/dist/mcps/agent-resolver.js +0 -105
  507. package/dist/mcps/architect-tools.server.d.ts +0 -16
  508. package/dist/mcps/architect-tools.server.js +0 -217
  509. package/dist/mcps/auto-format.server.d.ts +0 -18
  510. package/dist/mcps/auto-format.server.js +0 -395
  511. package/dist/mcps/boot-orchestrator.server.d.ts +0 -48
  512. package/dist/mcps/boot-orchestrator.server.js +0 -835
  513. package/dist/mcps/config/config-loader.d.ts +0 -56
  514. package/dist/mcps/config/config-loader.js +0 -140
  515. package/dist/mcps/config/config-validator.d.ts +0 -40
  516. package/dist/mcps/config/config-validator.js +0 -101
  517. package/dist/mcps/config/index.d.ts +0 -31
  518. package/dist/mcps/config/index.js +0 -30
  519. package/dist/mcps/config/plugin-server-registry.d.ts +0 -126
  520. package/dist/mcps/config/plugin-server-registry.js +0 -222
  521. package/dist/mcps/config/server-config-registry.d.ts +0 -51
  522. package/dist/mcps/config/server-config-registry.js +0 -349
  523. package/dist/mcps/connection/connection-manager.d.ts +0 -39
  524. package/dist/mcps/connection/connection-manager.js +0 -79
  525. package/dist/mcps/connection/connection-pool.d.ts +0 -64
  526. package/dist/mcps/connection/connection-pool.js +0 -164
  527. package/dist/mcps/connection/mcp-connection.d.ts +0 -66
  528. package/dist/mcps/connection/mcp-connection.js +0 -233
  529. package/dist/mcps/connection/process-spawner.d.ts +0 -24
  530. package/dist/mcps/connection/process-spawner.js +0 -34
  531. package/dist/mcps/enforcer-tools.server.d.ts +0 -26
  532. package/dist/mcps/enforcer-tools.server.js +0 -712
  533. package/dist/mcps/estimation.server.d.ts +0 -19
  534. package/dist/mcps/estimation.server.js +0 -149
  535. package/dist/mcps/framework-compliance-audit.server.d.ts +0 -20
  536. package/dist/mcps/framework-compliance-audit.server.js +0 -471
  537. package/dist/mcps/framework-help.server.d.ts +0 -13
  538. package/dist/mcps/framework-help.server.js +0 -383
  539. package/dist/mcps/governance.server.d.ts +0 -36
  540. package/dist/mcps/governance.server.js +0 -499
  541. package/dist/mcps/in-process-skill-registry.d.ts +0 -20
  542. package/dist/mcps/in-process-skill-registry.js +0 -48
  543. package/dist/mcps/index.d.ts +0 -17
  544. package/dist/mcps/index.js +0 -65
  545. package/dist/mcps/knowledge-skills/api-design.server.d.ts +0 -13
  546. package/dist/mcps/knowledge-skills/api-design.server.js +0 -92
  547. package/dist/mcps/knowledge-skills/architecture-patterns.server.d.ts +0 -13
  548. package/dist/mcps/knowledge-skills/architecture-patterns.server.js +0 -82
  549. package/dist/mcps/knowledge-skills/bug-triage-specialist.server.d.ts +0 -31
  550. package/dist/mcps/knowledge-skills/bug-triage-specialist.server.js +0 -434
  551. package/dist/mcps/knowledge-skills/code-analyzer.server.d.ts +0 -29
  552. package/dist/mcps/knowledge-skills/code-analyzer.server.js +0 -578
  553. package/dist/mcps/knowledge-skills/code-review.server.d.ts +0 -44
  554. package/dist/mcps/knowledge-skills/code-review.server.js +0 -783
  555. package/dist/mcps/knowledge-skills/content-creator.server.d.ts +0 -11
  556. package/dist/mcps/knowledge-skills/content-creator.server.js +0 -234
  557. package/dist/mcps/knowledge-skills/database-design.server.d.ts +0 -41
  558. package/dist/mcps/knowledge-skills/database-design.server.js +0 -788
  559. package/dist/mcps/knowledge-skills/devops-deployment.server.d.ts +0 -41
  560. package/dist/mcps/knowledge-skills/devops-deployment.server.js +0 -1147
  561. package/dist/mcps/knowledge-skills/git-workflow.server.d.ts +0 -13
  562. package/dist/mcps/knowledge-skills/git-workflow.server.js +0 -83
  563. package/dist/mcps/knowledge-skills/growth-strategist.server.d.ts +0 -11
  564. package/dist/mcps/knowledge-skills/growth-strategist.server.js +0 -339
  565. package/dist/mcps/knowledge-skills/log-monitor.server.d.ts +0 -22
  566. package/dist/mcps/knowledge-skills/log-monitor.server.js +0 -431
  567. package/dist/mcps/knowledge-skills/mobile-development.server.d.ts +0 -17
  568. package/dist/mcps/knowledge-skills/mobile-development.server.js +0 -495
  569. package/dist/mcps/knowledge-skills/multimodal-looker.server.d.ts +0 -53
  570. package/dist/mcps/knowledge-skills/multimodal-looker.server.js +0 -1028
  571. package/dist/mcps/knowledge-skills/performance-optimization.server.d.ts +0 -69
  572. package/dist/mcps/knowledge-skills/performance-optimization.server.js +0 -1537
  573. package/dist/mcps/knowledge-skills/project-analysis.server.d.ts +0 -35
  574. package/dist/mcps/knowledge-skills/project-analysis.server.js +0 -724
  575. package/dist/mcps/knowledge-skills/refactoring-strategies.server.d.ts +0 -31
  576. package/dist/mcps/knowledge-skills/refactoring-strategies.server.js +0 -762
  577. package/dist/mcps/knowledge-skills/security-audit.server.d.ts +0 -46
  578. package/dist/mcps/knowledge-skills/security-audit.server.js +0 -684
  579. package/dist/mcps/knowledge-skills/seo-consultant.server.d.ts +0 -24
  580. package/dist/mcps/knowledge-skills/seo-consultant.server.js +0 -745
  581. package/dist/mcps/knowledge-skills/session-management.server.d.ts +0 -22
  582. package/dist/mcps/knowledge-skills/session-management.server.js +0 -394
  583. package/dist/mcps/knowledge-skills/skill-invocation.server.d.ts +0 -32
  584. package/dist/mcps/knowledge-skills/skill-invocation.server.js +0 -454
  585. package/dist/mcps/knowledge-skills/storyteller.server.d.ts +0 -11
  586. package/dist/mcps/knowledge-skills/storyteller.server.js +0 -167
  587. package/dist/mcps/knowledge-skills/strategist.server.d.ts +0 -15
  588. package/dist/mcps/knowledge-skills/strategist.server.js +0 -172
  589. package/dist/mcps/knowledge-skills/tech-writer.server.d.ts +0 -45
  590. package/dist/mcps/knowledge-skills/tech-writer.server.js +0 -1016
  591. package/dist/mcps/knowledge-skills/testing-best-practices.server.d.ts +0 -34
  592. package/dist/mcps/knowledge-skills/testing-best-practices.server.js +0 -694
  593. package/dist/mcps/knowledge-skills/testing-strategy.server.d.ts +0 -45
  594. package/dist/mcps/knowledge-skills/testing-strategy.server.js +0 -689
  595. package/dist/mcps/knowledge-skills/ui-ux-design.server.d.ts +0 -67
  596. package/dist/mcps/knowledge-skills/ui-ux-design.server.js +0 -1265
  597. package/dist/mcps/lint.server.d.ts +0 -15
  598. package/dist/mcps/lint.server.js +0 -340
  599. package/dist/mcps/mcp-client.d.ts +0 -157
  600. package/dist/mcps/mcp-client.js +0 -574
  601. package/dist/mcps/model-health-check.server.d.ts +0 -14
  602. package/dist/mcps/model-health-check.server.js +0 -201
  603. package/dist/mcps/orchestrator/aside-context.d.ts +0 -21
  604. package/dist/mcps/orchestrator/aside-context.js +0 -207
  605. package/dist/mcps/orchestrator/config/agent-capabilities.d.ts +0 -39
  606. package/dist/mcps/orchestrator/config/agent-capabilities.js +0 -128
  607. package/dist/mcps/orchestrator/config/memory-routing-bridge.d.ts +0 -12
  608. package/dist/mcps/orchestrator/config/memory-routing-bridge.js +0 -71
  609. package/dist/mcps/orchestrator/execution/execution-planner.d.ts +0 -64
  610. package/dist/mcps/orchestrator/execution/execution-planner.js +0 -320
  611. package/dist/mcps/orchestrator/handlers/complexity-handler.d.ts +0 -55
  612. package/dist/mcps/orchestrator/handlers/complexity-handler.js +0 -285
  613. package/dist/mcps/orchestrator/handlers/status-handler.d.ts +0 -71
  614. package/dist/mcps/orchestrator/handlers/status-handler.js +0 -239
  615. package/dist/mcps/orchestrator/handlers/task-handler.d.ts +0 -59
  616. package/dist/mcps/orchestrator/handlers/task-handler.js +0 -354
  617. package/dist/mcps/orchestrator/index.d.ts +0 -6
  618. package/dist/mcps/orchestrator/index.js +0 -5
  619. package/dist/mcps/orchestrator/server.d.ts +0 -38
  620. package/dist/mcps/orchestrator/server.js +0 -538
  621. package/dist/mcps/orchestrator/types.d.ts +0 -131
  622. package/dist/mcps/orchestrator/types.js +0 -6
  623. package/dist/mcps/orchestrator.server.d.ts +0 -10
  624. package/dist/mcps/orchestrator.server.js +0 -20
  625. package/dist/mcps/performance-analysis.server.d.ts +0 -25
  626. package/dist/mcps/performance-analysis.server.js +0 -488
  627. package/dist/mcps/processor-pipeline.server.d.ts +0 -29
  628. package/dist/mcps/processor-pipeline.server.js +0 -531
  629. package/dist/mcps/protocol/protocol-constants.d.ts +0 -46
  630. package/dist/mcps/protocol/protocol-constants.js +0 -46
  631. package/dist/mcps/registry.json +0 -109
  632. package/dist/mcps/researcher-confidence.d.ts +0 -21
  633. package/dist/mcps/researcher-confidence.js +0 -92
  634. package/dist/mcps/researcher.server.d.ts +0 -29
  635. package/dist/mcps/researcher.server.js +0 -419
  636. package/dist/mcps/security-scan.server.d.ts +0 -19
  637. package/dist/mcps/security-scan.server.js +0 -517
  638. package/dist/mcps/shared/knowledge-skill-base.d.ts +0 -17
  639. package/dist/mcps/shared/knowledge-skill-base.js +0 -52
  640. package/dist/mcps/shared/prompt-security-validator.d.ts +0 -44
  641. package/dist/mcps/shared/prompt-security-validator.js +0 -148
  642. package/dist/mcps/shared/security-scanner.d.ts +0 -119
  643. package/dist/mcps/shared/security-scanner.js +0 -429
  644. package/dist/mcps/simulation/index.d.ts +0 -12
  645. package/dist/mcps/simulation/index.js +0 -12
  646. package/dist/mcps/simulation/server-simulations.d.ts +0 -39
  647. package/dist/mcps/simulation/server-simulations.js +0 -219
  648. package/dist/mcps/simulation/simulation-engine.d.ts +0 -51
  649. package/dist/mcps/simulation/simulation-engine.js +0 -96
  650. package/dist/mcps/state-manager.server.d.ts +0 -27
  651. package/dist/mcps/state-manager.server.js +0 -609
  652. package/dist/mcps/tools/index.d.ts +0 -14
  653. package/dist/mcps/tools/index.js +0 -14
  654. package/dist/mcps/tools/tool-cache.d.ts +0 -53
  655. package/dist/mcps/tools/tool-cache.js +0 -112
  656. package/dist/mcps/tools/tool-discovery.d.ts +0 -27
  657. package/dist/mcps/tools/tool-discovery.js +0 -65
  658. package/dist/mcps/tools/tool-executor.d.ts +0 -41
  659. package/dist/mcps/tools/tool-executor.js +0 -75
  660. package/dist/mcps/tools/tool-registry.d.ts +0 -42
  661. package/dist/mcps/tools/tool-registry.js +0 -67
  662. package/dist/mcps/types/index.d.ts +0 -13
  663. package/dist/mcps/types/index.js +0 -15
  664. package/dist/mcps/types/json-rpc.types.d.ts +0 -35
  665. package/dist/mcps/types/json-rpc.types.js +0 -7
  666. package/dist/mcps/types/mcp.types.d.ts +0 -105
  667. package/dist/mcps/types/mcp.types.js +0 -7
  668. package/dist/memory-routing/index.d.ts +0 -6
  669. package/dist/memory-routing/index.js +0 -4
  670. package/dist/memory-routing/null-provider.d.ts +0 -14
  671. package/dist/memory-routing/null-provider.js +0 -63
  672. package/dist/memory-routing/provider-loader.d.ts +0 -6
  673. package/dist/memory-routing/provider-loader.js +0 -165
  674. package/dist/memory-routing/provider-registry.d.ts +0 -8
  675. package/dist/memory-routing/provider-registry.js +0 -41
  676. package/dist/memory-routing/types.d.ts +0 -111
  677. package/dist/memory-routing/types.js +0 -7
  678. package/dist/memory-routing/validate-config.d.ts +0 -7
  679. package/dist/memory-routing/validate-config.js +0 -32
  680. package/dist/metrics/agent-metrics.d.ts +0 -169
  681. package/dist/metrics/agent-metrics.js +0 -574
  682. package/dist/metrics/index.d.ts +0 -6
  683. package/dist/metrics/index.js +0 -6
  684. package/dist/monitoring/advanced-profiler.d.ts +0 -51
  685. package/dist/monitoring/advanced-profiler.js +0 -232
  686. package/dist/monitoring/memory-monitor.d.ts +0 -113
  687. package/dist/monitoring/memory-monitor.js +0 -315
  688. package/dist/monitoring/nudge-watchdog.d.ts +0 -87
  689. package/dist/monitoring/nudge-watchdog.js +0 -355
  690. package/dist/monitoring/test-auto-generation-monitor.d.ts +0 -64
  691. package/dist/monitoring/test-auto-generation-monitor.js +0 -157
  692. package/dist/nucleus/aside-worktree.d.ts +0 -41
  693. package/dist/nucleus/aside-worktree.js +0 -164
  694. package/dist/nucleus/autonomy-kernel.d.ts +0 -55
  695. package/dist/nucleus/autonomy-kernel.js +0 -234
  696. package/dist/nucleus/confer.d.ts +0 -57
  697. package/dist/nucleus/confer.js +0 -322
  698. package/dist/nucleus/default-plugins.d.ts +0 -17
  699. package/dist/nucleus/default-plugins.js +0 -173
  700. package/dist/nucleus/delegation-gate.d.ts +0 -105
  701. package/dist/nucleus/delegation-gate.js +0 -582
  702. package/dist/nucleus/govern-http.d.ts +0 -59
  703. package/dist/nucleus/govern-http.js +0 -175
  704. package/dist/nucleus/index.d.ts +0 -17
  705. package/dist/nucleus/index.js +0 -12
  706. package/dist/nucleus/kernel.d.ts +0 -51
  707. package/dist/nucleus/kernel.js +0 -62
  708. package/dist/nucleus/lead-dev-plan-persistence.d.ts +0 -70
  709. package/dist/nucleus/lead-dev-plan-persistence.js +0 -402
  710. package/dist/nucleus/pending-delegations.d.ts +0 -71
  711. package/dist/nucleus/pending-delegations.js +0 -285
  712. package/dist/nucleus/plugin-registry.d.ts +0 -132
  713. package/dist/nucleus/plugin-registry.js +0 -175
  714. package/dist/nucleus/spawn-plan-resolution.d.ts +0 -20
  715. package/dist/nucleus/spawn-plan-resolution.js +0 -42
  716. package/dist/nucleus/suit-temperament.d.ts +0 -40
  717. package/dist/nucleus/suit-temperament.js +0 -157
  718. package/dist/nucleus/synthesis-completion.d.ts +0 -6
  719. package/dist/nucleus/synthesis-completion.js +0 -29
  720. package/dist/nucleus/synthesis-consult-receipt.d.ts +0 -32
  721. package/dist/nucleus/synthesis-consult-receipt.js +0 -171
  722. package/dist/nucleus/synthesis-context.d.ts +0 -31
  723. package/dist/nucleus/synthesis-context.js +0 -86
  724. package/dist/nucleus/synthesis.d.ts +0 -54
  725. package/dist/nucleus/synthesis.js +0 -196
  726. package/dist/nucleus/thin-dispatch.d.ts +0 -33
  727. package/dist/nucleus/thin-dispatch.js +0 -85
  728. package/dist/nucleus/user-aside.d.ts +0 -70
  729. package/dist/nucleus/user-aside.js +0 -393
  730. package/dist/orchestrator/agent-spawn-governor.d.ts +0 -126
  731. package/dist/orchestrator/agent-spawn-governor.js +0 -558
  732. package/dist/orchestrator/enhanced-multi-agent-orchestrator.d.ts +0 -156
  733. package/dist/orchestrator/enhanced-multi-agent-orchestrator.js +0 -399
  734. package/dist/orchestrator/intelligent-commit-batcher.d.ts +0 -114
  735. package/dist/orchestrator/intelligent-commit-batcher.js +0 -344
  736. package/dist/orchestrator/multi-agent-orchestration-coordinator.d.ts +0 -126
  737. package/dist/orchestrator/multi-agent-orchestration-coordinator.js +0 -455
  738. package/dist/orchestrator/orchestrator.d.ts +0 -141
  739. package/dist/orchestrator/orchestrator.js +0 -648
  740. package/dist/orchestrator/self-direction-activation.d.ts +0 -108
  741. package/dist/orchestrator/self-direction-activation.js +0 -244
  742. package/dist/orchestrator/universal-librarian-consultation.d.ts +0 -98
  743. package/dist/orchestrator/universal-librarian-consultation.js +0 -216
  744. package/dist/orchestrator/universal-registry-bridge.d.ts +0 -84
  745. package/dist/orchestrator/universal-registry-bridge.js +0 -246
  746. package/dist/performance/performance-budget-enforcer.d.ts +0 -157
  747. package/dist/performance/performance-budget-enforcer.js +0 -433
  748. package/dist/performance/performance-regression-tester.d.ts +0 -107
  749. package/dist/performance/performance-regression-tester.js +0 -341
  750. package/dist/plugin/plugin-codex-context.d.ts +0 -18
  751. package/dist/plugin/plugin-codex-context.js +0 -87
  752. package/dist/plugin/plugin-helpers.d.ts +0 -23
  753. package/dist/plugin/plugin-helpers.js +0 -155
  754. package/dist/plugin/plugin-logger.d.ts +0 -8
  755. package/dist/plugin/plugin-logger.js +0 -46
  756. package/dist/plugin/plugin-modules.d.ts +0 -11
  757. package/dist/plugin/plugin-modules.js +0 -144
  758. package/dist/plugin/plugin-quality-gate.d.ts +0 -11
  759. package/dist/plugin/plugin-quality-gate.js +0 -88
  760. package/dist/plugin/plugin-types.d.ts +0 -93
  761. package/dist/plugin/plugin-types.js +0 -1
  762. package/dist/plugin/xray-codex-injection.d.ts +0 -39
  763. package/dist/plugin/xray-codex-injection.js +0 -399
  764. package/dist/postprocessor/PostProcessor.d.ts +0 -108
  765. package/dist/postprocessor/PostProcessor.js +0 -1053
  766. package/dist/postprocessor/analysis/CodeChangeAnalyzer.d.ts +0 -11
  767. package/dist/postprocessor/analysis/CodeChangeAnalyzer.js +0 -50
  768. package/dist/postprocessor/analysis/FailureAnalysisEngine.d.ts +0 -39
  769. package/dist/postprocessor/analysis/FailureAnalysisEngine.js +0 -245
  770. package/dist/postprocessor/autofix/AutoFixEngine.d.ts +0 -48
  771. package/dist/postprocessor/autofix/AutoFixEngine.js +0 -254
  772. package/dist/postprocessor/autofix/FixValidator.d.ts +0 -23
  773. package/dist/postprocessor/autofix/FixValidator.js +0 -56
  774. package/dist/postprocessor/config/ProcessorConfigLoader.d.ts +0 -44
  775. package/dist/postprocessor/config/ProcessorConfigLoader.js +0 -16
  776. package/dist/postprocessor/config.d.ts +0 -6
  777. package/dist/postprocessor/config.js +0 -65
  778. package/dist/postprocessor/escalation/EscalationEngine.d.ts +0 -154
  779. package/dist/postprocessor/escalation/EscalationEngine.js +0 -492
  780. package/dist/postprocessor/integration.d.ts +0 -156
  781. package/dist/postprocessor/integration.js +0 -194
  782. package/dist/postprocessor/metamorphosis/SelfProposalEngine.d.ts +0 -87
  783. package/dist/postprocessor/metamorphosis/SelfProposalEngine.js +0 -472
  784. package/dist/postprocessor/metamorphosis/index.d.ts +0 -2
  785. package/dist/postprocessor/metamorphosis/index.js +0 -1
  786. package/dist/postprocessor/monitoring/MonitoringEngine.d.ts +0 -40
  787. package/dist/postprocessor/monitoring/MonitoringEngine.js +0 -125
  788. package/dist/postprocessor/redeploy/RedeployCoordinator.d.ts +0 -91
  789. package/dist/postprocessor/redeploy/RedeployCoordinator.js +0 -342
  790. package/dist/postprocessor/redeploy/RetryHandler.d.ts +0 -49
  791. package/dist/postprocessor/redeploy/RetryHandler.js +0 -118
  792. package/dist/postprocessor/services/RegressionAnalysisService.d.ts +0 -39
  793. package/dist/postprocessor/services/RegressionAnalysisService.js +0 -130
  794. package/dist/postprocessor/success/SuccessHandler.d.ts +0 -57
  795. package/dist/postprocessor/success/SuccessHandler.js +0 -134
  796. package/dist/postprocessor/triggers/APITrigger.d.ts +0 -34
  797. package/dist/postprocessor/triggers/APITrigger.js +0 -114
  798. package/dist/postprocessor/triggers/GitHookTrigger.d.ts +0 -38
  799. package/dist/postprocessor/triggers/GitHookTrigger.js +0 -557
  800. package/dist/postprocessor/triggers/WebhookTrigger.d.ts +0 -46
  801. package/dist/postprocessor/triggers/WebhookTrigger.js +0 -210
  802. package/dist/postprocessor/types.d.ts +0 -227
  803. package/dist/postprocessor/types.js +0 -4
  804. package/dist/processors/doc-write-guard.d.ts +0 -6
  805. package/dist/processors/doc-write-guard.js +0 -46
  806. package/dist/processors/implementations/agents-md-validation-processor.d.ts +0 -62
  807. package/dist/processors/implementations/agents-md-validation-processor.js +0 -285
  808. package/dist/processors/implementations/async-pattern-processor.d.ts +0 -47
  809. package/dist/processors/implementations/async-pattern-processor.js +0 -157
  810. package/dist/processors/implementations/codex-compliance-processor.d.ts +0 -7
  811. package/dist/processors/implementations/codex-compliance-processor.js +0 -57
  812. package/dist/processors/implementations/commit-batcher-processor.d.ts +0 -13
  813. package/dist/processors/implementations/commit-batcher-processor.js +0 -71
  814. package/dist/processors/implementations/console-log-guard-processor.d.ts +0 -32
  815. package/dist/processors/implementations/console-log-guard-processor.js +0 -162
  816. package/dist/processors/implementations/coverage-analysis-processor.d.ts +0 -19
  817. package/dist/processors/implementations/coverage-analysis-processor.js +0 -137
  818. package/dist/processors/implementations/error-boundary-processor.d.ts +0 -7
  819. package/dist/processors/implementations/error-boundary-processor.js +0 -44
  820. package/dist/processors/implementations/inference-improvement-processor.d.ts +0 -36
  821. package/dist/processors/implementations/inference-improvement-processor.js +0 -262
  822. package/dist/processors/implementations/log-protection-processor.d.ts +0 -29
  823. package/dist/processors/implementations/log-protection-processor.js +0 -117
  824. package/dist/processors/implementations/nudge-processor.d.ts +0 -21
  825. package/dist/processors/implementations/nudge-processor.js +0 -129
  826. package/dist/processors/implementations/performance-budget-processor.d.ts +0 -49
  827. package/dist/processors/implementations/performance-budget-processor.js +0 -216
  828. package/dist/processors/implementations/postprocessor-chain-validator.d.ts +0 -45
  829. package/dist/processors/implementations/postprocessor-chain-validator.js +0 -148
  830. package/dist/processors/implementations/pre-validate-processor.d.ts +0 -7
  831. package/dist/processors/implementations/pre-validate-processor.js +0 -18
  832. package/dist/processors/implementations/publish-preflight-processor.d.ts +0 -37
  833. package/dist/processors/implementations/publish-preflight-processor.js +0 -240
  834. package/dist/processors/implementations/refactoring-logging-processor-wrapper.d.ts +0 -7
  835. package/dist/processors/implementations/refactoring-logging-processor-wrapper.js +0 -33
  836. package/dist/processors/implementations/refactoring-logging-processor.d.ts +0 -31
  837. package/dist/processors/implementations/refactoring-logging-processor.js +0 -96
  838. package/dist/processors/implementations/regression-testing-processor.d.ts +0 -20
  839. package/dist/processors/implementations/regression-testing-processor.js +0 -59
  840. package/dist/processors/implementations/session-capture-processor.d.ts +0 -14
  841. package/dist/processors/implementations/session-capture-processor.js +0 -37
  842. package/dist/processors/implementations/session-summary-processor.d.ts +0 -26
  843. package/dist/processors/implementations/session-summary-processor.js +0 -125
  844. package/dist/processors/implementations/spawn-governance-processor.d.ts +0 -57
  845. package/dist/processors/implementations/spawn-governance-processor.js +0 -218
  846. package/dist/processors/implementations/state-validation-processor.d.ts +0 -11
  847. package/dist/processors/implementations/state-validation-processor.js +0 -15
  848. package/dist/processors/implementations/storytelling-trigger-processor.d.ts +0 -40
  849. package/dist/processors/implementations/storytelling-trigger-processor.js +0 -563
  850. package/dist/processors/implementations/test-auto-creation-processor.d.ts +0 -16
  851. package/dist/processors/implementations/test-auto-creation-processor.js +0 -483
  852. package/dist/processors/implementations/test-execution-processor.d.ts +0 -11
  853. package/dist/processors/implementations/test-execution-processor.js +0 -132
  854. package/dist/processors/implementations/typescript-compilation-processor.d.ts +0 -37
  855. package/dist/processors/implementations/typescript-compilation-processor.js +0 -86
  856. package/dist/processors/implementations/version-compliance-processor.d.ts +0 -80
  857. package/dist/processors/implementations/version-compliance-processor.js +0 -222
  858. package/dist/processors/processor-interfaces.d.ts +0 -126
  859. package/dist/processors/processor-interfaces.js +0 -125
  860. package/dist/processors/processor-manager.d.ts +0 -80
  861. package/dist/processors/processor-manager.js +0 -826
  862. package/dist/processors/processor-types.d.ts +0 -189
  863. package/dist/processors/processor-types.js +0 -11
  864. package/dist/public/XrayService.d.ts +0 -17
  865. package/dist/public/XrayService.js +0 -40
  866. package/dist/public/about.html +0 -228
  867. package/dist/public/enterprise.html +0 -27
  868. package/dist/public/features.html +0 -102
  869. package/dist/public/index.d.ts +0 -4
  870. package/dist/public/index.html +0 -145
  871. package/dist/public/index.js +0 -2
  872. package/dist/reporting/framework-reporting-system.d.ts +0 -19
  873. package/dist/reporting/framework-reporting-system.js +0 -187
  874. package/dist/reporting/log-parser.d.ts +0 -10
  875. package/dist/reporting/log-parser.js +0 -281
  876. package/dist/reporting/metrics.d.ts +0 -15
  877. package/dist/reporting/metrics.js +0 -202
  878. package/dist/reporting/report-formatter.d.ts +0 -5
  879. package/dist/reporting/report-formatter.js +0 -146
  880. package/dist/reporting/types.d.ts +0 -102
  881. package/dist/reporting/types.js +0 -1
  882. package/dist/scripts/activate-kernel-pipeline.d.ts +0 -7
  883. package/dist/scripts/activate-kernel-pipeline.js +0 -101
  884. package/dist/scripts/integration.d.ts +0 -36
  885. package/dist/scripts/integration.js +0 -233
  886. package/dist/scripts/pre-command +0 -26
  887. package/dist/scripts/pre-command.mjs +0 -358
  888. package/dist/security/comprehensive-security-audit.d.ts +0 -157
  889. package/dist/security/comprehensive-security-audit.js +0 -1004
  890. package/dist/security/index.d.ts +0 -13
  891. package/dist/security/index.js +0 -13
  892. package/dist/security/prompt-security-validator.d.ts +0 -44
  893. package/dist/security/prompt-security-validator.js +0 -148
  894. package/dist/security/security-agent-coordinator.d.ts +0 -71
  895. package/dist/security/security-agent-coordinator.js +0 -203
  896. package/dist/security/security-auditor.d.ts +0 -55
  897. package/dist/security/security-auditor.js +0 -583
  898. package/dist/security/security-hardener.d.ts +0 -61
  899. package/dist/security/security-hardener.js +0 -169
  900. package/dist/security/security-hardening-system.d.ts +0 -238
  901. package/dist/security/security-hardening-system.js +0 -726
  902. package/dist/security/security-headers.d.ts +0 -63
  903. package/dist/security/security-headers.js +0 -117
  904. package/dist/security/security-orchestration-layer.d.ts +0 -118
  905. package/dist/security/security-orchestration-layer.js +0 -495
  906. package/dist/security/security-scanner.d.ts +0 -119
  907. package/dist/security/security-scanner.js +0 -429
  908. package/dist/services/inference-tuner.d.ts +0 -76
  909. package/dist/services/inference-tuner.js +0 -300
  910. package/dist/session/index.d.ts +0 -3
  911. package/dist/session/index.js +0 -3
  912. package/dist/session/session-cleanup-manager.d.ts +0 -117
  913. package/dist/session/session-cleanup-manager.js +0 -365
  914. package/dist/session/session-monitor.d.ts +0 -132
  915. package/dist/session/session-monitor.js +0 -502
  916. package/dist/session/session-state-manager.d.ts +0 -144
  917. package/dist/session/session-state-manager.js +0 -521
  918. package/dist/skills/api-design/SKILL.md +0 -37
  919. package/dist/skills/architect-tools/SKILL.md +0 -37
  920. package/dist/skills/architecture-patterns/SKILL.md +0 -37
  921. package/dist/skills/auto-format/SKILL.md +0 -37
  922. package/dist/skills/backend-engineer/SKILL.md +0 -49
  923. package/dist/skills/boot-orchestrator/SKILL.md +0 -33
  924. package/dist/skills/bug-triage/SKILL.md +0 -43
  925. package/dist/skills/code-analyzer/SKILL.md +0 -45
  926. package/dist/skills/code-review/SKILL.md +0 -52
  927. package/dist/skills/content-creator/SKILL.md +0 -38
  928. package/dist/skills/database-engineer/SKILL.md +0 -46
  929. package/dist/skills/devops-engineer/SKILL.md +0 -49
  930. package/dist/skills/enforcer/SKILL.md +0 -37
  931. package/dist/skills/framework-compliance-audit/SKILL.md +0 -37
  932. package/dist/skills/frontend-engineer/SKILL.md +0 -49
  933. package/dist/skills/frontend-ui-ux-engineer/SKILL.md +0 -41
  934. package/dist/skills/git-workflow/SKILL.md +0 -37
  935. package/dist/skills/growth-strategist/SKILL.md +0 -48
  936. package/dist/skills/hermes-agent/SKILL.md +0 -212
  937. package/dist/skills/inference-improve/SKILL.md +0 -97
  938. package/dist/skills/lint/SKILL.md +0 -37
  939. package/dist/skills/log-monitor/SKILL.md +0 -44
  940. package/dist/skills/mobile-developer/SKILL.md +0 -42
  941. package/dist/skills/model-health-check/SKILL.md +0 -37
  942. package/dist/skills/multimodal-looker/SKILL.md +0 -45
  943. package/dist/skills/orchestrator/SKILL.md +0 -61
  944. package/dist/skills/performance-analysis/SKILL.md +0 -37
  945. package/dist/skills/performance-engineer/SKILL.md +0 -41
  946. package/dist/skills/performance-optimization/SKILL.md +0 -37
  947. package/dist/skills/processor-pipeline/SKILL.md +0 -37
  948. package/dist/skills/project-analysis/SKILL.md +0 -42
  949. package/dist/skills/refactoring-strategies/SKILL.md +0 -37
  950. package/dist/skills/registry.json +0 -65
  951. package/dist/skills/researcher/SKILL.md +0 -50
  952. package/dist/skills/security-audit/SKILL.md +0 -48
  953. package/dist/skills/security-scan/SKILL.md +0 -37
  954. package/dist/skills/seo-consultant/SKILL.md +0 -43
  955. package/dist/skills/session-management/SKILL.md +0 -36
  956. package/dist/skills/state-manager/SKILL.md +0 -37
  957. package/dist/skills/storyteller/SKILL.md +0 -130
  958. package/dist/skills/strategist/SKILL.md +0 -44
  959. package/dist/skills/tech-writer/SKILL.md +0 -37
  960. package/dist/skills/testing-best-practices/SKILL.md +0 -37
  961. package/dist/skills/testing-strategy/SKILL.md +0 -54
  962. package/dist/skills/ui-ux-design/SKILL.md +0 -603
  963. package/dist/skills/xray-orchestrator/SKILL.md +0 -141
  964. package/dist/skills/xray-orchestrator/index.d.ts +0 -12
  965. package/dist/skills/xray-orchestrator/index.js +0 -223
  966. package/dist/state/context-providers.d.ts +0 -4
  967. package/dist/state/context-providers.js +0 -1
  968. package/dist/state/index.d.ts +0 -4
  969. package/dist/state/index.js +0 -7
  970. package/dist/state/state-manager.d.ts +0 -41
  971. package/dist/state/state-manager.js +0 -207
  972. package/dist/state/state-types.d.ts +0 -5
  973. package/dist/state/state-types.js +0 -1
  974. package/dist/testing/memory-regression-suite.d.ts +0 -105
  975. package/dist/testing/memory-regression-suite.js +0 -258
  976. package/dist/tools/assess-complexity-tool.d.ts +0 -28
  977. package/dist/tools/assess-complexity-tool.js +0 -44
  978. package/dist/tools/query-routing-tool.d.ts +0 -17
  979. package/dist/tools/query-routing-tool.js +0 -59
  980. package/dist/types/metamorphosis.d.ts +0 -21
  981. package/dist/types/metamorphosis.js +0 -6
  982. package/dist/utils/batch-operations.d.ts +0 -25
  983. package/dist/utils/batch-operations.js +0 -292
  984. package/dist/utils/codex-parser.d.ts +0 -60
  985. package/dist/utils/codex-parser.js +0 -444
  986. package/dist/utils/command-runner.d.ts +0 -32
  987. package/dist/utils/command-runner.js +0 -96
  988. package/dist/utils/import-resolver.d.ts +0 -54
  989. package/dist/utils/import-resolver.js +0 -189
  990. package/dist/utils/language-detector.d.ts +0 -43
  991. package/dist/utils/language-detector.js +0 -382
  992. package/dist/utils/path-resolver.d.ts +0 -48
  993. package/dist/utils/path-resolver.js +0 -112
  994. package/dist/utils/shutdown-handler.d.ts +0 -26
  995. package/dist/utils/shutdown-handler.js +0 -74
  996. package/dist/utils/task-graph.d.ts +0 -29
  997. package/dist/utils/task-graph.js +0 -106
  998. package/dist/utils/test-template-generator.d.ts +0 -25
  999. package/dist/utils/test-template-generator.js +0 -178
  1000. package/dist/utils/token-manager.d.ts +0 -48
  1001. package/dist/utils/token-manager.js +0 -163
  1002. package/dist/validation/agent-config-validator.d.ts +0 -110
  1003. package/dist/validation/agent-config-validator.js +0 -280
  1004. package/dist/validation/estimation-validator.d.ts +0 -61
  1005. package/dist/validation/estimation-validator.js +0 -241
  1006. package/dist/validation/orchestration-flow-validator.d.ts +0 -87
  1007. package/dist/validation/orchestration-flow-validator.js +0 -606
  1008. package/dist/validation/report-content-validator.d.ts +0 -42
  1009. 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 };