0xray 3.1.1 → 3.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (309) hide show
  1. package/.opencode/codex.codex +1 -1
  2. package/.opencode/commands/auto-format.md +3 -3
  3. package/.opencode/commands/auto-summary-capture.md +2 -2
  4. package/.opencode/commands/enforcer-daily-scan.md +3 -3
  5. package/.opencode/commands/framework-compliance-audit.md +4 -4
  6. package/.opencode/commands/interactive-validator.md +2 -2
  7. package/.opencode/commands/job-summary-logger.md +2 -2
  8. package/.opencode/commands/mode-switch.md +1 -1
  9. package/.opencode/commands/model-health-check.md +2 -2
  10. package/.opencode/commands/performance-analysis.md +2 -2
  11. package/.opencode/commands/pre-commit-introspection.md +3 -3
  12. package/.opencode/commands/security-scan.md +3 -3
  13. package/.opencode/commands/sisyphus-validation.md +3 -3
  14. package/.opencode/commands/summary-logger.md +2 -2
  15. package/AGENTS.md +3 -13
  16. package/README.md +3 -3
  17. package/dist/AGENTS.md +3 -13
  18. package/dist/CHANGELOG.md +55 -0
  19. package/dist/README.md +3 -3
  20. package/dist/analytics/consent-manager.js +0 -1
  21. package/dist/analytics/emerging-pattern-detector.js +0 -1
  22. package/dist/analytics/pattern-learning-engine.js +0 -1
  23. package/dist/analytics/pattern-performance-tracker.js +0 -1
  24. package/dist/analytics/predictive-analytics.js +0 -1
  25. package/dist/analytics/prompt-pattern-analyzer.js +0 -1
  26. package/dist/analytics/routing-performance-analyzer.js +0 -1
  27. package/dist/analytics/routing-refiner.js +0 -1
  28. package/dist/analytics/simple-pattern-analyzer.js +0 -1
  29. package/dist/cli/commands/archive-logs.js +0 -1
  30. package/dist/cli/commands/opencode-install.js +13 -0
  31. package/dist/cli/commands/plugin-commands.js +0 -1
  32. package/dist/cli/commands/status.js +11 -13
  33. package/dist/cli/index.js +2 -7
  34. package/dist/core/activity-logger.js +0 -1
  35. package/dist/core/adaptive-kernel.js +0 -1
  36. package/dist/core/boot-orchestrator.js +2 -12
  37. package/dist/core/bridge.mjs +0 -1
  38. package/dist/core/codex-formatter.js +0 -1
  39. package/dist/core/codex-injector.js +0 -1
  40. package/dist/core/config-loader.js +36 -28
  41. package/dist/core/context-loader.js +0 -1
  42. package/dist/core/context-validator.js +0 -1
  43. package/dist/core/features-config.js +40 -1
  44. package/dist/core/kernel-patterns.js +0 -1
  45. package/dist/core/model-router.js +23 -64
  46. package/dist/core/system-prompt-generator.js +0 -1
  47. package/dist/delegation/agent-delegator.js +0 -1
  48. package/dist/delegation/agent-expertise.js +0 -1
  49. package/dist/delegation/analytics/index.js +0 -1
  50. package/dist/delegation/analytics/learning-engine.js +0 -1
  51. package/dist/delegation/analytics/outcome-tracker.js +0 -1
  52. package/dist/delegation/analytics/routing-analytics.js +0 -1
  53. package/dist/delegation/ast-code-parser.js +0 -1
  54. package/dist/delegation/complexity-analyzer.js +0 -1
  55. package/dist/delegation/dependency-graph-builder.js +0 -1
  56. package/dist/delegation/index.js +0 -1
  57. package/dist/delegation/metrics-aggregator.js +0 -1
  58. package/dist/delegation/session-coordinator.js +0 -1
  59. package/dist/delegation/strategy-selector.js +0 -1
  60. package/dist/delegation/voting-coordinator.js +0 -1
  61. package/dist/delegation/voting-types.js +0 -1
  62. package/dist/delegation/weighted-voting-aggregator.js +0 -1
  63. package/dist/enforcement/core/index.js +0 -1
  64. package/dist/enforcement/core/rule-executor.js +0 -1
  65. package/dist/enforcement/core/rule-hierarchy.js +0 -1
  66. package/dist/enforcement/core/rule-registry.js +0 -1
  67. package/dist/enforcement/core/violation-fixer.js +0 -1
  68. package/dist/enforcement/index.js +0 -1
  69. package/dist/enforcement/loaders/agent-triage-loader.js +0 -1
  70. package/dist/enforcement/loaders/agents-md-validation-loader.js +0 -1
  71. package/dist/enforcement/loaders/base-loader.js +0 -1
  72. package/dist/enforcement/loaders/codex-loader.js +0 -1
  73. package/dist/enforcement/loaders/index.js +0 -1
  74. package/dist/enforcement/loaders/loader-orchestrator.js +0 -1
  75. package/dist/enforcement/loaders/processor-loader.js +0 -1
  76. package/dist/enforcement/types.js +0 -1
  77. package/dist/enforcement/validators/architecture-validators.js +0 -1
  78. package/dist/enforcement/validators/base-validator.js +0 -1
  79. package/dist/enforcement/validators/code-quality-validators.js +0 -1
  80. package/dist/enforcement/validators/index.js +0 -1
  81. package/dist/enforcement/validators/security-validators.js +0 -1
  82. package/dist/enforcement/validators/testing-validators.js +0 -1
  83. package/dist/enforcement/validators/validator-registry.js +0 -1
  84. package/dist/governance/codex-policy.service.js +0 -1
  85. package/dist/inference/inference-agent-invoker.js +67 -0
  86. package/dist/inference/inference-applier.js +178 -0
  87. package/dist/inference/inference-cycle.js +51 -827
  88. package/dist/inference/inference-proposal-generator.js +149 -0
  89. package/dist/infrastructure/iac-validator.js +465 -0
  90. package/dist/infrastructure/schemas/cloud-schemas.js +488 -0
  91. package/dist/integrations/base/ExampleIntegration.js +0 -1
  92. package/dist/integrations/base/Integration.js +0 -1
  93. package/dist/integrations/base/index.js +0 -1
  94. package/dist/integrations/base/registry.js +0 -1
  95. package/dist/integrations/base/types.js +0 -1
  96. package/dist/integrations/enforcement-gate.js +3 -3
  97. package/dist/integrations/governance/governance-client.js +0 -1
  98. package/dist/integrations/governance/index.js +11 -19
  99. package/dist/integrations/governance/types.js +0 -1
  100. package/dist/integrations/hermes-agent/__init__.py +4 -0
  101. package/dist/integrations/hermes-agent/bridge.mjs +37 -0
  102. package/dist/integrations/openclaw/api-server.js +0 -1
  103. package/dist/integrations/openclaw/client.js +0 -1
  104. package/dist/integrations/openclaw/config.js +0 -1
  105. package/dist/integrations/openclaw/hooks/xray-hooks.js +0 -1
  106. package/dist/integrations/openclaw/index.js +0 -1
  107. package/dist/integrations/openclaw/types.js +0 -1
  108. package/dist/integrations/plugins/index.js +0 -1
  109. package/dist/integrations/plugins/plugin-integration.js +0 -1
  110. package/dist/integrations/plugins/plugin-registry.js +0 -1
  111. package/dist/mcps/agent-resolver.js +0 -1
  112. package/dist/mcps/architect-tools.server.js +119 -185
  113. package/dist/mcps/auto-format.server.js +56 -74
  114. package/dist/mcps/boot-orchestrator.server.js +67 -85
  115. package/dist/mcps/config/config-loader.js +6 -0
  116. package/dist/mcps/config/plugin-server-registry.js +0 -1
  117. package/dist/mcps/enforcer-tools.server.js +207 -273
  118. package/dist/mcps/estimation.server.js +63 -107
  119. package/dist/mcps/framework-compliance-audit.server.js +52 -81
  120. package/dist/mcps/framework-help.server.js +71 -89
  121. package/dist/mcps/governance.server.js +97 -149
  122. package/dist/mcps/knowledge-skills/api-design.server.js +33 -65
  123. package/dist/mcps/knowledge-skills/architecture-patterns.server.js +33 -65
  124. package/dist/mcps/knowledge-skills/bug-triage-specialist.server.js +123 -163
  125. package/dist/mcps/knowledge-skills/code-analyzer.server.js +210 -237
  126. package/dist/mcps/knowledge-skills/code-review.server.js +108 -142
  127. package/dist/mcps/knowledge-skills/content-creator.server.js +203 -225
  128. package/dist/mcps/knowledge-skills/database-design.server.js +116 -150
  129. package/dist/mcps/knowledge-skills/devops-deployment.server.js +123 -157
  130. package/dist/mcps/knowledge-skills/git-workflow.server.js +34 -67
  131. package/dist/mcps/knowledge-skills/growth-strategist.server.js +301 -323
  132. package/dist/mcps/knowledge-skills/log-monitor.server.js +139 -159
  133. package/dist/mcps/knowledge-skills/mobile-development.server.js +170 -200
  134. package/dist/mcps/knowledge-skills/multimodal-looker.server.js +122 -158
  135. package/dist/mcps/knowledge-skills/performance-optimization.server.js +88 -138
  136. package/dist/mcps/knowledge-skills/project-analysis.server.js +131 -218
  137. package/dist/mcps/knowledge-skills/refactoring-strategies.server.js +115 -150
  138. package/dist/mcps/knowledge-skills/security-audit.server.js +16 -143
  139. package/dist/mcps/knowledge-skills/seo-consultant.server.js +20 -213
  140. package/dist/mcps/knowledge-skills/session-management.server.js +13 -90
  141. package/dist/mcps/knowledge-skills/skill-invocation.server.js +43 -421
  142. package/dist/mcps/knowledge-skills/strategist.server.js +10 -55
  143. package/dist/mcps/knowledge-skills/tech-writer.server.js +16 -191
  144. package/dist/mcps/knowledge-skills/testing-best-practices.server.js +18 -191
  145. package/dist/mcps/knowledge-skills/testing-strategy.server.js +18 -156
  146. package/dist/mcps/knowledge-skills/ui-ux-design.server.js +22 -296
  147. package/dist/mcps/lint.server.js +50 -91
  148. package/dist/mcps/model-health-check.server.js +32 -60
  149. package/dist/mcps/orchestrator/aside-context.js +207 -0
  150. package/dist/mcps/orchestrator/config/agent-capabilities.js +30 -11
  151. package/dist/mcps/orchestrator/config/memory-routing-bridge.js +70 -0
  152. package/dist/mcps/orchestrator/execution/execution-planner.js +25 -7
  153. package/dist/mcps/orchestrator/handlers/complexity-handler.js +5 -1
  154. package/dist/mcps/orchestrator/handlers/status-handler.js +8 -1
  155. package/dist/mcps/orchestrator/handlers/task-handler.js +59 -1
  156. package/dist/mcps/orchestrator/index.js +5 -0
  157. package/dist/mcps/orchestrator/server.js +63 -8
  158. package/dist/mcps/performance-analysis.server.js +56 -87
  159. package/dist/mcps/processor-pipeline.server.js +68 -99
  160. package/dist/mcps/researcher.server.js +80 -153
  161. package/dist/mcps/security-scan.server.js +56 -70
  162. package/dist/mcps/shared/knowledge-skill-base.js +11 -4
  163. package/dist/mcps/state-manager.server.js +124 -152
  164. package/dist/memory-routing/index.js +4 -0
  165. package/dist/memory-routing/null-provider.js +51 -0
  166. package/dist/memory-routing/provider-loader.js +91 -0
  167. package/dist/memory-routing/provider-registry.js +40 -0
  168. package/dist/memory-routing/types.js +7 -0
  169. package/dist/memory-routing/validate-config.js +32 -0
  170. package/dist/monitoring/nudge-watchdog.js +0 -1
  171. package/dist/nucleus/default-plugins.js +13 -19
  172. package/dist/nucleus/index.js +0 -1
  173. package/dist/nucleus/thin-dispatch.js +29 -1
  174. package/dist/orchestrator/agent-spawn-governor.js +0 -1
  175. package/dist/orchestrator/intelligent-commit-batcher.js +2 -10
  176. package/dist/orchestrator/multi-agent-orchestration-coordinator.js +0 -1
  177. package/dist/orchestrator/orchestrator.js +8 -18
  178. package/dist/orchestrator/self-direction-activation.js +0 -1
  179. package/dist/orchestrator/universal-registry-bridge.js +0 -1
  180. package/dist/performance/performance-budget-enforcer.js +0 -1
  181. package/dist/performance/performance-regression-tester.js +0 -1
  182. package/dist/plugin/plugin-codex-context.js +87 -0
  183. package/dist/plugin/plugin-helpers.js +155 -0
  184. package/dist/plugin/plugin-logger.js +46 -0
  185. package/dist/plugin/plugin-modules.js +144 -0
  186. package/dist/plugin/plugin-quality-gate.js +88 -0
  187. package/dist/plugin/plugin-types.js +1 -0
  188. package/dist/plugin/xray-codex-injection.js +338 -0
  189. package/dist/postprocessor/PostProcessor.js +3 -9
  190. package/dist/postprocessor/analysis/CodeChangeAnalyzer.js +50 -0
  191. package/dist/postprocessor/config/ProcessorConfigLoader.js +16 -0
  192. package/dist/postprocessor/integration.js +194 -0
  193. package/dist/postprocessor/metamorphosis/SelfProposalEngine.js +472 -0
  194. package/dist/postprocessor/metamorphosis/index.js +1 -0
  195. package/dist/postprocessor/redeploy/RetryHandler.js +118 -0
  196. package/dist/postprocessor/services/RegressionAnalysisService.js +0 -1
  197. package/dist/postprocessor/triggers/APITrigger.js +0 -1
  198. package/dist/postprocessor/triggers/WebhookTrigger.js +0 -1
  199. package/dist/processors/implementations/agents-md-validation-processor.js +0 -1
  200. package/dist/processors/implementations/async-pattern-processor.js +0 -1
  201. package/dist/processors/implementations/console-log-guard-processor.js +0 -1
  202. package/dist/processors/implementations/coverage-analysis-processor.js +0 -1
  203. package/dist/processors/implementations/inference-improvement-processor.js +2 -9
  204. package/dist/processors/implementations/log-protection-processor.js +0 -1
  205. package/dist/processors/implementations/nudge-processor.js +0 -1
  206. package/dist/processors/implementations/performance-budget-processor.js +0 -1
  207. package/dist/processors/implementations/postprocessor-chain-validator.js +0 -1
  208. package/dist/processors/implementations/publish-preflight-processor.js +4 -12
  209. package/dist/processors/implementations/session-summary-processor.js +8 -16
  210. package/dist/processors/implementations/spawn-governance-processor.js +0 -1
  211. package/dist/processors/implementations/storytelling-trigger-processor.js +3 -28
  212. package/dist/processors/implementations/test-auto-creation-processor.js +0 -1
  213. package/dist/processors/implementations/typescript-compilation-processor.js +0 -1
  214. package/dist/processors/implementations/version-compliance-processor.js +0 -1
  215. package/dist/processors/processor-interfaces.js +0 -1
  216. package/dist/processors/processor-types.js +0 -1
  217. package/dist/scripts/integration.js +0 -1
  218. package/dist/security/comprehensive-security-audit.js +0 -1
  219. package/dist/security/security-agent-coordinator.js +0 -1
  220. package/dist/security/security-auditor.js +0 -1
  221. package/dist/security/security-hardener.js +0 -1
  222. package/dist/security/security-hardening-system.js +0 -1
  223. package/dist/security/security-headers.js +0 -1
  224. package/dist/security/security-orchestration-layer.js +0 -1
  225. package/dist/services/inference-tuner.js +0 -1
  226. package/dist/session/session-cleanup-manager.js +0 -1
  227. package/dist/session/session-monitor.js +0 -1
  228. package/dist/session/session-state-manager.js +0 -1
  229. package/dist/skills/xray-orchestrator/index.js +0 -1
  230. package/dist/utils/codex-parser.js +0 -1
  231. package/dist/utils/language-detector.js +0 -1
  232. package/dist/utils/shutdown-handler.js +0 -1
  233. package/dist/validation/agent-config-validator.js +280 -0
  234. package/dist/validation/orchestration-flow-validator.js +606 -0
  235. package/package.json +1 -1
  236. package/scripts/node/release.mjs +2 -2
  237. package/scripts/node/setup.cjs +28 -0
  238. package/scripts/node/universal-version-manager.js +1 -1
  239. package/src/mcps/agent-resolver.ts +0 -1
  240. package/src/mcps/architect-tools.server.ts +129 -211
  241. package/src/mcps/auto-format.server.ts +74 -103
  242. package/src/mcps/boot-orchestrator.server.ts +71 -96
  243. package/src/mcps/config/__tests__/config-loader.test.ts +6 -6
  244. package/src/mcps/config/config-loader.ts +7 -0
  245. package/src/mcps/config/plugin-server-registry.ts +0 -1
  246. package/src/mcps/enforcer-tools.server.ts +217 -294
  247. package/src/mcps/estimation.server.ts +62 -122
  248. package/src/mcps/framework-compliance-audit.server.ts +53 -95
  249. package/src/mcps/framework-help.server.ts +74 -96
  250. package/src/mcps/governance.server.ts +97 -162
  251. package/src/mcps/knowledge-skills/api-design.server.ts +33 -72
  252. package/src/mcps/knowledge-skills/architecture-patterns.server.ts +33 -72
  253. package/src/mcps/knowledge-skills/bug-triage-specialist.server.ts +148 -193
  254. package/src/mcps/knowledge-skills/code-analyzer.server.ts +222 -254
  255. package/src/mcps/knowledge-skills/code-review.server.ts +115 -157
  256. package/src/mcps/knowledge-skills/content-creator.server.ts +219 -246
  257. package/src/mcps/knowledge-skills/database-design.server.ts +119 -160
  258. package/src/mcps/knowledge-skills/devops-deployment.server.ts +126 -167
  259. package/src/mcps/knowledge-skills/git-workflow.server.ts +32 -77
  260. package/src/mcps/knowledge-skills/growth-strategist.server.ts +322 -360
  261. package/src/mcps/knowledge-skills/log-monitor.server.ts +68 -95
  262. package/src/mcps/knowledge-skills/mobile-development.server.ts +16 -56
  263. package/src/mcps/knowledge-skills/multimodal-looker.server.ts +13 -59
  264. package/src/mcps/knowledge-skills/performance-optimization.server.ts +13 -74
  265. package/src/mcps/knowledge-skills/project-analysis.server.ts +13 -120
  266. package/src/mcps/knowledge-skills/refactoring-strategies.server.ts +13 -60
  267. package/src/mcps/knowledge-skills/security-audit.server.ts +19 -157
  268. package/src/mcps/knowledge-skills/seo-consultant.server.ts +23 -227
  269. package/src/mcps/knowledge-skills/session-management.server.ts +17 -106
  270. package/src/mcps/knowledge-skills/skill-invocation.server.ts +45 -446
  271. package/src/mcps/knowledge-skills/strategist.server.ts +13 -63
  272. package/src/mcps/knowledge-skills/tech-writer.server.ts +19 -204
  273. package/src/mcps/knowledge-skills/testing-best-practices.server.ts +21 -204
  274. package/src/mcps/knowledge-skills/testing-strategy.server.ts +21 -165
  275. package/src/mcps/knowledge-skills/ui-ux-design.server.ts +25 -342
  276. package/src/mcps/lint.server.ts +52 -105
  277. package/src/mcps/model-health-check.server.ts +34 -70
  278. package/src/mcps/orchestrator/aside-context.ts +245 -0
  279. package/src/mcps/orchestrator/config/agent-capabilities.ts +49 -14
  280. package/src/mcps/orchestrator/config/memory-routing-bridge.ts +80 -0
  281. package/src/mcps/orchestrator/execution/execution-planner.ts +36 -9
  282. package/src/mcps/orchestrator/handlers/complexity-handler.ts +9 -3
  283. package/src/mcps/orchestrator/handlers/status-handler.ts +11 -1
  284. package/src/mcps/orchestrator/handlers/task-handler.ts +78 -2
  285. package/src/mcps/orchestrator/index.ts +29 -0
  286. package/src/mcps/orchestrator/server.ts +79 -24
  287. package/src/mcps/orchestrator/types.ts +50 -0
  288. package/src/mcps/performance-analysis.server.ts +59 -102
  289. package/src/mcps/processor-pipeline.server.ts +70 -108
  290. package/src/mcps/researcher.server.ts +87 -175
  291. package/src/mcps/security-scan.server.ts +57 -76
  292. package/src/mcps/shared/knowledge-skill-base.ts +12 -4
  293. package/src/mcps/state-manager.server.ts +129 -169
  294. package/src/opencode/codex.codex +1 -1
  295. package/src/opencode/commands/auto-format.md +3 -3
  296. package/src/opencode/commands/auto-summary-capture.md +2 -2
  297. package/src/opencode/commands/enforcer-daily-scan.md +3 -3
  298. package/src/opencode/commands/framework-compliance-audit.md +4 -4
  299. package/src/opencode/commands/interactive-validator.md +2 -2
  300. package/src/opencode/commands/job-summary-logger.md +2 -2
  301. package/src/opencode/commands/mode-switch.md +1 -1
  302. package/src/opencode/commands/model-health-check.md +2 -2
  303. package/src/opencode/commands/performance-analysis.md +2 -2
  304. package/src/opencode/commands/pre-commit-introspection.md +3 -3
  305. package/src/opencode/commands/security-scan.md +3 -3
  306. package/src/opencode/commands/sisyphus-validation.md +3 -3
  307. package/src/opencode/commands/summary-logger.md +2 -2
  308. package/src/skills/xray-orchestrator/index.ts +0 -1
  309. package/dist/nucleus/orchestrator.js +0 -479
