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.
- package/.opencode/codex.codex +1 -1
- package/.opencode/commands/auto-format.md +3 -3
- package/.opencode/commands/auto-summary-capture.md +2 -2
- package/.opencode/commands/enforcer-daily-scan.md +3 -3
- package/.opencode/commands/framework-compliance-audit.md +4 -4
- package/.opencode/commands/interactive-validator.md +2 -2
- package/.opencode/commands/job-summary-logger.md +2 -2
- package/.opencode/commands/mode-switch.md +1 -1
- package/.opencode/commands/model-health-check.md +2 -2
- package/.opencode/commands/performance-analysis.md +2 -2
- package/.opencode/commands/pre-commit-introspection.md +3 -3
- package/.opencode/commands/security-scan.md +3 -3
- package/.opencode/commands/sisyphus-validation.md +3 -3
- package/.opencode/commands/summary-logger.md +2 -2
- package/AGENTS.md +3 -13
- package/README.md +3 -3
- package/dist/AGENTS.md +3 -13
- package/dist/CHANGELOG.md +55 -0
- package/dist/README.md +3 -3
- package/dist/analytics/consent-manager.js +0 -1
- package/dist/analytics/emerging-pattern-detector.js +0 -1
- package/dist/analytics/pattern-learning-engine.js +0 -1
- package/dist/analytics/pattern-performance-tracker.js +0 -1
- package/dist/analytics/predictive-analytics.js +0 -1
- package/dist/analytics/prompt-pattern-analyzer.js +0 -1
- package/dist/analytics/routing-performance-analyzer.js +0 -1
- package/dist/analytics/routing-refiner.js +0 -1
- package/dist/analytics/simple-pattern-analyzer.js +0 -1
- package/dist/cli/commands/archive-logs.js +0 -1
- package/dist/cli/commands/opencode-install.js +13 -0
- package/dist/cli/commands/plugin-commands.js +0 -1
- package/dist/cli/commands/status.js +11 -13
- package/dist/cli/index.js +2 -7
- package/dist/core/activity-logger.js +0 -1
- package/dist/core/adaptive-kernel.js +0 -1
- package/dist/core/boot-orchestrator.js +2 -12
- package/dist/core/bridge.mjs +0 -1
- package/dist/core/codex-formatter.js +0 -1
- package/dist/core/codex-injector.js +0 -1
- package/dist/core/config-loader.js +36 -28
- package/dist/core/context-loader.js +0 -1
- package/dist/core/context-validator.js +0 -1
- package/dist/core/features-config.js +40 -1
- package/dist/core/kernel-patterns.js +0 -1
- package/dist/core/model-router.js +23 -64
- package/dist/core/system-prompt-generator.js +0 -1
- package/dist/delegation/agent-delegator.js +0 -1
- package/dist/delegation/agent-expertise.js +0 -1
- package/dist/delegation/analytics/index.js +0 -1
- package/dist/delegation/analytics/learning-engine.js +0 -1
- package/dist/delegation/analytics/outcome-tracker.js +0 -1
- package/dist/delegation/analytics/routing-analytics.js +0 -1
- package/dist/delegation/ast-code-parser.js +0 -1
- package/dist/delegation/complexity-analyzer.js +0 -1
- package/dist/delegation/dependency-graph-builder.js +0 -1
- package/dist/delegation/index.js +0 -1
- package/dist/delegation/metrics-aggregator.js +0 -1
- package/dist/delegation/session-coordinator.js +0 -1
- package/dist/delegation/strategy-selector.js +0 -1
- package/dist/delegation/voting-coordinator.js +0 -1
- package/dist/delegation/voting-types.js +0 -1
- package/dist/delegation/weighted-voting-aggregator.js +0 -1
- package/dist/enforcement/core/index.js +0 -1
- package/dist/enforcement/core/rule-executor.js +0 -1
- package/dist/enforcement/core/rule-hierarchy.js +0 -1
- package/dist/enforcement/core/rule-registry.js +0 -1
- package/dist/enforcement/core/violation-fixer.js +0 -1
- package/dist/enforcement/index.js +0 -1
- package/dist/enforcement/loaders/agent-triage-loader.js +0 -1
- package/dist/enforcement/loaders/agents-md-validation-loader.js +0 -1
- package/dist/enforcement/loaders/base-loader.js +0 -1
- package/dist/enforcement/loaders/codex-loader.js +0 -1
- package/dist/enforcement/loaders/index.js +0 -1
- package/dist/enforcement/loaders/loader-orchestrator.js +0 -1
- package/dist/enforcement/loaders/processor-loader.js +0 -1
- package/dist/enforcement/types.js +0 -1
- package/dist/enforcement/validators/architecture-validators.js +0 -1
- package/dist/enforcement/validators/base-validator.js +0 -1
- package/dist/enforcement/validators/code-quality-validators.js +0 -1
- package/dist/enforcement/validators/index.js +0 -1
- package/dist/enforcement/validators/security-validators.js +0 -1
- package/dist/enforcement/validators/testing-validators.js +0 -1
- package/dist/enforcement/validators/validator-registry.js +0 -1
- package/dist/governance/codex-policy.service.js +0 -1
- package/dist/inference/inference-agent-invoker.js +67 -0
- package/dist/inference/inference-applier.js +178 -0
- package/dist/inference/inference-cycle.js +51 -827
- package/dist/inference/inference-proposal-generator.js +149 -0
- package/dist/infrastructure/iac-validator.js +465 -0
- package/dist/infrastructure/schemas/cloud-schemas.js +488 -0
- package/dist/integrations/base/ExampleIntegration.js +0 -1
- package/dist/integrations/base/Integration.js +0 -1
- package/dist/integrations/base/index.js +0 -1
- package/dist/integrations/base/registry.js +0 -1
- package/dist/integrations/base/types.js +0 -1
- package/dist/integrations/enforcement-gate.js +3 -3
- package/dist/integrations/governance/governance-client.js +0 -1
- package/dist/integrations/governance/index.js +11 -19
- package/dist/integrations/governance/types.js +0 -1
- package/dist/integrations/hermes-agent/__init__.py +4 -0
- package/dist/integrations/hermes-agent/bridge.mjs +37 -0
- package/dist/integrations/openclaw/api-server.js +0 -1
- package/dist/integrations/openclaw/client.js +0 -1
- package/dist/integrations/openclaw/config.js +0 -1
- package/dist/integrations/openclaw/hooks/xray-hooks.js +0 -1
- package/dist/integrations/openclaw/index.js +0 -1
- package/dist/integrations/openclaw/types.js +0 -1
- package/dist/integrations/plugins/index.js +0 -1
- package/dist/integrations/plugins/plugin-integration.js +0 -1
- package/dist/integrations/plugins/plugin-registry.js +0 -1
- package/dist/mcps/agent-resolver.js +0 -1
- package/dist/mcps/architect-tools.server.js +119 -185
- package/dist/mcps/auto-format.server.js +56 -74
- package/dist/mcps/boot-orchestrator.server.js +67 -85
- package/dist/mcps/config/config-loader.js +6 -0
- package/dist/mcps/config/plugin-server-registry.js +0 -1
- package/dist/mcps/enforcer-tools.server.js +207 -273
- package/dist/mcps/estimation.server.js +63 -107
- package/dist/mcps/framework-compliance-audit.server.js +52 -81
- package/dist/mcps/framework-help.server.js +71 -89
- package/dist/mcps/governance.server.js +97 -149
- package/dist/mcps/knowledge-skills/api-design.server.js +33 -65
- package/dist/mcps/knowledge-skills/architecture-patterns.server.js +33 -65
- package/dist/mcps/knowledge-skills/bug-triage-specialist.server.js +123 -163
- package/dist/mcps/knowledge-skills/code-analyzer.server.js +210 -237
- package/dist/mcps/knowledge-skills/code-review.server.js +108 -142
- package/dist/mcps/knowledge-skills/content-creator.server.js +203 -225
- package/dist/mcps/knowledge-skills/database-design.server.js +116 -150
- package/dist/mcps/knowledge-skills/devops-deployment.server.js +123 -157
- package/dist/mcps/knowledge-skills/git-workflow.server.js +34 -67
- package/dist/mcps/knowledge-skills/growth-strategist.server.js +301 -323
- package/dist/mcps/knowledge-skills/log-monitor.server.js +139 -159
- package/dist/mcps/knowledge-skills/mobile-development.server.js +170 -200
- package/dist/mcps/knowledge-skills/multimodal-looker.server.js +122 -158
- package/dist/mcps/knowledge-skills/performance-optimization.server.js +88 -138
- package/dist/mcps/knowledge-skills/project-analysis.server.js +131 -218
- package/dist/mcps/knowledge-skills/refactoring-strategies.server.js +115 -150
- package/dist/mcps/knowledge-skills/security-audit.server.js +16 -143
- package/dist/mcps/knowledge-skills/seo-consultant.server.js +20 -213
- package/dist/mcps/knowledge-skills/session-management.server.js +13 -90
- package/dist/mcps/knowledge-skills/skill-invocation.server.js +43 -421
- package/dist/mcps/knowledge-skills/strategist.server.js +10 -55
- package/dist/mcps/knowledge-skills/tech-writer.server.js +16 -191
- package/dist/mcps/knowledge-skills/testing-best-practices.server.js +18 -191
- package/dist/mcps/knowledge-skills/testing-strategy.server.js +18 -156
- package/dist/mcps/knowledge-skills/ui-ux-design.server.js +22 -296
- package/dist/mcps/lint.server.js +50 -91
- package/dist/mcps/model-health-check.server.js +32 -60
- package/dist/mcps/orchestrator/aside-context.js +207 -0
- package/dist/mcps/orchestrator/config/agent-capabilities.js +30 -11
- package/dist/mcps/orchestrator/config/memory-routing-bridge.js +70 -0
- package/dist/mcps/orchestrator/execution/execution-planner.js +25 -7
- package/dist/mcps/orchestrator/handlers/complexity-handler.js +5 -1
- package/dist/mcps/orchestrator/handlers/status-handler.js +8 -1
- package/dist/mcps/orchestrator/handlers/task-handler.js +59 -1
- package/dist/mcps/orchestrator/index.js +5 -0
- package/dist/mcps/orchestrator/server.js +63 -8
- package/dist/mcps/performance-analysis.server.js +56 -87
- package/dist/mcps/processor-pipeline.server.js +68 -99
- package/dist/mcps/researcher.server.js +80 -153
- package/dist/mcps/security-scan.server.js +56 -70
- package/dist/mcps/shared/knowledge-skill-base.js +11 -4
- package/dist/mcps/state-manager.server.js +124 -152
- package/dist/memory-routing/index.js +4 -0
- package/dist/memory-routing/null-provider.js +51 -0
- package/dist/memory-routing/provider-loader.js +91 -0
- package/dist/memory-routing/provider-registry.js +40 -0
- package/dist/memory-routing/types.js +7 -0
- package/dist/memory-routing/validate-config.js +32 -0
- package/dist/monitoring/nudge-watchdog.js +0 -1
- package/dist/nucleus/default-plugins.js +13 -19
- package/dist/nucleus/index.js +0 -1
- package/dist/nucleus/thin-dispatch.js +29 -1
- package/dist/orchestrator/agent-spawn-governor.js +0 -1
- package/dist/orchestrator/intelligent-commit-batcher.js +2 -10
- package/dist/orchestrator/multi-agent-orchestration-coordinator.js +0 -1
- package/dist/orchestrator/orchestrator.js +8 -18
- package/dist/orchestrator/self-direction-activation.js +0 -1
- package/dist/orchestrator/universal-registry-bridge.js +0 -1
- package/dist/performance/performance-budget-enforcer.js +0 -1
- package/dist/performance/performance-regression-tester.js +0 -1
- package/dist/plugin/plugin-codex-context.js +87 -0
- package/dist/plugin/plugin-helpers.js +155 -0
- package/dist/plugin/plugin-logger.js +46 -0
- package/dist/plugin/plugin-modules.js +144 -0
- package/dist/plugin/plugin-quality-gate.js +88 -0
- package/dist/plugin/plugin-types.js +1 -0
- package/dist/plugin/xray-codex-injection.js +338 -0
- package/dist/postprocessor/PostProcessor.js +3 -9
- package/dist/postprocessor/analysis/CodeChangeAnalyzer.js +50 -0
- package/dist/postprocessor/config/ProcessorConfigLoader.js +16 -0
- package/dist/postprocessor/integration.js +194 -0
- package/dist/postprocessor/metamorphosis/SelfProposalEngine.js +472 -0
- package/dist/postprocessor/metamorphosis/index.js +1 -0
- package/dist/postprocessor/redeploy/RetryHandler.js +118 -0
- package/dist/postprocessor/services/RegressionAnalysisService.js +0 -1
- package/dist/postprocessor/triggers/APITrigger.js +0 -1
- package/dist/postprocessor/triggers/WebhookTrigger.js +0 -1
- package/dist/processors/implementations/agents-md-validation-processor.js +0 -1
- package/dist/processors/implementations/async-pattern-processor.js +0 -1
- package/dist/processors/implementations/console-log-guard-processor.js +0 -1
- package/dist/processors/implementations/coverage-analysis-processor.js +0 -1
- package/dist/processors/implementations/inference-improvement-processor.js +2 -9
- package/dist/processors/implementations/log-protection-processor.js +0 -1
- package/dist/processors/implementations/nudge-processor.js +0 -1
- package/dist/processors/implementations/performance-budget-processor.js +0 -1
- package/dist/processors/implementations/postprocessor-chain-validator.js +0 -1
- package/dist/processors/implementations/publish-preflight-processor.js +4 -12
- package/dist/processors/implementations/session-summary-processor.js +8 -16
- package/dist/processors/implementations/spawn-governance-processor.js +0 -1
- package/dist/processors/implementations/storytelling-trigger-processor.js +3 -28
- package/dist/processors/implementations/test-auto-creation-processor.js +0 -1
- package/dist/processors/implementations/typescript-compilation-processor.js +0 -1
- package/dist/processors/implementations/version-compliance-processor.js +0 -1
- package/dist/processors/processor-interfaces.js +0 -1
- package/dist/processors/processor-types.js +0 -1
- package/dist/scripts/integration.js +0 -1
- package/dist/security/comprehensive-security-audit.js +0 -1
- package/dist/security/security-agent-coordinator.js +0 -1
- package/dist/security/security-auditor.js +0 -1
- package/dist/security/security-hardener.js +0 -1
- package/dist/security/security-hardening-system.js +0 -1
- package/dist/security/security-headers.js +0 -1
- package/dist/security/security-orchestration-layer.js +0 -1
- package/dist/services/inference-tuner.js +0 -1
- package/dist/session/session-cleanup-manager.js +0 -1
- package/dist/session/session-monitor.js +0 -1
- package/dist/session/session-state-manager.js +0 -1
- package/dist/skills/xray-orchestrator/index.js +0 -1
- package/dist/utils/codex-parser.js +0 -1
- package/dist/utils/language-detector.js +0 -1
- package/dist/utils/shutdown-handler.js +0 -1
- package/dist/validation/agent-config-validator.js +280 -0
- package/dist/validation/orchestration-flow-validator.js +606 -0
- package/package.json +1 -1
- package/scripts/node/release.mjs +2 -2
- package/scripts/node/setup.cjs +28 -0
- package/scripts/node/universal-version-manager.js +1 -1
- package/src/mcps/agent-resolver.ts +0 -1
- package/src/mcps/architect-tools.server.ts +129 -211
- package/src/mcps/auto-format.server.ts +74 -103
- package/src/mcps/boot-orchestrator.server.ts +71 -96
- package/src/mcps/config/__tests__/config-loader.test.ts +6 -6
- package/src/mcps/config/config-loader.ts +7 -0
- package/src/mcps/config/plugin-server-registry.ts +0 -1
- package/src/mcps/enforcer-tools.server.ts +217 -294
- package/src/mcps/estimation.server.ts +62 -122
- package/src/mcps/framework-compliance-audit.server.ts +53 -95
- package/src/mcps/framework-help.server.ts +74 -96
- package/src/mcps/governance.server.ts +97 -162
- package/src/mcps/knowledge-skills/api-design.server.ts +33 -72
- package/src/mcps/knowledge-skills/architecture-patterns.server.ts +33 -72
- package/src/mcps/knowledge-skills/bug-triage-specialist.server.ts +148 -193
- package/src/mcps/knowledge-skills/code-analyzer.server.ts +222 -254
- package/src/mcps/knowledge-skills/code-review.server.ts +115 -157
- package/src/mcps/knowledge-skills/content-creator.server.ts +219 -246
- package/src/mcps/knowledge-skills/database-design.server.ts +119 -160
- package/src/mcps/knowledge-skills/devops-deployment.server.ts +126 -167
- package/src/mcps/knowledge-skills/git-workflow.server.ts +32 -77
- package/src/mcps/knowledge-skills/growth-strategist.server.ts +322 -360
- package/src/mcps/knowledge-skills/log-monitor.server.ts +68 -95
- package/src/mcps/knowledge-skills/mobile-development.server.ts +16 -56
- package/src/mcps/knowledge-skills/multimodal-looker.server.ts +13 -59
- package/src/mcps/knowledge-skills/performance-optimization.server.ts +13 -74
- package/src/mcps/knowledge-skills/project-analysis.server.ts +13 -120
- package/src/mcps/knowledge-skills/refactoring-strategies.server.ts +13 -60
- package/src/mcps/knowledge-skills/security-audit.server.ts +19 -157
- package/src/mcps/knowledge-skills/seo-consultant.server.ts +23 -227
- package/src/mcps/knowledge-skills/session-management.server.ts +17 -106
- package/src/mcps/knowledge-skills/skill-invocation.server.ts +45 -446
- package/src/mcps/knowledge-skills/strategist.server.ts +13 -63
- package/src/mcps/knowledge-skills/tech-writer.server.ts +19 -204
- package/src/mcps/knowledge-skills/testing-best-practices.server.ts +21 -204
- package/src/mcps/knowledge-skills/testing-strategy.server.ts +21 -165
- package/src/mcps/knowledge-skills/ui-ux-design.server.ts +25 -342
- package/src/mcps/lint.server.ts +52 -105
- package/src/mcps/model-health-check.server.ts +34 -70
- package/src/mcps/orchestrator/aside-context.ts +245 -0
- package/src/mcps/orchestrator/config/agent-capabilities.ts +49 -14
- package/src/mcps/orchestrator/config/memory-routing-bridge.ts +80 -0
- package/src/mcps/orchestrator/execution/execution-planner.ts +36 -9
- package/src/mcps/orchestrator/handlers/complexity-handler.ts +9 -3
- package/src/mcps/orchestrator/handlers/status-handler.ts +11 -1
- package/src/mcps/orchestrator/handlers/task-handler.ts +78 -2
- package/src/mcps/orchestrator/index.ts +29 -0
- package/src/mcps/orchestrator/server.ts +79 -24
- package/src/mcps/orchestrator/types.ts +50 -0
- package/src/mcps/performance-analysis.server.ts +59 -102
- package/src/mcps/processor-pipeline.server.ts +70 -108
- package/src/mcps/researcher.server.ts +87 -175
- package/src/mcps/security-scan.server.ts +57 -76
- package/src/mcps/shared/knowledge-skill-base.ts +12 -4
- package/src/mcps/state-manager.server.ts +129 -169
- package/src/opencode/codex.codex +1 -1
- package/src/opencode/commands/auto-format.md +3 -3
- package/src/opencode/commands/auto-summary-capture.md +2 -2
- package/src/opencode/commands/enforcer-daily-scan.md +3 -3
- package/src/opencode/commands/framework-compliance-audit.md +4 -4
- package/src/opencode/commands/interactive-validator.md +2 -2
- package/src/opencode/commands/job-summary-logger.md +2 -2
- package/src/opencode/commands/mode-switch.md +1 -1
- package/src/opencode/commands/model-health-check.md +2 -2
- package/src/opencode/commands/performance-analysis.md +2 -2
- package/src/opencode/commands/pre-commit-introspection.md +3 -3
- package/src/opencode/commands/security-scan.md +3 -3
- package/src/opencode/commands/sisyphus-validation.md +3 -3
- package/src/opencode/commands/summary-logger.md +2 -2
- package/src/skills/xray-orchestrator/index.ts +0 -1
- 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 {
|
|
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
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
},
|
|
140
|
-
{
|
|
141
|
-
|
|
142
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
},
|
|
198
|
-
{
|
|
199
|
-
|
|
200
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|