0xray 2.1.2 → 2.1.4
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.
- package/.opencode/codex.codex +1 -1
- package/.opencode/commands/dependency-audit.md +3 -3
- package/.opencode/enforcer-config.json +2 -2
- package/AGENTS.md +2 -1
- package/README.md +12 -11
- package/dist/AGENTS.md +2 -1
- package/dist/CHANGELOG.md +38 -0
- package/dist/README.md +12 -11
- package/dist/agents/code-reviewer.js +1 -1
- package/dist/analytics/routing-refiner.js +1 -1
- package/dist/cli/index.js +11 -1
- package/dist/cli/server.js +3 -3
- package/dist/core/activity-logger.d.ts +2 -2
- package/dist/core/activity-logger.js +4 -4
- package/dist/core/boot-orchestrator.d.ts +1 -1
- package/dist/core/boot-orchestrator.js +13 -28
- package/dist/core/bridge.mjs +3 -3
- package/dist/core/codex-formatter.js +2 -2
- package/dist/core/codex-injector.d.ts +0 -1
- package/dist/core/codex-injector.js +2 -3
- package/dist/core/config-loader.d.ts +1 -1
- package/dist/core/config-loader.js +1 -1
- package/dist/core/config-paths.d.ts +0 -2
- package/dist/core/config-paths.js +7 -8
- package/dist/core/context-loader.d.ts +1 -1
- package/dist/core/context-loader.js +1 -1
- package/dist/core/errors.d.ts +3 -0
- package/dist/core/errors.js +10 -0
- package/dist/core/features-config.js +1 -1
- package/dist/core/framework-logger.d.ts +3 -3
- package/dist/core/framework-logger.js +17 -9
- package/dist/core/index.d.ts +2 -2
- package/dist/core/index.js +4 -2
- package/dist/core/logging-config.d.ts +2 -1
- package/dist/core/logging-config.js +7 -7
- package/dist/enforcement/loaders/codex-loader.js +1 -1
- package/dist/execution/opencode-cli-invoker.js +5 -5
- package/dist/governance/governance-service.js +1 -1
- package/dist/index.d.ts +3 -3
- package/dist/index.js +3 -3
- package/dist/inference/inference-cycle.d.ts +1 -1
- package/dist/inference/inference-cycle.js +10 -10
- package/dist/integrations/base/Integration.js +1 -1
- package/dist/integrations/base/registry.js +19 -19
- package/dist/integrations/grok/grok-cli.js +17 -17
- package/dist/integrations/grok/hooks/pre-tool-use.js +1 -1
- package/dist/integrations/hermes-agent/bridge.mjs +1 -1
- package/dist/integrations/openclaw/api-server.d.ts +0 -1
- package/dist/integrations/openclaw/api-server.js +7 -10
- package/dist/integrations/openclaw/client.d.ts +0 -1
- package/dist/integrations/openclaw/client.js +22 -24
- package/dist/integrations/openclaw/hooks/xray-hooks.d.ts +0 -1
- package/dist/integrations/openclaw/hooks/xray-hooks.js +17 -18
- package/dist/integrations/plugins/plugin-registry.js +5 -5
- package/dist/mcps/architect-tools.server.d.ts +2 -4
- package/dist/mcps/architect-tools.server.js +112 -195
- package/dist/mcps/auto-format.server.d.ts +2 -4
- package/dist/mcps/auto-format.server.js +49 -95
- package/dist/mcps/boot-orchestrator.server.d.ts +2 -4
- package/dist/mcps/boot-orchestrator.server.js +73 -105
- package/dist/mcps/config/server-config-registry.js +3 -3
- package/dist/mcps/enforcer-tools.server.d.ts +2 -4
- package/dist/mcps/enforcer-tools.server.js +202 -285
- package/dist/mcps/estimation.server.d.ts +2 -4
- package/dist/mcps/estimation.server.js +63 -107
- package/dist/mcps/framework-compliance-audit.server.d.ts +2 -4
- package/dist/mcps/framework-compliance-audit.server.js +53 -82
- package/dist/mcps/framework-help.server.d.ts +2 -4
- package/dist/mcps/framework-help.server.js +63 -101
- package/dist/mcps/governance.server.js +2 -2
- package/dist/mcps/knowledge-skills/api-design.server.d.ts +2 -4
- package/dist/mcps/knowledge-skills/api-design.server.js +35 -67
- package/dist/mcps/knowledge-skills/architecture-patterns.server.d.ts +2 -10
- package/dist/mcps/knowledge-skills/architecture-patterns.server.js +35 -74
- package/dist/mcps/knowledge-skills/bug-triage-specialist.server.d.ts +2 -4
- package/dist/mcps/knowledge-skills/bug-triage-specialist.server.js +143 -162
- package/dist/mcps/knowledge-skills/code-analyzer.server.d.ts +3 -4
- package/dist/mcps/knowledge-skills/code-analyzer.server.js +20 -45
- package/dist/mcps/knowledge-skills/code-review.server.d.ts +2 -4
- package/dist/mcps/knowledge-skills/code-review.server.js +109 -143
- package/dist/mcps/knowledge-skills/content-creator.server.d.ts +2 -4
- package/dist/mcps/knowledge-skills/content-creator.server.js +205 -226
- package/dist/mcps/knowledge-skills/database-design.server.d.ts +2 -4
- package/dist/mcps/knowledge-skills/database-design.server.js +117 -151
- package/dist/mcps/knowledge-skills/devops-deployment.server.d.ts +2 -4
- package/dist/mcps/knowledge-skills/devops-deployment.server.js +71 -160
- package/dist/mcps/knowledge-skills/git-workflow.server.d.ts +2 -4
- package/dist/mcps/knowledge-skills/git-workflow.server.js +36 -68
- package/dist/mcps/knowledge-skills/growth-strategist.server.d.ts +2 -4
- package/dist/mcps/knowledge-skills/growth-strategist.server.js +303 -324
- package/dist/mcps/knowledge-skills/log-monitor.server.d.ts +2 -4
- package/dist/mcps/knowledge-skills/log-monitor.server.js +141 -160
- package/dist/mcps/knowledge-skills/mobile-development.server.d.ts +2 -4
- package/dist/mcps/knowledge-skills/mobile-development.server.js +92 -209
- package/dist/mcps/knowledge-skills/multimodal-looker.server.d.ts +2 -4
- package/dist/mcps/knowledge-skills/multimodal-looker.server.js +123 -159
- package/dist/mcps/knowledge-skills/performance-optimization.server.d.ts +2 -5
- package/dist/mcps/knowledge-skills/performance-optimization.server.js +155 -296
- package/dist/mcps/knowledge-skills/project-analysis.server.d.ts +2 -4
- package/dist/mcps/knowledge-skills/project-analysis.server.js +75 -226
- package/dist/mcps/knowledge-skills/refactoring-strategies.server.d.ts +2 -4
- package/dist/mcps/knowledge-skills/refactoring-strategies.server.js +63 -156
- package/dist/mcps/knowledge-skills/security-audit.server.d.ts +2 -4
- package/dist/mcps/knowledge-skills/security-audit.server.js +102 -136
- package/dist/mcps/knowledge-skills/seo-consultant.server.d.ts +2 -4
- package/dist/mcps/knowledge-skills/seo-consultant.server.js +80 -203
- package/dist/mcps/knowledge-skills/session-management.server.d.ts +2 -4
- package/dist/mcps/knowledge-skills/session-management.server.js +50 -203
- package/dist/mcps/knowledge-skills/skill-invocation.server.d.ts +2 -4
- package/dist/mcps/knowledge-skills/skill-invocation.server.js +168 -347
- package/dist/mcps/knowledge-skills/strategist.server.d.ts +2 -11
- package/dist/mcps/knowledge-skills/strategist.server.js +72 -122
- package/dist/mcps/knowledge-skills/tech-writer.server.d.ts +2 -4
- package/dist/mcps/knowledge-skills/tech-writer.server.js +87 -300
- package/dist/mcps/knowledge-skills/testing-best-practices.server.d.ts +2 -4
- package/dist/mcps/knowledge-skills/testing-best-practices.server.js +147 -182
- package/dist/mcps/knowledge-skills/testing-strategy.server.d.ts +2 -4
- package/dist/mcps/knowledge-skills/testing-strategy.server.js +78 -153
- package/dist/mcps/knowledge-skills/ui-ux-design.server.d.ts +2 -5
- package/dist/mcps/knowledge-skills/ui-ux-design.server.js +90 -399
- package/dist/mcps/lint.server.d.ts +2 -4
- package/dist/mcps/lint.server.js +51 -92
- package/dist/mcps/mcp-client.js +2 -2
- package/dist/mcps/model-health-check.server.d.ts +2 -4
- package/dist/mcps/model-health-check.server.js +32 -60
- package/dist/mcps/performance-analysis.server.d.ts +2 -4
- package/dist/mcps/performance-analysis.server.js +57 -88
- package/dist/mcps/processor-pipeline.server.d.ts +2 -4
- package/dist/mcps/processor-pipeline.server.js +69 -100
- package/dist/mcps/registry.json +1 -1
- package/dist/mcps/researcher.server.d.ts +3 -5
- package/dist/mcps/researcher.server.js +81 -154
- package/dist/mcps/security-scan.server.d.ts +2 -4
- package/dist/mcps/security-scan.server.js +54 -96
- package/dist/mcps/shared/knowledge-skill-base.d.ts +14 -0
- package/dist/mcps/shared/knowledge-skill-base.js +45 -0
- package/dist/{security → mcps/shared}/security-scanner.js +1 -1
- package/dist/mcps/state-manager.server.d.ts +2 -4
- package/dist/mcps/state-manager.server.js +115 -160
- package/dist/orchestrator/orchestrator.d.ts +1 -1
- package/dist/orchestrator/orchestrator.js +1 -1
- package/dist/orchestrator/universal-registry-bridge.js +1 -1
- package/dist/plugin/xray-codex-injection.d.ts +1 -1
- package/dist/plugin/xray-codex-injection.js +1 -1
- package/dist/postprocessor/PostProcessor.d.ts +4 -44
- package/dist/postprocessor/PostProcessor.js +39 -553
- package/dist/postprocessor/analysis/CodeChangeAnalyzer.d.ts +11 -0
- package/dist/postprocessor/analysis/CodeChangeAnalyzer.js +50 -0
- package/dist/postprocessor/compliance/ArchitecturalComplianceChecker.d.ts +11 -0
- package/dist/postprocessor/compliance/ArchitecturalComplianceChecker.js +356 -0
- package/dist/postprocessor/config/ProcessorConfigLoader.d.ts +44 -0
- package/dist/postprocessor/config/ProcessorConfigLoader.js +21 -0
- package/dist/postprocessor/reporting/PostProcessorReporter.d.ts +19 -0
- package/dist/postprocessor/reporting/PostProcessorReporter.js +96 -0
- package/dist/postprocessor/triggers/GitHookTrigger.js +11 -11
- package/dist/processors/implementations/refactoring-logging-processor-wrapper.d.ts +32 -0
- package/dist/processors/implementations/refactoring-logging-processor-wrapper.js +95 -1
- package/dist/processors/processor-manager.js +346 -314
- package/dist/reporting/report-formatter.js +1 -1
- package/dist/security/security-hardener.d.ts +69 -2
- package/dist/security/security-hardener.js +129 -1
- package/dist/skills/registry.json +1 -1
- package/dist/state/index.d.ts +3 -5
- package/dist/state/index.js +1 -7
- package/dist/state/state-manager.d.ts +1 -1
- package/dist/state/state-manager.js +2 -3
- package/package.json +13 -10
- package/scripts/node/universal-version-manager.js +11 -11
- package/src/mcps/architect-tools.server.ts +112 -215
- package/src/mcps/auto-format.server.ts +50 -110
- package/src/mcps/boot-orchestrator.server.ts +75 -121
- package/src/mcps/config/__tests__/server-config-registry.test.ts +21 -12
- package/src/mcps/config/server-config-registry.ts +3 -3
- package/src/mcps/enforcer-tools.server.ts +212 -310
- package/src/mcps/estimation.server.ts +62 -122
- package/src/mcps/framework-compliance-audit.server.ts +52 -97
- package/src/mcps/framework-help.server.ts +64 -114
- package/src/mcps/governance.server.ts +2 -2
- package/src/mcps/knowledge-skills/api-design.server.ts +32 -77
- package/src/mcps/knowledge-skills/architecture-patterns.server.ts +31 -87
- package/src/mcps/knowledge-skills/bug-triage-specialist.server.ts +165 -193
- package/src/mcps/knowledge-skills/code-analyzer.server.ts +20 -55
- package/src/mcps/knowledge-skills/code-review.server.ts +114 -161
- package/src/mcps/knowledge-skills/content-creator.server.ts +218 -255
- package/src/mcps/knowledge-skills/database-design.server.ts +118 -165
- package/src/mcps/knowledge-skills/devops-deployment.server.ts +67 -172
- package/src/mcps/knowledge-skills/git-workflow.server.ts +32 -77
- package/src/mcps/knowledge-skills/growth-strategist.server.ts +324 -361
- package/src/mcps/knowledge-skills/log-monitor.server.ts +160 -187
- package/src/mcps/knowledge-skills/mobile-development.server.ts +89 -223
- package/src/mcps/knowledge-skills/multimodal-looker.server.ts +128 -175
- package/src/mcps/knowledge-skills/performance-optimization.server.ts +156 -329
- package/src/mcps/knowledge-skills/project-analysis.server.ts +72 -248
- package/src/mcps/knowledge-skills/refactoring-strategies.server.ts +59 -171
- package/src/mcps/knowledge-skills/security-audit.server.ts +104 -151
- package/src/mcps/knowledge-skills/seo-consultant.server.ts +80 -220
- package/src/mcps/knowledge-skills/session-management.server.ts +51 -232
- package/src/mcps/knowledge-skills/skill-invocation.server.ts +165 -372
- package/src/mcps/knowledge-skills/strategist.server.ts +72 -143
- package/src/mcps/knowledge-skills/tech-writer.server.ts +85 -350
- package/src/mcps/knowledge-skills/testing-best-practices.server.ts +146 -195
- package/src/mcps/knowledge-skills/testing-strategy.server.ts +75 -161
- package/src/mcps/knowledge-skills/ui-ux-design.server.ts +93 -487
- package/src/mcps/lint.server.ts +53 -107
- package/src/mcps/mcp-client.ts +2 -2
- package/src/mcps/model-health-check.server.ts +34 -71
- package/src/mcps/performance-analysis.server.ts +60 -104
- package/src/mcps/processor-pipeline.server.ts +72 -110
- package/src/mcps/registry.json +1 -1
- package/src/mcps/researcher.server.ts +88 -177
- package/src/mcps/security-scan.server.ts +55 -104
- package/src/mcps/shared/knowledge-skill-base.ts +62 -0
- package/src/mcps/shared/prompt-security-validator.ts +199 -0
- package/src/mcps/shared/security-scanner.ts +599 -0
- package/src/mcps/state-manager.server.ts +117 -175
- package/src/opencode/codex.codex +1 -1
- package/src/opencode/commands/dependency-audit.md +3 -3
- package/src/opencode/enforcer-config.json +2 -2
- package/src/skills/registry.json +1 -1
- package/xray/codex.json +1 -1
- package/xray/config.json +1 -1
- package/xray/features.json +1 -1
- package/xray/integrations.json +3 -3
- package/dist/integrations/hermes-agent/__pycache__/__init__.cpython-313.pyc +0 -0
- package/dist/integrations/hermes-agent/__pycache__/conftest.cpython-313-pytest-9.0.2.pyc +0 -0
- package/dist/integrations/hermes-agent/__pycache__/schemas.cpython-313.pyc +0 -0
- package/dist/integrations/hermes-agent/__pycache__/test_plugin.cpython-313-pytest-9.0.2.pyc +0 -0
- package/dist/integrations/hermes-agent/__pycache__/test_plugin.cpython-313.pyc +0 -0
- package/dist/integrations/hermes-agent/__pycache__/tools.cpython-313.pyc +0 -0
- package/dist/integrations/hermes-agent/conftest.py +0 -14
- package/dist/integrations/hermes-agent/test_plugin.py +0 -1103
- package/dist/processors/implementations/refactoring-logging-processor.d.ts +0 -31
- package/dist/processors/implementations/refactoring-logging-processor.js +0 -96
- package/dist/processors/implementations/session-capture-processor.d.ts +0 -14
- package/dist/processors/implementations/session-capture-processor.js +0 -37
- package/dist/scripts/activate-kernel-pipeline.d.ts +0 -7
- package/dist/scripts/activate-kernel-pipeline.js +0 -101
- package/dist/security/index.d.ts +0 -13
- package/dist/security/index.js +0 -13
- package/dist/security/security-agent-coordinator.d.ts +0 -72
- package/dist/security/security-agent-coordinator.js +0 -204
- package/dist/security/security-auditor.d.ts +0 -56
- package/dist/security/security-auditor.js +0 -584
- package/dist/security/security-hardening-system.d.ts +0 -239
- package/dist/security/security-hardening-system.js +0 -727
- package/dist/security/security-orchestration-layer.d.ts +0 -119
- package/dist/security/security-orchestration-layer.js +0 -496
- /package/dist/{security → mcps/shared}/prompt-security-validator.d.ts +0 -0
- /package/dist/{security → mcps/shared}/prompt-security-validator.js +0 -0
- /package/dist/{security → mcps/shared}/security-scanner.d.ts +0 -0
|
@@ -4,10 +4,9 @@
|
|
|
4
4
|
* Knowledge skill for user interface and user experience design,
|
|
5
5
|
* component patterns, accessibility compliance, and design system guidance
|
|
6
6
|
*/
|
|
7
|
-
|
|
8
|
-
|
|
7
|
+
import { XrayKnowledgeSkillBase } from "../shared/knowledge-skill-base.js";
|
|
8
|
+
declare class XrayUIUXDesignServer extends XrayKnowledgeSkillBase {
|
|
9
9
|
constructor();
|
|
10
|
-
private setupToolHandlers;
|
|
11
10
|
private analyzeUIComponent;
|
|
12
11
|
private designComponent;
|
|
13
12
|
private auditAccessibility;
|
|
@@ -63,7 +62,5 @@ declare class XrayUIUXDesignServer {
|
|
|
63
62
|
private getSeverityIcon;
|
|
64
63
|
private validateMobileDesign;
|
|
65
64
|
private analyzeVisualHierarchy;
|
|
66
|
-
private recommendImages;
|
|
67
|
-
run(): Promise<void>;
|
|
68
65
|
}
|
|
69
66
|
export { XrayUIUXDesignServer };
|
|
@@ -4,248 +4,102 @@
|
|
|
4
4
|
* Knowledge skill for user interface and user experience design,
|
|
5
5
|
* component patterns, accessibility compliance, and design system guidance
|
|
6
6
|
*/
|
|
7
|
-
import {
|
|
8
|
-
import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js";
|
|
9
|
-
import { CallToolRequestSchema, ListToolsRequestSchema, } from "@modelcontextprotocol/sdk/types.js";
|
|
7
|
+
import { XrayKnowledgeSkillBase } from "../shared/knowledge-skill-base.js";
|
|
10
8
|
import { frameworkLogger } from "../../core/framework-logger.js";
|
|
11
|
-
class XrayUIUXDesignServer {
|
|
12
|
-
server;
|
|
9
|
+
class XrayUIUXDesignServer extends XrayKnowledgeSkillBase {
|
|
13
10
|
constructor() {
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
return {
|
|
27
|
-
tools: [
|
|
28
|
-
{
|
|
29
|
-
name: "analyze_ui_component",
|
|
30
|
-
description: "Analyze UI component for accessibility, usability, and design best practices",
|
|
31
|
-
inputSchema: {
|
|
32
|
-
type: "object",
|
|
33
|
-
properties: {
|
|
34
|
-
componentCode: {
|
|
35
|
-
type: "string",
|
|
36
|
-
description: "React/Vue/Angular component code to analyze",
|
|
37
|
-
},
|
|
38
|
-
framework: {
|
|
39
|
-
type: "string",
|
|
40
|
-
enum: ["react", "vue", "angular", "svelte"],
|
|
41
|
-
description: "UI framework being used",
|
|
42
|
-
},
|
|
43
|
-
checkAccessibility: {
|
|
44
|
-
type: "boolean",
|
|
45
|
-
description: "Include WCAG accessibility analysis",
|
|
46
|
-
default: true,
|
|
47
|
-
},
|
|
48
|
-
checkResponsive: {
|
|
49
|
-
type: "boolean",
|
|
50
|
-
description: "Include responsive design analysis",
|
|
51
|
-
default: true,
|
|
52
|
-
},
|
|
53
|
-
},
|
|
54
|
-
required: ["componentCode", "framework"],
|
|
55
|
-
},
|
|
56
|
-
},
|
|
57
|
-
{
|
|
58
|
-
name: "design_component",
|
|
59
|
-
description: "Design a UI component with proper accessibility and UX patterns",
|
|
60
|
-
inputSchema: {
|
|
61
|
-
type: "object",
|
|
62
|
-
properties: {
|
|
63
|
-
componentType: {
|
|
64
|
-
type: "string",
|
|
65
|
-
enum: [
|
|
66
|
-
"button",
|
|
67
|
-
"input",
|
|
68
|
-
"modal",
|
|
69
|
-
"navigation",
|
|
70
|
-
"card",
|
|
71
|
-
"form",
|
|
72
|
-
],
|
|
73
|
-
description: "Type of component to design",
|
|
74
|
-
},
|
|
75
|
-
requirements: {
|
|
76
|
-
type: "string",
|
|
77
|
-
description: "Functional requirements and use cases",
|
|
78
|
-
},
|
|
79
|
-
framework: {
|
|
80
|
-
type: "string",
|
|
81
|
-
enum: ["react", "vue", "angular", "svelte"],
|
|
82
|
-
description: "Target UI framework",
|
|
83
|
-
},
|
|
84
|
-
accessibility: {
|
|
85
|
-
type: "boolean",
|
|
86
|
-
description: "Include accessibility features",
|
|
87
|
-
default: true,
|
|
88
|
-
},
|
|
89
|
-
},
|
|
90
|
-
required: ["componentType", "requirements", "framework"],
|
|
91
|
-
},
|
|
11
|
+
super("ui-ux-design", "2.0.1");
|
|
12
|
+
this.tools = [
|
|
13
|
+
{
|
|
14
|
+
name: "analyze_ui_component",
|
|
15
|
+
description: "Analyze UI component for accessibility, usability, and design best practices",
|
|
16
|
+
inputSchema: {
|
|
17
|
+
type: "object",
|
|
18
|
+
properties: {
|
|
19
|
+
componentCode: { type: "string", description: "React/Vue/Angular component code to analyze" },
|
|
20
|
+
framework: { type: "string", enum: ["react", "vue", "angular", "svelte"], description: "UI framework being used" },
|
|
21
|
+
checkAccessibility: { type: "boolean", description: "Include WCAG accessibility analysis", default: true },
|
|
22
|
+
checkResponsive: { type: "boolean", description: "Include responsive design analysis", default: true },
|
|
92
23
|
},
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
},
|
|
107
|
-
wcagLevel: {
|
|
108
|
-
type: "string",
|
|
109
|
-
enum: ["A", "AA", "AAA"],
|
|
110
|
-
description: "WCAG conformance level to check",
|
|
111
|
-
default: "AA",
|
|
112
|
-
},
|
|
113
|
-
},
|
|
114
|
-
required: ["htmlContent"],
|
|
115
|
-
},
|
|
24
|
+
required: ["componentCode", "framework"],
|
|
25
|
+
},
|
|
26
|
+
},
|
|
27
|
+
{
|
|
28
|
+
name: "design_component",
|
|
29
|
+
description: "Design a UI component with proper accessibility and UX patterns",
|
|
30
|
+
inputSchema: {
|
|
31
|
+
type: "object",
|
|
32
|
+
properties: {
|
|
33
|
+
componentType: { type: "string", enum: ["button", "input", "modal", "navigation", "card", "form"], description: "Type of component to design" },
|
|
34
|
+
requirements: { type: "string", description: "Functional requirements and use cases" },
|
|
35
|
+
framework: { type: "string", enum: ["react", "vue", "angular", "svelte"], description: "Target UI framework" },
|
|
36
|
+
accessibility: { type: "boolean", description: "Include accessibility features", default: true },
|
|
116
37
|
},
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
description: "Target user demographics and preferences",
|
|
130
|
-
},
|
|
131
|
-
platform: {
|
|
132
|
-
type: "string",
|
|
133
|
-
enum: ["web", "mobile", "desktop"],
|
|
134
|
-
description: "Target platform",
|
|
135
|
-
},
|
|
136
|
-
includeAccessibility: {
|
|
137
|
-
type: "boolean",
|
|
138
|
-
description: "Include accessibility-compliant design tokens",
|
|
139
|
-
default: true,
|
|
140
|
-
},
|
|
141
|
-
},
|
|
142
|
-
required: ["brandGuidelines", "platform"],
|
|
143
|
-
},
|
|
38
|
+
required: ["componentType", "requirements", "framework"],
|
|
39
|
+
},
|
|
40
|
+
},
|
|
41
|
+
{
|
|
42
|
+
name: "audit_accessibility",
|
|
43
|
+
description: "Perform comprehensive accessibility audit using WCAG guidelines",
|
|
44
|
+
inputSchema: {
|
|
45
|
+
type: "object",
|
|
46
|
+
properties: {
|
|
47
|
+
htmlContent: { type: "string", description: "HTML content to audit for accessibility" },
|
|
48
|
+
cssContent: { type: "string", description: "CSS styles to check for accessibility" },
|
|
49
|
+
wcagLevel: { type: "string", enum: ["A", "AA", "AAA"], description: "WCAG conformance level to check", default: "AA" },
|
|
144
50
|
},
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
default: 320,
|
|
159
|
-
},
|
|
160
|
-
framework: {
|
|
161
|
-
type: "string",
|
|
162
|
-
enum: ["react", "vue", "angular", "svelte", "css"],
|
|
163
|
-
description: "UI framework or CSS",
|
|
164
|
-
},
|
|
165
|
-
},
|
|
166
|
-
required: ["componentCode"],
|
|
167
|
-
},
|
|
51
|
+
required: ["htmlContent"],
|
|
52
|
+
},
|
|
53
|
+
},
|
|
54
|
+
{
|
|
55
|
+
name: "generate_design_system",
|
|
56
|
+
description: "Generate a comprehensive design system with colors, typography, and components",
|
|
57
|
+
inputSchema: {
|
|
58
|
+
type: "object",
|
|
59
|
+
properties: {
|
|
60
|
+
brandGuidelines: { type: "string", description: "Brand colors, fonts, and style guidelines" },
|
|
61
|
+
targetAudience: { type: "string", description: "Target user demographics and preferences" },
|
|
62
|
+
platform: { type: "string", enum: ["web", "mobile", "desktop"], description: "Target platform" },
|
|
63
|
+
includeAccessibility: { type: "boolean", description: "Include accessibility-compliant design tokens", default: true },
|
|
168
64
|
},
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
enum: [
|
|
182
|
-
"landing",
|
|
183
|
-
"dashboard",
|
|
184
|
-
"form",
|
|
185
|
-
"content",
|
|
186
|
-
"ecommerce",
|
|
187
|
-
],
|
|
188
|
-
description: "Type of page being analyzed",
|
|
189
|
-
},
|
|
190
|
-
},
|
|
191
|
-
required: ["designCode"],
|
|
192
|
-
},
|
|
65
|
+
required: ["brandGuidelines", "platform"],
|
|
66
|
+
},
|
|
67
|
+
},
|
|
68
|
+
{
|
|
69
|
+
name: "validate_mobile_design",
|
|
70
|
+
description: "Validate mobile-first design principles including touch targets, responsive typography, and thumb zone optimization",
|
|
71
|
+
inputSchema: {
|
|
72
|
+
type: "object",
|
|
73
|
+
properties: {
|
|
74
|
+
componentCode: { type: "string", description: "Component code to validate for mobile" },
|
|
75
|
+
viewportWidth: { type: "number", description: "Minimum viewport width to validate (default: 320)", default: 320 },
|
|
76
|
+
framework: { type: "string", enum: ["react", "vue", "angular", "svelte", "css"], description: "UI framework or CSS" },
|
|
193
77
|
},
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
type: "string",
|
|
206
|
-
enum: [
|
|
207
|
-
"photography",
|
|
208
|
-
"illustration",
|
|
209
|
-
"3d",
|
|
210
|
-
"abstract",
|
|
211
|
-
"minimal",
|
|
212
|
-
],
|
|
213
|
-
description: "Preferred visual style",
|
|
214
|
-
},
|
|
215
|
-
budget: {
|
|
216
|
-
type: "string",
|
|
217
|
-
enum: ["free", "low", "premium"],
|
|
218
|
-
description: "Budget constraint",
|
|
219
|
-
default: "free",
|
|
220
|
-
},
|
|
221
|
-
},
|
|
222
|
-
required: ["context"],
|
|
223
|
-
},
|
|
78
|
+
required: ["componentCode"],
|
|
79
|
+
},
|
|
80
|
+
},
|
|
81
|
+
{
|
|
82
|
+
name: "analyze_visual_hierarchy",
|
|
83
|
+
description: "Analyze visual hierarchy and cognitive load following 'Don't Make Me Think' principles",
|
|
84
|
+
inputSchema: {
|
|
85
|
+
type: "object",
|
|
86
|
+
properties: {
|
|
87
|
+
designCode: { type: "string", description: "HTML/CSS/React code of the design to analyze" },
|
|
88
|
+
pageType: { type: "string", enum: ["landing", "dashboard", "form", "content", "ecommerce"], description: "Type of page being analyzed" },
|
|
224
89
|
},
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
return await this.generateDesignSystem(args);
|
|
239
|
-
case "validate_mobile_design":
|
|
240
|
-
return await this.validateMobileDesign(args);
|
|
241
|
-
case "analyze_visual_hierarchy":
|
|
242
|
-
return await this.analyzeVisualHierarchy(args);
|
|
243
|
-
case "recommend_images":
|
|
244
|
-
return await this.recommendImages(args);
|
|
245
|
-
default:
|
|
246
|
-
throw new Error(`Unknown tool: ${name}`);
|
|
247
|
-
}
|
|
248
|
-
});
|
|
90
|
+
required: ["designCode"],
|
|
91
|
+
},
|
|
92
|
+
},
|
|
93
|
+
];
|
|
94
|
+
this.handlers = {
|
|
95
|
+
"analyze_ui_component": async (args) => this.analyzeUIComponent(args),
|
|
96
|
+
"design_component": async (args) => this.designComponent(args),
|
|
97
|
+
"audit_accessibility": async (args) => this.auditAccessibility(args),
|
|
98
|
+
"generate_design_system": async (args) => this.generateDesignSystem(args),
|
|
99
|
+
"validate_mobile_design": async (args) => this.validateMobileDesign(args),
|
|
100
|
+
"analyze_visual_hierarchy": async (args) => this.analyzeVisualHierarchy(args),
|
|
101
|
+
};
|
|
102
|
+
this.setupToolHandlers();
|
|
249
103
|
}
|
|
250
104
|
async analyzeUIComponent(args) {
|
|
251
105
|
const { componentCode, framework, checkAccessibility = true, checkResponsive = true, } = args;
|
|
@@ -1318,12 +1172,8 @@ Available: ${Object.keys(system.components).length} component types
|
|
|
1318
1172
|
async analyzeVisualHierarchy(args) {
|
|
1319
1173
|
const { designCode, pageType = "landing" } = args;
|
|
1320
1174
|
const issues = [];
|
|
1321
|
-
const cognitiveLoadScore = 100;
|
|
1322
|
-
const recommendations = [];
|
|
1323
|
-
// Check heading hierarchy
|
|
1324
1175
|
const h1Count = (designCode.match(/<h1/gi) || []).length;
|
|
1325
1176
|
const h2Count = (designCode.match(/<h2/gi) || []).length;
|
|
1326
|
-
const h3Count = (designCode.match(/<h3/gi) || []).length;
|
|
1327
1177
|
if (h1Count === 0) {
|
|
1328
1178
|
issues.push({
|
|
1329
1179
|
type: "hierarchy",
|
|
@@ -1338,12 +1188,6 @@ Available: ${Object.keys(system.components).length} component types
|
|
|
1338
1188
|
message: `Multiple H1 headings (${h1Count}) - confuses page structure`,
|
|
1339
1189
|
});
|
|
1340
1190
|
}
|
|
1341
|
-
if (h2Count > 7) {
|
|
1342
|
-
recommendations.push("Consider reducing number of H2 sections (current: " +
|
|
1343
|
-
h2Count +
|
|
1344
|
-
") - may overwhelm users");
|
|
1345
|
-
}
|
|
1346
|
-
// Check for clear CTAs
|
|
1347
1191
|
const ctaPatterns = [
|
|
1348
1192
|
/class="[^"]*cta[^"]*"/i,
|
|
1349
1193
|
/class="[^"]*button[^"]*"/i,
|
|
@@ -1357,14 +1201,6 @@ Available: ${Object.keys(system.components).length} component types
|
|
|
1357
1201
|
message: "No clear CTA found - users don't know what to do",
|
|
1358
1202
|
});
|
|
1359
1203
|
}
|
|
1360
|
-
// Check for progressive disclosure (accordions, tabs, etc.)
|
|
1361
|
-
const hasProgressiveDisclosure = designCode.includes("accordion") ||
|
|
1362
|
-
designCode.includes("tab") ||
|
|
1363
|
-
designCode.includes("collapsible");
|
|
1364
|
-
if (!hasProgressiveDisclosure && designCode.length > 5000) {
|
|
1365
|
-
recommendations.push("Consider progressive disclosure (accordions/tabs) to reduce cognitive load");
|
|
1366
|
-
}
|
|
1367
|
-
// Check for "Don't Make Me Think" violations
|
|
1368
1204
|
const unclearLabels = [/click here/i, /read more/i, /learn more$/i];
|
|
1369
1205
|
unclearLabels.forEach((pattern) => {
|
|
1370
1206
|
if (pattern.test(designCode)) {
|
|
@@ -1379,160 +1215,15 @@ Available: ${Object.keys(system.components).length} component types
|
|
|
1379
1215
|
content: [
|
|
1380
1216
|
{
|
|
1381
1217
|
type: "text",
|
|
1382
|
-
text: `## Visual Hierarchy & Cognitive Load Analysis\n\n### "Don't Make Me Think" Score: ${Math.max(0,
|
|
1218
|
+
text: `## Visual Hierarchy & Cognitive Load Analysis\n\n### "Don't Make Me Think" Score: ${Math.max(0, 100 - issues.length * 10)}/100\n\n### Heading Structure:\n- H1: ${h1Count} ${h1Count === 1 ? "✅" : "❌"}\n- H2: ${h2Count}\n\n### Issues (${issues.length}):\n${issues.map((i) => `- ${i.severity.toUpperCase()}: ${i.message}`).join("\n") || "None"}\n\n### 3-Second Rule Checklist:\n- [ ] Page purpose immediately clear\n- [ ] Primary action obvious\n- [ ] No ambiguous labels\n- [ ] Clear visual hierarchy\n- [ ] Progressive disclosure used`,
|
|
1383
1219
|
},
|
|
1384
1220
|
],
|
|
1385
1221
|
};
|
|
1386
1222
|
}
|
|
1387
|
-
async recommendImages(args) {
|
|
1388
|
-
const { context, style = "photography", budget = "free" } = args;
|
|
1389
|
-
const recommendations = {
|
|
1390
|
-
libraries: [],
|
|
1391
|
-
tips: [],
|
|
1392
|
-
style: style,
|
|
1393
|
-
};
|
|
1394
|
-
// Context-specific recommendations
|
|
1395
|
-
if (context.toLowerCase().includes("hero")) {
|
|
1396
|
-
recommendations.tips.push("Hero images should be high-impact but not compete with text");
|
|
1397
|
-
recommendations.tips.push("Use overlay/gradient to ensure text readability");
|
|
1398
|
-
recommendations.tips.push("Recommended size: 1920x1080px, optimized to < 200KB");
|
|
1399
|
-
}
|
|
1400
|
-
if (context.toLowerCase().includes("team") ||
|
|
1401
|
-
context.toLowerCase().includes("portrait")) {
|
|
1402
|
-
recommendations.tips.push("Use consistent lighting and background for team photos");
|
|
1403
|
-
recommendations.tips.push("Square or 4:5 aspect ratio works best");
|
|
1404
|
-
}
|
|
1405
|
-
if (context.toLowerCase().includes("product")) {
|
|
1406
|
-
recommendations.tips.push("Use high-quality product photography with neutral background");
|
|
1407
|
-
recommendations.tips.push("Include multiple angles and detail shots");
|
|
1408
|
-
}
|
|
1409
|
-
// Library recommendations based on budget and style
|
|
1410
|
-
if (budget === "free") {
|
|
1411
|
-
if (style === "photography") {
|
|
1412
|
-
recommendations.libraries.push({
|
|
1413
|
-
name: "Unsplash",
|
|
1414
|
-
url: "unsplash.com",
|
|
1415
|
-
description: "Free, high-quality photography",
|
|
1416
|
-
});
|
|
1417
|
-
recommendations.libraries.push({
|
|
1418
|
-
name: "Pexels",
|
|
1419
|
-
url: "pexels.com",
|
|
1420
|
-
description: "Free stock photos and videos",
|
|
1421
|
-
});
|
|
1422
|
-
}
|
|
1423
|
-
else if (style === "illustration") {
|
|
1424
|
-
recommendations.libraries.push({
|
|
1425
|
-
name: "unDraw",
|
|
1426
|
-
url: "undraw.co",
|
|
1427
|
-
description: "Customizable open-source illustrations",
|
|
1428
|
-
});
|
|
1429
|
-
recommendations.libraries.push({
|
|
1430
|
-
name: "Humaaans",
|
|
1431
|
-
url: "humaaans.com",
|
|
1432
|
-
description: "Mix-and-match people illustrations",
|
|
1433
|
-
});
|
|
1434
|
-
}
|
|
1435
|
-
else if (style === "3d") {
|
|
1436
|
-
recommendations.libraries.push({
|
|
1437
|
-
name: "BlenderKit",
|
|
1438
|
-
url: "blenderkit.com",
|
|
1439
|
-
description: "Free 3D assets",
|
|
1440
|
-
});
|
|
1441
|
-
}
|
|
1442
|
-
}
|
|
1443
|
-
else if (budget === "premium") {
|
|
1444
|
-
recommendations.libraries.push({
|
|
1445
|
-
name: "Shutterstock",
|
|
1446
|
-
url: "shutterstock.com",
|
|
1447
|
-
description: "Extensive premium catalog",
|
|
1448
|
-
});
|
|
1449
|
-
recommendations.libraries.push({
|
|
1450
|
-
name: "Getty Images",
|
|
1451
|
-
url: "gettyimages.com",
|
|
1452
|
-
description: "Editorial and commercial quality",
|
|
1453
|
-
});
|
|
1454
|
-
}
|
|
1455
|
-
// Icon recommendations
|
|
1456
|
-
recommendations.libraries.push({
|
|
1457
|
-
name: "Lucide",
|
|
1458
|
-
url: "lucide.dev",
|
|
1459
|
-
description: "Clean, consistent icon library (Free)",
|
|
1460
|
-
});
|
|
1461
|
-
recommendations.libraries.push({
|
|
1462
|
-
name: "Heroicons",
|
|
1463
|
-
url: "heroicons.com",
|
|
1464
|
-
description: "Beautiful SVG icons by Tailwind (Free)",
|
|
1465
|
-
});
|
|
1466
|
-
return {
|
|
1467
|
-
content: [
|
|
1468
|
-
{
|
|
1469
|
-
type: "text",
|
|
1470
|
-
text: `## Image Recommendations for: ${context}\n\n### Style: ${style}\n### Budget: ${budget}\n\n### Recommended Libraries:\n${recommendations.libraries.map((lib) => `- **${lib.name}** (${lib.url})\n ${lib.description}`).join("\n")}\n\n### Context-Specific Tips:\n${recommendations.tips.map((tip) => `- ${tip}`).join("\n")}\n\n### Image Optimization Checklist:\n- [ ] WebP format with JPEG fallback\n- [ ] Responsive srcset for different sizes\n- [ ] Alt text describing purpose (not just "image")\n- [ ] Lazy loading for below-fold images\n- [ ] Compressed to < 200KB without quality loss\n- [ ] Consistent style across all images`,
|
|
1471
|
-
},
|
|
1472
|
-
],
|
|
1473
|
-
};
|
|
1474
|
-
}
|
|
1475
|
-
async run() {
|
|
1476
|
-
const transport = new StdioServerTransport();
|
|
1477
|
-
await this.server.connect(transport);
|
|
1478
|
-
await frameworkLogger.log("ui-ux-design.server", "-xray-ui-ux-design-mcp-server-running-", "info", { message: "xray UI/UX Design MCP Server running..." });
|
|
1479
|
-
const cleanup = async (signal) => {
|
|
1480
|
-
await frameworkLogger.log("ui-ux-design.server", "-received-signal-shutting-down-gracefully-", "info", { message: `Received ${signal}, shutting down gracefully...` });
|
|
1481
|
-
// Set a timeout to force exit if graceful shutdown fails
|
|
1482
|
-
const timeout = setTimeout(() => {
|
|
1483
|
-
frameworkLogger.log("mcps/ui-ux-design", "shutdown", "error", { message: "Graceful shutdown timeout, forcing exit..." });
|
|
1484
|
-
process.exit(1);
|
|
1485
|
-
}, 5000); // 5 second timeout
|
|
1486
|
-
try {
|
|
1487
|
-
if (this.server && typeof this.server.close === "function") {
|
|
1488
|
-
await this.server.close();
|
|
1489
|
-
}
|
|
1490
|
-
clearTimeout(timeout);
|
|
1491
|
-
await frameworkLogger.log("ui-ux-design.server", "-xray-mcp-server-shut-down-gracefully-", "info", { message: "xray MCP Server shut down gracefully" });
|
|
1492
|
-
process.exit(0);
|
|
1493
|
-
}
|
|
1494
|
-
catch (error) {
|
|
1495
|
-
clearTimeout(timeout);
|
|
1496
|
-
frameworkLogger.log("mcps/ui-ux-design", "shutdown", "error", { message: `Error during server shutdown: ${String(error)}` });
|
|
1497
|
-
process.exit(1);
|
|
1498
|
-
}
|
|
1499
|
-
};
|
|
1500
|
-
// Handle multiple shutdown signals
|
|
1501
|
-
process.on("SIGINT", () => cleanup("SIGINT"));
|
|
1502
|
-
process.on("SIGTERM", () => cleanup("SIGTERM"));
|
|
1503
|
-
process.on("SIGHUP", () => cleanup("SIGHUP"));
|
|
1504
|
-
// Monitor parent process (opencode) and shutdown if it dies
|
|
1505
|
-
const checkParent = async () => {
|
|
1506
|
-
try {
|
|
1507
|
-
process.kill(process.ppid, 0); // Check if parent is alive
|
|
1508
|
-
setTimeout(checkParent, 1000); // Check again in 1 second
|
|
1509
|
-
}
|
|
1510
|
-
catch (error) {
|
|
1511
|
-
// Parent process died, shut down gracefully
|
|
1512
|
-
await frameworkLogger.log("ui-ux-design.server", "-parent-process-opencode-died-shutting-down-mcp-se", "info", {
|
|
1513
|
-
message: "Parent process (opencode) died, shutting down MCP server...",
|
|
1514
|
-
});
|
|
1515
|
-
cleanup("parent-process-death");
|
|
1516
|
-
}
|
|
1517
|
-
};
|
|
1518
|
-
// Start monitoring parent process
|
|
1519
|
-
setTimeout(checkParent, 2000); // Start checking after 2 seconds
|
|
1520
|
-
// Handle uncaught exceptions and unhandled rejections
|
|
1521
|
-
process.on("uncaughtException", (error) => {
|
|
1522
|
-
frameworkLogger.log("mcps/ui-ux-design", "uncaughtException", "error", { error: String(error) });
|
|
1523
|
-
cleanup("uncaughtException");
|
|
1524
|
-
});
|
|
1525
|
-
process.on("unhandledRejection", (reason, promise) => {
|
|
1526
|
-
frameworkLogger.log("mcps/ui-ux-design", "unhandledRejection", "error", { error: String(reason) });
|
|
1527
|
-
cleanup("unhandledRejection");
|
|
1528
|
-
});
|
|
1529
|
-
process.on("SIGINT", cleanup);
|
|
1530
|
-
process.on("SIGTERM", cleanup);
|
|
1531
|
-
}
|
|
1532
1223
|
}
|
|
1533
1224
|
// Run the server if this file is executed directly
|
|
1534
1225
|
if (import.meta.url === `file://${process.argv[1]}`) {
|
|
1535
1226
|
const server = new XrayUIUXDesignServer();
|
|
1536
|
-
server.run().catch((error) => frameworkLogger.log("mcps/ui-ux-design", "run", "error", { error: String(error) }));
|
|
1227
|
+
server.run("ui-ux-design.server").catch((error) => frameworkLogger.log("mcps/ui-ux-design", "run", "error", { error: String(error) }));
|
|
1537
1228
|
}
|
|
1538
1229
|
export { XrayUIUXDesignServer };
|
|
@@ -3,15 +3,13 @@
|
|
|
3
3
|
*
|
|
4
4
|
* Comprehensive ESLint validation and automated code quality checking
|
|
5
5
|
*/
|
|
6
|
-
|
|
7
|
-
|
|
6
|
+
import { XrayKnowledgeSkillBase } from "./shared/knowledge-skill-base.js";
|
|
7
|
+
declare class XrayLintServer extends XrayKnowledgeSkillBase {
|
|
8
8
|
constructor();
|
|
9
|
-
private setupToolHandlers;
|
|
10
9
|
private handleLint;
|
|
11
10
|
private handleLintCheck;
|
|
12
11
|
private runEslint;
|
|
13
12
|
private checkLintRules;
|
|
14
13
|
private generateLintSummary;
|
|
15
|
-
run(): Promise<void>;
|
|
16
14
|
}
|
|
17
15
|
export { XrayLintServer };
|