@@ -5,16 +5,10 @@
5
5
  * and testing methodology recommendations
6
6
  */
7
7
 
8
- import { Server } from "@modelcontextprotocol/sdk/server/index.js";
9
- import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js";
10
- import {
11
- CallToolRequestSchema,
12
- ListToolsRequestSchema,
13
- } from "@modelcontextprotocol/sdk/types.js";
14
8
  import * as fs from "fs";
15
9
  import * as path from "path";
16
10
  import { frameworkLogger } from "../../core/framework-logger.js";
17
- import { createGracefulShutdown } from "../../utils/shutdown-handler.js";
11
+ import { XrayKnowledgeSkillBase } from "../shared/knowledge-skill-base.js";
18
12
  import {
19
13
  detectProjectLanguage,
20
14
  LANGUAGE_CONFIGS,
@@ -129,160 +123,31 @@ interface BaseTestCounts {
129
123
  security: number;
130
124
  }
131
125
 
132
- class XrayTestingStrategyServer {
133
- private server: Server;
126
+ class XrayTestingStrategyServer extends XrayKnowledgeSkillBase {
134
127
 
135
128
  constructor() {
136
- this.server = new Server(
137
- {
138
- name: "testing-strategy", version: "3.1.0",
139
- },
140
- {
141
- capabilities: {
142
- tools: {},
143
- },
144
- },
145
- );
129
+ super("testing-strategy", "3.1.0");
130
+
131
+ this.tools = [
132
+ { name: "analyze-test-coverage", description: "Analyze current test coverage and identify gaps", inputSchema: { type: "object", properties: { projectRoot: { type: "string" }, includeBreakdown: { type: "boolean", default: true }, coverageThreshold: { type: "number", default: 80 } }, required: ["projectRoot"] } },
133
+ { name: "design-test-strategy", description: "Design comprehensive testing strategy for the project", inputSchema: { type: "object", properties: { projectRoot: { type: "string" }, projectType: { type: "string", enum: ["web", "api", "mobile", "desktop"] }, complexity: { type: "string", enum: ["simple", "medium", "complex"] }, timeline: { type: "string", enum: ["agile", "waterfall", "continuous"] } }, required: ["projectRoot"] } },
134
+ { name: "identify-test-gaps", description: "Identify untested code and recommend test cases", inputSchema: { type: "object", properties: { projectRoot: { type: "string" }, sourceFiles: { type: "array", items: { type: "string" } }, existingTests: { type: "array", items: { type: "string" } } }, required: ["projectRoot"] } },
135
+ { name: "optimize-test-coverage", description: "Analyze and optimize test coverage patterns", inputSchema: { type: "object", properties: { projectRoot: { type: "string" }, currentCoverage: { type: "number" }, targetCoverage: { type: "number", default: 85 }, focusAreas: { type: "array", items: { type: "string" } } }, required: ["projectRoot"] } },
136
+ { name: "generate-test-file", description: "Generate test file for a source file with exports", inputSchema: { type: "object", properties: { sourceFile: { type: "string", description: "Path to source file" }, sourceContent: { type: "string", description: "Source file content" }, exports: { type: "array", items: { type: "object", properties: { name: { type: "string" }, type: { type: "string" } } }, description: "Exported functions/classes to test" }, testFilePath: { type: "string", description: "Path for generated test file" }, directory: { type: "string", description: "Project directory" } }, required: ["sourceFile", "sourceContent", "exports", "testFilePath"] } },
137
+ ];
138
+
139
+ this.handlers = {
140
+ "analyze-test-coverage": async (args) => this.analyzeTestCoverage(args as AnalyzeTestCoverageArgs),
141
+ "design-test-strategy": async (args) => this.designTestStrategy(args as DesignTestStrategyArgs),
142
+ "identify-test-gaps": async (args) => this.identifyTestGaps(args as IdentifyTestGapsArgs),
143
+ "optimize-test-coverage": async (args) => this.optimizeTestCoverage(args as OptimizeTestCoverageArgs),
144
+ "generate-test-file": async (args) => this.generateTestFile(args as GenerateTestFileArgs),
145
+ };
146
146
 
147
147
  this.setupToolHandlers();
148
- // Server initialization - removed unnecessary startup logging
149
148
  }
150
149
 
151
- private setupToolHandlers() {
152
- this.server.setRequestHandler(ListToolsRequestSchema, async () => {
153
- return {
154
- tools: [
155
- {
156
- name: "analyze-test-coverage",
157
- description: "Analyze current test coverage and identify gaps",
158
- inputSchema: {
159
- type: "object",
160
- properties: {
161
- projectRoot: { type: "string" },
162
- includeBreakdown: { type: "boolean", default: true },
163
- coverageThreshold: { type: "number", default: 80 },
164
- },
165
- required: ["projectRoot"],
166
- },
167
- },
168
- {
169
- name: "design-test-strategy",
170
- description:
171
- "Design comprehensive testing strategy for the project",
172
- inputSchema: {
173
- type: "object",
174
- properties: {
175
- projectRoot: { type: "string" },
176
- projectType: {
177
- type: "string",
178
- enum: ["web", "api", "mobile", "desktop"],
179
- },
180
- complexity: {
181
- type: "string",
182
- enum: ["simple", "medium", "complex"],
183
- },
184
- timeline: {
185
- type: "string",
186
- enum: ["agile", "waterfall", "continuous"],
187
- },
188
- },
189
- required: ["projectRoot"],
190
- },
191
- },
192
- {
193
- name: "identify-test-gaps",
194
- description: "Identify untested code and recommend test cases",
195
- inputSchema: {
196
- type: "object",
197
- properties: {
198
- projectRoot: { type: "string" },
199
- sourceFiles: { type: "array", items: { type: "string" } },
200
- existingTests: { type: "array", items: { type: "string" } },
201
- },
202
- required: ["projectRoot"],
203
- },
204
- },
205
- {
206
- name: "optimize-test-coverage",
207
- description: "Analyze and optimize test coverage patterns",
208
- inputSchema: {
209
- type: "object",
210
- properties: {
211
- projectRoot: { type: "string" },
212
- currentCoverage: { type: "number" },
213
- targetCoverage: { type: "number", default: 85 },
214
- focusAreas: { type: "array", items: { type: "string" } },
215
- },
216
- required: ["projectRoot"],
217
- },
218
- },
219
- {
220
- name: "generate-test-file",
221
- description: "Generate test file for a source file with exports",
222
- inputSchema: {
223
- type: "object",
224
- properties: {
225
- sourceFile: {
226
- type: "string",
227
- description: "Path to source file",
228
- },
229
- sourceContent: {
230
- type: "string",
231
- description: "Source file content",
232
- },
233
- exports: {
234
- type: "array",
235
- items: {
236
- type: "object",
237
- properties: {
238
- name: { type: "string" },
239
- type: { type: "string" },
240
- },
241
- },
242
- description: "Exported functions/classes to test",
243
- },
244
- testFilePath: {
245
- type: "string",
246
- description: "Path for generated test file",
247
- },
248
- directory: { type: "string", description: "Project directory" },
249
- },
250
- required: [
251
- "sourceFile",
252
- "sourceContent",
253
- "exports",
254
- "testFilePath",
255
- ],
256
- },
257
- },
258
- ],
259
- };
260
- });
261
-
262
- this.server.setRequestHandler(CallToolRequestSchema, async (request) => {
263
- const { name, arguments: args } = request.params;
264
-
265
- try {
266
- switch (name) {
267
- case "analyze-test-coverage":
268
- return await this.analyzeTestCoverage(args as unknown as AnalyzeTestCoverageArgs);
269
- case "design-test-strategy":
270
- return await this.designTestStrategy(args as unknown as DesignTestStrategyArgs);
271
- case "identify-test-gaps":
272
- return await this.identifyTestGaps(args as unknown as IdentifyTestGapsArgs);
273
- case "optimize-test-coverage":
274
- return await this.optimizeTestCoverage(args as unknown as OptimizeTestCoverageArgs);
275
- case "generate-test-file":
276
- return await this.generateTestFile(args as unknown as GenerateTestFileArgs);
277
- default:
278
- throw new Error(`Unknown tool: ${name}`);
279
- }
280
- } catch (error) {
281
- frameworkLogger.log("mcps/testing-strategy", "tool", "error", { tool: name, error: String(error) });
282
- throw error;
283
- }
284
- });
285
- }
150
+ // setupToolHandlers removed — handled by XrayKnowledgeSkillBase via this.tools + this.handlers
286
151
 
287
152
  private async analyzeTestCoverage(args: AnalyzeTestCoverageArgs) {
288
153
  const {
@@ -1151,16 +1016,7 @@ describe("${pathModule.basename(sourceFile, ".ts")}", () => {${testCases}
1151
1016
  return ignorePatterns.some((pattern) => pattern.test(filePath));
1152
1017
  }
1153
1018
 
1154
- async run(): Promise<void> {
1155
- const transport = new StdioServerTransport();
1156
- await this.server.connect(transport);
1157
-
1158
- // Use centralized shutdown handler
1159
- createGracefulShutdown({
1160
- serverName: "testing-strategy.server",
1161
- server: this.server,
1162
- });
1163
- }
1019
+ // run() removed — handled by XrayKnowledgeSkillBase
1164
1020
  }
1165
1021
 
1166
1022
  // Start the server if run directly
@@ -5,15 +5,9 @@
5
5
  * component patterns, accessibility compliance, and design system guidance
6
6
  */
7
7
 
8
- import { Server } from "@modelcontextprotocol/sdk/server/index.js";
9
- import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js";
10
- import {
11
- CallToolRequestSchema,
12
- ListToolsRequestSchema,
13
- type CallToolResult,
14
- } from "@modelcontextprotocol/sdk/types.js";
15
8
  import * as fs from "fs";
16
9
  import { frameworkLogger } from "../../core/framework-logger.js";
10
+ import { XrayKnowledgeSkillBase } from "../shared/knowledge-skill-base.js";
17
11
 
18
12
  interface UIDesignAnalysis {
19
13
  component: string;
@@ -187,262 +181,35 @@ interface ToolResponse {
187
181
  isError?: boolean;
188
182
  }
189
183
 
190
- class XrayUIUXDesignServer {
191
- private server: Server;
184
+ class XrayUIUXDesignServer extends XrayKnowledgeSkillBase {
192
185
 
193
186
  constructor() {
194
- this.server = new Server(
195
- {
196
- name: "ui-ux-design", version: "3.1.0",
197
- },
198
- {
199
- capabilities: {
200
- tools: {},
201
- },
202
- },
203
- );
187
+ super("ui-ux-design", "3.1.0");
188
+
189
+ this.tools = [
190
+ { name: "analyze_ui_component", description: "Analyze UI component for accessibility, usability, and design best practices", inputSchema: { type: "object", properties: { componentCode: { type: "string", description: "React/Vue/Angular component code to analyze" }, framework: { type: "string", enum: ["react", "vue", "angular", "svelte"], description: "UI framework being used" }, checkAccessibility: { type: "boolean", description: "Include WCAG accessibility analysis", default: true }, checkResponsive: { type: "boolean", description: "Include responsive design analysis", default: true } }, required: ["componentCode", "framework"] } },
191
+ { name: "design_component", description: "Design a UI component with proper accessibility and UX patterns", inputSchema: { type: "object", properties: { componentType: { type: "string", enum: ["button", "input", "modal", "navigation", "card", "form"], description: "Type of component to design" }, requirements: { type: "string", description: "Functional requirements and use cases" }, framework: { type: "string", enum: ["react", "vue", "angular", "svelte"], description: "Target UI framework" }, accessibility: { type: "boolean", description: "Include accessibility features", default: true } }, required: ["componentType", "requirements", "framework"] } },
192
+ { name: "audit_accessibility", description: "Perform comprehensive accessibility audit using WCAG guidelines", inputSchema: { type: "object", properties: { htmlContent: { type: "string", description: "HTML content to audit for accessibility" }, cssContent: { type: "string", description: "CSS styles to check for accessibility" }, wcagLevel: { type: "string", enum: ["A", "AA", "AAA"], description: "WCAG conformance level to check", default: "AA" } }, required: ["htmlContent"] } },
193
+ { name: "generate_design_system", description: "Generate a comprehensive design system with colors, typography, and components", inputSchema: { type: "object", properties: { brandGuidelines: { type: "string", description: "Brand colors, fonts, and style guidelines" }, targetAudience: { type: "string", description: "Target user demographics and preferences" }, platform: { type: "string", enum: ["web", "mobile", "desktop"], description: "Target platform" }, includeAccessibility: { type: "boolean", description: "Include accessibility-compliant design tokens", default: true } }, required: ["brandGuidelines", "platform"] } },
194
+ { name: "validate_mobile_design", description: "Validate mobile-first design principles including touch targets, responsive typography, and thumb zone optimization", inputSchema: { type: "object", properties: { componentCode: { type: "string", description: "Component code to validate for mobile" }, viewportWidth: { type: "number", description: "Minimum viewport width to validate (default: 320)", default: 320 }, framework: { type: "string", enum: ["react", "vue", "angular", "svelte", "css"], description: "UI framework or CSS" } }, required: ["componentCode"] } },
195
+ { name: "analyze_visual_hierarchy", description: "Analyze visual hierarchy and cognitive load following 'Don't Make Me Think' principles", inputSchema: { type: "object", properties: { designCode: { type: "string", description: "HTML/CSS/React code of the design to analyze" }, pageType: { type: "string", enum: ["landing", "dashboard", "form", "content", "ecommerce"], description: "Type of page being analyzed" } }, required: ["designCode"] } },
196
+ { name: "recommend_images", description: "Recommend appropriate image libraries, styles, and optimization strategies for the design context", inputSchema: { type: "object", properties: { context: { type: "string", description: "Design context (e.g., 'hero section', 'product gallery', 'team portraits')" }, style: { type: "string", enum: ["photography", "illustration", "3d", "abstract", "minimal"], description: "Preferred visual style" }, budget: { type: "string", enum: ["free", "low", "premium"], description: "Budget constraint", default: "free" } }, required: ["context"] } },
197
+ ];
198
+
199
+ this.handlers = {
200
+ analyze_ui_component: async (args) => this.analyzeUIComponent(args as AnalyzeUIComponentArgs),
201
+ design_component: async (args) => this.designComponent(args as DesignComponentArgs),
202
+ audit_accessibility: async (args) => this.auditAccessibility(args as AuditAccessibilityArgs),
203
+ generate_design_system: async (args) => this.generateDesignSystem(args as GenerateDesignSystemArgs),
204
+ validate_mobile_design: async (args) => this.validateMobileDesign(args as ValidateMobileDesignArgs),
205
+ analyze_visual_hierarchy: async (args) => this.analyzeVisualHierarchy(args as AnalyzeVisualHierarchyArgs),
206
+ recommend_images: async (args) => this.recommendImages(args as RecommendImagesArgs),
207
+ };
204
208
 
205
209
  this.setupToolHandlers();
206
- // Server initialization - removed unnecessary startup logging
207
210
  }
208
211
 
209
- private setupToolHandlers() {
210
- this.server.setRequestHandler(ListToolsRequestSchema, async () => {
211
- return {
212
- tools: [
213
- {
214
- name: "analyze_ui_component",
215
- description:
216
- "Analyze UI component for accessibility, usability, and design best practices",
217
- inputSchema: {
218
- type: "object",
219
- properties: {
220
- componentCode: {
221
- type: "string",
222
- description: "React/Vue/Angular component code to analyze",
223
- },
224
- framework: {
225
- type: "string",
226
- enum: ["react", "vue", "angular", "svelte"],
227
- description: "UI framework being used",
228
- },
229
- checkAccessibility: {
230
- type: "boolean",
231
- description: "Include WCAG accessibility analysis",
232
- default: true,
233
- },
234
- checkResponsive: {
235
- type: "boolean",
236
- description: "Include responsive design analysis",
237
- default: true,
238
- },
239
- },
240
- required: ["componentCode", "framework"],
241
- },
242
- },
243
- {
244
- name: "design_component",
245
- description:
246
- "Design a UI component with proper accessibility and UX patterns",
247
- inputSchema: {
248
- type: "object",
249
- properties: {
250
- componentType: {
251
- type: "string",
252
- enum: [
253
- "button",
254
- "input",
255
- "modal",
256
- "navigation",
257
- "card",
258
- "form",
259
- ],
260
- description: "Type of component to design",
261
- },
262
- requirements: {
263
- type: "string",
264
- description: "Functional requirements and use cases",
265
- },
266
- framework: {
267
- type: "string",
268
- enum: ["react", "vue", "angular", "svelte"],
269
- description: "Target UI framework",
270
- },
271
- accessibility: {
272
- type: "boolean",
273
- description: "Include accessibility features",
274
- default: true,
275
- },
276
- },
277
- required: ["componentType", "requirements", "framework"],
278
- },
279
- },
280
- {
281
- name: "audit_accessibility",
282
- description:
283
- "Perform comprehensive accessibility audit using WCAG guidelines",
284
- inputSchema: {
285
- type: "object",
286
- properties: {
287
- htmlContent: {
288
- type: "string",
289
- description: "HTML content to audit for accessibility",
290
- },
291
- cssContent: {
292
- type: "string",
293
- description: "CSS styles to check for accessibility",
294
- },
295
- wcagLevel: {
296
- type: "string",
297
- enum: ["A", "AA", "AAA"],
298
- description: "WCAG conformance level to check",
299
- default: "AA",
300
- },
301
- },
302
- required: ["htmlContent"],
303
- },
304
- },
305
- {
306
- name: "generate_design_system",
307
- description:
308
- "Generate a comprehensive design system with colors, typography, and components",
309
- inputSchema: {
310
- type: "object",
311
- properties: {
312
- brandGuidelines: {
313
- type: "string",
314
- description: "Brand colors, fonts, and style guidelines",
315
- },
316
- targetAudience: {
317
- type: "string",
318
- description: "Target user demographics and preferences",
319
- },
320
- platform: {
321
- type: "string",
322
- enum: ["web", "mobile", "desktop"],
323
- description: "Target platform",
324
- },
325
- includeAccessibility: {
326
- type: "boolean",
327
- description: "Include accessibility-compliant design tokens",
328
- default: true,
329
- },
330
- },
331
- required: ["brandGuidelines", "platform"],
332
- },
333
- },
334
- {
335
- name: "validate_mobile_design",
336
- description:
337
- "Validate mobile-first design principles including touch targets, responsive typography, and thumb zone optimization",
338
- inputSchema: {
339
- type: "object",
340
- properties: {
341
- componentCode: {
342
- type: "string",
343
- description: "Component code to validate for mobile",
344
- },
345
- viewportWidth: {
346
- type: "number",
347
- description:
348
- "Minimum viewport width to validate (default: 320)",
349
- default: 320,
350
- },
351
- framework: {
352
- type: "string",
353
- enum: ["react", "vue", "angular", "svelte", "css"],
354
- description: "UI framework or CSS",
355
- },
356
- },
357
- required: ["componentCode"],
358
- },
359
- },
360
- {
361
- name: "analyze_visual_hierarchy",
362
- description:
363
- "Analyze visual hierarchy and cognitive load following 'Don't Make Me Think' principles",
364
- inputSchema: {
365
- type: "object",
366
- properties: {
367
- designCode: {
368
- type: "string",
369
- description: "HTML/CSS/React code of the design to analyze",
370
- },
371
- pageType: {
372
- type: "string",
373
- enum: [
374
- "landing",
375
- "dashboard",
376
- "form",
377
- "content",
378
- "ecommerce",
379
- ],
380
- description: "Type of page being analyzed",
381
- },
382
- },
383
- required: ["designCode"],
384
- },
385
- },
386
- {
387
- name: "recommend_images",
388
- description:
389
- "Recommend appropriate image libraries, styles, and optimization strategies for the design context",
390
- inputSchema: {
391
- type: "object",
392
- properties: {
393
- context: {
394
- type: "string",
395
- description:
396
- "Design context (e.g., 'hero section', 'product gallery', 'team portraits')",
397
- },
398
- style: {
399
- type: "string",
400
- enum: [
401
- "photography",
402
- "illustration",
403
- "3d",
404
- "abstract",
405
- "minimal",
406
- ],
407
- description: "Preferred visual style",
408
- },
409
- budget: {
410
- type: "string",
411
- enum: ["free", "low", "premium"],
412
- description: "Budget constraint",
413
- default: "free",
414
- },
415
- },
416
- required: ["context"],
417
- },
418
- },
419
- ],
420
- };
421
- });
422
-
423
- this.server.setRequestHandler(CallToolRequestSchema, async (request): Promise<CallToolResult> => {
424
- const { name, arguments: args } = request.params;
425
-
426
- switch (name) {
427
- case "analyze_ui_component":
428
- return await this.analyzeUIComponent(args as unknown as AnalyzeUIComponentArgs) as CallToolResult;
429
- case "design_component":
430
- return await this.designComponent(args as unknown as DesignComponentArgs) as CallToolResult;
431
- case "audit_accessibility":
432
- return await this.auditAccessibility(args as unknown as AuditAccessibilityArgs) as CallToolResult;
433
- case "generate_design_system":
434
- return await this.generateDesignSystem(args as unknown as GenerateDesignSystemArgs) as CallToolResult;
435
- case "validate_mobile_design":
436
- return await this.validateMobileDesign(args as unknown as ValidateMobileDesignArgs) as CallToolResult;
437
- case "analyze_visual_hierarchy":
438
- return await this.analyzeVisualHierarchy(args as unknown as AnalyzeVisualHierarchyArgs) as CallToolResult;
439
- case "recommend_images":
440
- return await this.recommendImages(args as unknown as RecommendImagesArgs) as CallToolResult;
441
- default:
442
- throw new Error(`Unknown tool: ${name}`);
443
- }
444
- });
445
- }
212
+ // setupToolHandlers removed — handled by XrayKnowledgeSkillBase via this.tools + this.handlers
446
213
 
447
214
  private async analyzeUIComponent(args: AnalyzeUIComponentArgs): Promise<ToolResponse> {
448
215
  const {
@@ -1981,91 +1748,7 @@ Available: ${Object.keys(system.components).length} component types
1981
1748
  };
1982
1749
  }
1983
1750
 
1984
- async run(): Promise<void> {
1985
- const transport = new StdioServerTransport();
1986
- await this.server.connect(transport);
1987
- await frameworkLogger.log(
1988
- "ui-ux-design.server",
1989
- "-xray-ui-ux-design-mcp-server-running-",
1990
- "info",
1991
- { message: "xray UI/UX Design MCP Server running..." },
1992
- );
1993
-
1994
- const cleanup = async (signal: string) => {
1995
- await frameworkLogger.log(
1996
- "ui-ux-design.server",
1997
- "-received-signal-shutting-down-gracefully-",
1998
- "info",
1999
- { message: `Received ${signal}, shutting down gracefully...` },
2000
- );
2001
-
2002
- // Set a timeout to force exit if graceful shutdown fails
2003
- const timeout = setTimeout(() => {
2004
- frameworkLogger.log("mcps/ui-ux-design", "shutdown", "error", { message: "Graceful shutdown timeout, forcing exit..." });
2005
- process.exit(1);
2006
- }, 5000); // 5 second timeout
2007
-
2008
- try {
2009
- if (this.server && typeof this.server.close === "function") {
2010
- await this.server.close();
2011
- }
2012
- clearTimeout(timeout);
2013
- await frameworkLogger.log(
2014
- "ui-ux-design.server",
2015
- "-xray-mcp-server-shut-down-gracefully-",
2016
- "info",
2017
- { message: "xray MCP Server shut down gracefully" },
2018
- );
2019
- process.exit(0);
2020
- } catch (error) {
2021
- clearTimeout(timeout);
2022
- frameworkLogger.log("mcps/ui-ux-design", "shutdown", "error", { message: `Error during server shutdown: ${String(error)}` });
2023
- process.exit(1);
2024
- }
2025
- };
2026
-
2027
- // Handle multiple shutdown signals
2028
- process.on("SIGINT", () => cleanup("SIGINT"));
2029
- process.on("SIGTERM", () => cleanup("SIGTERM"));
2030
- process.on("SIGHUP", () => cleanup("SIGHUP"));
2031
-
2032
- // Monitor parent process (opencode) and shutdown if it dies
2033
- const checkParent = async () => {
2034
- try {
2035
- process.kill(process.ppid, 0); // Check if parent is alive
2036
- setTimeout(checkParent, 1000); // Check again in 1 second
2037
- } catch (error) {
2038
- // Parent process died, shut down gracefully
2039
- await frameworkLogger.log(
2040
- "ui-ux-design.server",
2041
- "-parent-process-opencode-died-shutting-down-mcp-se",
2042
- "info",
2043
- {
2044
- message:
2045
- "Parent process (opencode) died, shutting down MCP server...",
2046
- },
2047
- );
2048
- cleanup("parent-process-death");
2049
- }
2050
- };
2051
-
2052
- // Start monitoring parent process
2053
- setTimeout(checkParent, 2000); // Start checking after 2 seconds
2054
-
2055
- // Handle uncaught exceptions and unhandled rejections
2056
- process.on("uncaughtException", (error) => {
2057
- frameworkLogger.log("mcps/ui-ux-design", "uncaughtException", "error", { error: String(error) });
2058
- cleanup("uncaughtException");
2059
- });
2060
-
2061
- process.on("unhandledRejection", (reason, promise) => {
2062
- frameworkLogger.log("mcps/ui-ux-design", "unhandledRejection", "error", { error: String(reason) });
2063
- cleanup("unhandledRejection");
2064
- });
2065
-
2066
- process.on("SIGINT", cleanup);
2067
- process.on("SIGTERM", cleanup);
2068
- }
1751
+ // run() removed — handled by XrayKnowledgeSkillBase
2069
1752
  }
2070
1753
 
2071
1754
  // Run the server if this file is executed directly