0xray 3.0.14 → 3.1.1
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/.gitignore.default +59 -0
- package/.mcp.json +35 -0
- package/.opencode/codex.codex +1 -1
- package/.opencode/commands/dependency-audit.md +3 -3
- package/.opencode/commands/summary-logger.md +4 -4
- package/.opencode/enforcer-config.json +2 -2
- package/.opencode/hooks/post-commit +1 -1
- package/.opencode/init.sh +10 -4
- package/.plugin/plugin.json +11 -0
- package/AGENTS-consumer.md +46 -0
- package/AGENTS.md +10 -10
- package/LICENSE +1 -1
- package/README.md +8 -8
- package/SKILLS.md +140 -0
- package/dist/.gitignore.default +59 -0
- package/dist/AGENTS.md +10 -10
- package/dist/CHANGELOG.md +34 -0
- package/dist/LICENSE +1 -1
- package/dist/README.md +8 -8
- package/dist/SKILLS.md +140 -0
- package/dist/agents/index.js +3 -1
- package/dist/agents/registry.js +13 -0
- package/dist/analytics/routing-refiner.js +1 -1
- package/dist/architect/architectural-integrity.js +3 -3
- package/dist/benchmark/performance-benchmark.js +4 -3
- package/dist/cli/commands/antigravity-status.js +23 -23
- package/dist/cli/commands/credible-init.js +1 -1
- package/dist/cli/commands/hermes-install.js +12 -4
- package/dist/cli/commands/mcp-install.js +1 -1
- package/dist/cli/commands/openclaw-install.js +10 -1
- package/dist/cli/commands/opencode-install.js +22 -0
- package/dist/cli/commands/plugin-commands.js +2 -2
- package/dist/cli/commands/publish-agent.js +5 -5
- package/dist/cli/commands/skill-install.js +39 -2
- package/dist/cli/commands/status.js +8 -3
- package/dist/cli/commands/storyteller.js +2 -2
- package/dist/cli/index.js +17 -11
- package/dist/cli/server.js +4 -4
- package/dist/core/activity-logger.js +4 -4
- package/dist/core/agent-spawn-gate.js +1 -1
- package/dist/core/boot-orchestrator.js +30 -31
- package/dist/core/bridge.mjs +26 -26
- package/dist/core/codex-formatter.js +2 -3
- package/dist/core/codex-injector.js +7 -7
- package/dist/core/config-loader.js +3 -2
- package/dist/core/config-paths.js +38 -31
- package/dist/core/context-loader.js +5 -5
- package/dist/core/features-config.js +1 -1
- package/dist/core/index.js +2 -2
- package/dist/core/logging-config.js +7 -7
- package/dist/core/orchestrator.js +2 -2
- package/dist/core/system-prompt-generator.js +2 -2
- package/dist/core/xray-activation.js +42 -41
- package/dist/delegation/agent-delegator.js +3 -3
- package/dist/enforcement/enforcer-tools.js +4 -4
- package/dist/enforcement/loaders/codex-loader.js +2 -2
- package/dist/execution/opencode-cli-invoker.js +1 -1
- package/dist/governance/governance-service.js +1 -1
- package/dist/governance/llm-governance-provider.js +223 -0
- package/dist/index.js +6 -6
- package/dist/inference/deploy-verifier.js +1 -1
- package/dist/inference/inference-cycle.js +16 -16
- package/dist/integrations/base/README.md +1 -1
- package/dist/integrations/enforcement-gate.js +2 -2
- package/dist/integrations/governance/index.js +1 -1
- package/dist/integrations/grok/grok-cli.js +20 -6
- package/dist/integrations/grok/hooks/pre-tool-use.js +3 -3
- package/dist/integrations/grok/plugin/0xray/.mcp.json +16 -4
- package/dist/integrations/grok/plugin/0xray/hooks/hooks.json +2 -2
- package/dist/integrations/hermes-agent/__init__.py +90 -79
- package/dist/integrations/hermes-agent/after-install.md +14 -14
- package/dist/integrations/hermes-agent/bridge.mjs +60 -25
- package/dist/integrations/hermes-agent/plugin.yaml +5 -5
- package/dist/integrations/hermes-agent/schemas.py +61 -12
- package/dist/integrations/hermes-agent/test_plugin.py +124 -124
- package/dist/integrations/hermes-agent/tools.py +129 -25
- package/dist/integrations/openclaw/README.md +6 -6
- package/dist/integrations/openclaw/config.js +1 -1
- package/dist/integrations/openclaw/index.js +2 -2
- package/dist/integrations/openclaw/types.js +3 -3
- package/dist/integrations/plugins/plugin-integration.js +1 -1
- package/dist/integrations/plugins/plugin-registry.js +3 -3
- package/dist/mcps/architect-tools.server.js +3 -2
- package/dist/mcps/auto-format.server.js +2 -2
- package/dist/mcps/boot-orchestrator.server.js +2 -2
- package/dist/mcps/config/config-loader.js +40 -9
- package/dist/mcps/config/server-config-registry.js +10 -10
- package/dist/mcps/connection/mcp-connection.js +1 -1
- package/dist/mcps/enforcer-tools.server.js +2 -2
- package/dist/mcps/estimation.server.js +3 -2
- package/dist/mcps/framework-compliance-audit.server.js +2 -2
- package/dist/mcps/framework-help.server.js +9 -8
- package/dist/mcps/governance.server.js +8 -4
- package/dist/mcps/knowledge-skills/api-design.server.js +3 -2
- package/dist/mcps/knowledge-skills/architecture-patterns.server.js +3 -2
- package/dist/mcps/knowledge-skills/bug-triage-specialist.server.js +3 -3
- package/dist/mcps/knowledge-skills/code-analyzer.server.js +2 -2
- package/dist/mcps/knowledge-skills/code-review.server.js +14 -39
- package/dist/mcps/knowledge-skills/content-creator.server.js +3 -3
- package/dist/mcps/knowledge-skills/database-design.server.js +2 -2
- package/dist/mcps/knowledge-skills/devops-deployment.server.js +3 -2
- package/dist/mcps/knowledge-skills/git-workflow.server.js +3 -2
- package/dist/mcps/knowledge-skills/growth-strategist.server.js +3 -3
- package/dist/mcps/knowledge-skills/log-monitor.server.js +3 -3
- package/dist/mcps/knowledge-skills/mobile-development.server.js +3 -3
- package/dist/mcps/knowledge-skills/multimodal-looker.server.js +3 -3
- package/dist/mcps/knowledge-skills/performance-optimization.server.js +2 -2
- package/dist/mcps/knowledge-skills/project-analysis.server.js +2 -2
- package/dist/mcps/knowledge-skills/refactoring-strategies.server.js +3 -2
- package/dist/mcps/knowledge-skills/security-audit.server.js +14 -44
- package/dist/mcps/knowledge-skills/seo-consultant.server.js +3 -2
- package/dist/mcps/knowledge-skills/session-management.server.js +3 -2
- package/dist/mcps/knowledge-skills/skill-invocation.server.js +105 -3
- package/dist/mcps/knowledge-skills/strategist.server.js +3 -3
- package/dist/mcps/knowledge-skills/tech-writer.server.js +3 -3
- package/dist/mcps/knowledge-skills/testing-best-practices.server.js +3 -2
- package/dist/mcps/knowledge-skills/testing-strategy.server.js +2 -2
- package/dist/mcps/knowledge-skills/ui-ux-design.server.js +5 -4
- package/dist/mcps/lint.server.js +4 -4
- package/dist/mcps/mcp-client.js +5 -5
- package/dist/mcps/model-health-check.server.js +3 -2
- package/dist/mcps/orchestrator/server.js +4 -3
- package/dist/mcps/orchestrator.server.js +2 -1
- package/dist/mcps/performance-analysis.server.js +2 -2
- package/dist/mcps/processor-pipeline.server.js +3 -2
- package/dist/mcps/registry.json +1 -1
- package/dist/mcps/researcher.server.js +14 -39
- package/dist/mcps/security-scan.server.js +2 -2
- package/dist/mcps/simulation/server-simulations.js +3 -3
- package/dist/mcps/state-manager.server.js +5 -5
- package/dist/metrics/agent-metrics.js +1 -1
- package/dist/orchestrator/enhanced-multi-agent-orchestrator.js +4 -4
- package/dist/orchestrator/intelligent-commit-batcher.js +2 -3
- package/dist/orchestrator/multi-agent-orchestration-coordinator.js +9 -9
- package/dist/orchestrator/orchestrator.js +9 -8
- package/dist/orchestrator/universal-registry-bridge.js +4 -4
- package/dist/postprocessor/PostProcessor.js +9 -9
- package/dist/postprocessor/services/RegressionAnalysisService.js +4 -4
- package/dist/postprocessor/triggers/GitHookTrigger.js +18 -18
- package/dist/processors/implementations/agents-md-validation-processor.js +2 -2
- package/dist/processors/implementations/inference-improvement-processor.js +1 -2
- package/dist/processors/implementations/log-protection-processor.js +2 -2
- package/dist/processors/implementations/publish-preflight-processor.js +2 -3
- package/dist/processors/implementations/regression-testing-processor.js +2 -2
- package/dist/processors/implementations/session-summary-processor.js +2 -2
- package/dist/processors/implementations/storytelling-trigger-processor.js +1 -2
- package/dist/public/about.html +6 -6
- package/dist/public/enterprise.html +1 -1
- package/dist/public/features.html +2 -2
- package/dist/public/index.html +4 -4
- package/dist/reporting/report-formatter.js +1 -1
- package/dist/scripts/activate-kernel-pipeline.js +4 -4
- package/dist/scripts/pre-command +1 -1
- package/dist/services/inference-tuner.js +2 -2
- package/dist/skills/api-design/SKILL.md +1 -1
- package/dist/skills/architect-tools/SKILL.md +1 -1
- package/dist/skills/architecture-patterns/SKILL.md +1 -1
- package/dist/skills/auto-format/SKILL.md +1 -1
- package/dist/skills/boot-orchestrator/SKILL.md +1 -1
- package/dist/skills/bug-triage/SKILL.md +1 -1
- package/dist/skills/code-analyzer/SKILL.md +1 -1
- package/dist/skills/code-review/SKILL.md +1 -1
- package/dist/skills/enforcer/SKILL.md +1 -1
- package/dist/skills/framework-compliance-audit/SKILL.md +1 -1
- package/dist/skills/git-workflow/SKILL.md +1 -1
- package/dist/skills/hermes-agent/SKILL.md +42 -42
- package/dist/skills/inference-improve/SKILL.md +1 -1
- package/dist/skills/lint/SKILL.md +1 -1
- package/dist/skills/log-monitor/SKILL.md +1 -1
- package/dist/skills/model-health-check/SKILL.md +1 -1
- package/dist/skills/multimodal-looker/SKILL.md +1 -1
- package/dist/skills/orchestrator/SKILL.md +1 -1
- package/dist/skills/performance-analysis/SKILL.md +1 -1
- package/dist/skills/performance-optimization/SKILL.md +1 -1
- package/dist/skills/processor-pipeline/SKILL.md +1 -1
- package/dist/skills/project-analysis/SKILL.md +1 -1
- package/dist/skills/refactoring-strategies/SKILL.md +1 -1
- package/dist/skills/registry.json +1 -1
- package/dist/skills/researcher/SKILL.md +1 -1
- package/dist/skills/security-audit/SKILL.md +1 -1
- package/dist/skills/security-scan/SKILL.md +1 -1
- package/dist/skills/session-management/SKILL.md +1 -1
- package/dist/skills/state-manager/SKILL.md +1 -1
- package/dist/skills/storyteller/SKILL.md +1 -1
- package/dist/skills/testing-best-practices/SKILL.md +1 -1
- package/dist/skills/testing-strategy/SKILL.md +1 -1
- package/dist/skills/ui-ux-design/SKILL.md +1 -1
- package/dist/state/index.js +1 -1
- package/dist/state/state-manager.js +3 -4
- package/dist/utils/import-resolver.js +1 -1
- package/dist/utils/path-resolver.js +2 -2
- package/dist/utils/token-manager.js +1 -1
- package/dist/validation/estimation-validator.js +1 -1
- package/package.json +10 -3
- package/scripts/hooks/pre-command +1 -1
- package/scripts/hooks/run-hook.js +2 -2
- package/scripts/node/auto-reflection-generator.mjs +30 -36
- package/scripts/node/govern-reflection.mjs +1 -1
- package/scripts/node/postinstall.cjs +37 -2
- package/scripts/node/pre-publish-guard.js +13 -9
- package/scripts/node/setup-xai-oauth.mjs +244 -0
- package/scripts/node/universal-version-manager.js +8 -8
- package/scripts/node/version-manager.mjs +1 -1
- package/src/integrations/grok/plugin/0xray/.mcp.json +16 -4
- package/src/integrations/grok/plugin/0xray/hooks/hooks.json +2 -2
- package/src/mcps/architect-tools.server.ts +2 -2
- package/src/mcps/auto-format.server.ts +2 -2
- package/src/mcps/boot-orchestrator.server.ts +2 -2
- package/src/mcps/config/__tests__/config-loader.test.ts +29 -33
- package/src/mcps/config/__tests__/server-config-registry.test.ts +12 -12
- package/src/mcps/config/config-loader.ts +50 -11
- package/src/mcps/config/server-config-registry.ts +10 -10
- package/src/mcps/connection/mcp-connection.ts +1 -1
- package/src/mcps/enforcer-tools.server.ts +2 -2
- package/src/mcps/estimation.server.ts +3 -2
- package/src/mcps/framework-compliance-audit.server.ts +2 -2
- package/src/mcps/framework-help.server.ts +9 -8
- package/src/mcps/governance.server.ts +8 -3
- package/src/mcps/knowledge-skills/api-design.server.ts +3 -2
- package/src/mcps/knowledge-skills/architecture-patterns.server.ts +2 -2
- package/src/mcps/knowledge-skills/bug-triage-specialist.server.ts +2 -2
- package/src/mcps/knowledge-skills/code-analyzer.server.ts +2 -2
- package/src/mcps/knowledge-skills/code-review.server.ts +21 -36
- package/src/mcps/knowledge-skills/content-creator.server.ts +3 -3
- package/src/mcps/knowledge-skills/database-design.server.ts +2 -2
- package/src/mcps/knowledge-skills/devops-deployment.server.ts +3 -2
- package/src/mcps/knowledge-skills/git-workflow.server.ts +3 -2
- package/src/mcps/knowledge-skills/growth-strategist.server.ts +3 -3
- package/src/mcps/knowledge-skills/log-monitor.server.ts +3 -3
- package/src/mcps/knowledge-skills/mobile-development.server.ts +3 -3
- package/src/mcps/knowledge-skills/multimodal-looker.server.ts +3 -3
- package/src/mcps/knowledge-skills/performance-optimization.server.ts +2 -2
- package/src/mcps/knowledge-skills/project-analysis.server.ts +2 -2
- package/src/mcps/knowledge-skills/refactoring-strategies.server.ts +3 -2
- package/src/mcps/knowledge-skills/security-audit.server.ts +21 -40
- package/src/mcps/knowledge-skills/seo-consultant.server.ts +3 -2
- package/src/mcps/knowledge-skills/session-management.server.ts +3 -2
- package/src/mcps/knowledge-skills/skill-invocation.server.ts +113 -3
- package/src/mcps/knowledge-skills/strategist.server.ts +3 -3
- package/src/mcps/knowledge-skills/tech-writer.server.ts +3 -3
- package/src/mcps/knowledge-skills/testing-best-practices.server.ts +3 -2
- package/src/mcps/knowledge-skills/testing-strategy.server.ts +2 -2
- package/src/mcps/knowledge-skills/ui-ux-design.server.ts +5 -4
- package/src/mcps/lint.server.ts +4 -4
- package/src/mcps/mcp-client.ts +5 -5
- package/src/mcps/model-health-check.server.ts +2 -2
- package/src/mcps/orchestrator/server.ts +4 -3
- package/src/mcps/orchestrator.server.ts +2 -1
- package/src/mcps/performance-analysis.server.ts +2 -2
- package/src/mcps/processor-pipeline.server.ts +3 -2
- package/src/mcps/registry.json +1 -1
- package/src/mcps/researcher.server.ts +21 -36
- package/src/mcps/security-scan.server.ts +2 -2
- package/src/mcps/simulation/server-simulations.ts +3 -3
- package/src/mcps/state-manager.server.ts +5 -5
- package/src/opencode/codex.codex +1 -1
- package/src/opencode/commands/dependency-audit.md +3 -3
- package/src/opencode/commands/summary-logger.md +4 -4
- package/src/opencode/enforcer-config.json +2 -2
- package/src/skills/api-design/SKILL.md +1 -1
- package/src/skills/architect-tools/SKILL.md +1 -1
- package/src/skills/architecture-patterns/SKILL.md +1 -1
- package/src/skills/auto-format/SKILL.md +1 -1
- package/src/skills/boot-orchestrator/SKILL.md +1 -1
- package/src/skills/bug-triage/SKILL.md +1 -1
- package/src/skills/code-analyzer/SKILL.md +1 -1
- package/src/skills/code-review/SKILL.md +1 -1
- package/src/skills/enforcer/SKILL.md +1 -1
- package/src/skills/framework-compliance-audit/SKILL.md +1 -1
- package/src/skills/git-workflow/SKILL.md +1 -1
- package/src/skills/hermes-agent/SKILL.md +42 -42
- package/src/skills/inference-improve/SKILL.md +1 -1
- package/src/skills/lint/SKILL.md +1 -1
- package/src/skills/log-monitor/SKILL.md +1 -1
- package/src/skills/model-health-check/SKILL.md +1 -1
- package/src/skills/multimodal-looker/SKILL.md +1 -1
- package/src/skills/orchestrator/SKILL.md +1 -1
- package/src/skills/performance-analysis/SKILL.md +1 -1
- package/src/skills/performance-optimization/SKILL.md +1 -1
- package/src/skills/processor-pipeline/SKILL.md +1 -1
- package/src/skills/project-analysis/SKILL.md +1 -1
- package/src/skills/refactoring-strategies/SKILL.md +1 -1
- package/src/skills/registry.json +1 -1
- package/src/skills/researcher/SKILL.md +1 -1
- package/src/skills/security-audit/SKILL.md +1 -1
- package/src/skills/security-scan/SKILL.md +1 -1
- package/src/skills/session-management/SKILL.md +1 -1
- package/src/skills/state-manager/SKILL.md +1 -1
- package/src/skills/storyteller/SKILL.md +1 -1
- package/src/skills/testing-best-practices/SKILL.md +1 -1
- package/src/skills/testing-strategy/SKILL.md +1 -1
- package/src/skills/ui-ux-design/SKILL.md +1 -1
- package/xray/agents_template.md +46 -0
- package/xray/codex.json +598 -0
- package/dist/plugin/xray-codex-injection.js +0 -857
- /package/dist/integrations/openclaw/hooks/{strray-hooks.js → xray-hooks.js} +0 -0
|
@@ -8,11 +8,12 @@ import {
|
|
|
8
8
|
ListToolsRequestSchema,
|
|
9
9
|
McpError,
|
|
10
10
|
} from "@modelcontextprotocol/sdk/types.js";
|
|
11
|
-
import * as
|
|
11
|
+
import * as fs from "fs";
|
|
12
12
|
import { fileURLToPath } from "url";
|
|
13
13
|
import { randomUUID } from "crypto";
|
|
14
14
|
import { mcpClientManager } from "../mcp-client.js";
|
|
15
15
|
import { frameworkLogger } from "../../core/framework-logger.js";
|
|
16
|
+
import { skillInstallCommand, skillRegistryCommand } from "../../cli/commands/skill-install.js";
|
|
16
17
|
|
|
17
18
|
interface ListSkillsArgs {
|
|
18
19
|
category?: "all" | "core" | "registry" | "knowledge";
|
|
@@ -90,7 +91,7 @@ class SkillInvocationServer {
|
|
|
90
91
|
constructor() {
|
|
91
92
|
this.server = new Server(
|
|
92
93
|
{
|
|
93
|
-
name: "xray/skill-invocation", version: "1.
|
|
94
|
+
name: "xray/skill-invocation", version: "3.1.0",
|
|
94
95
|
},
|
|
95
96
|
{
|
|
96
97
|
capabilities: {
|
|
@@ -363,6 +364,61 @@ class SkillInvocationServer {
|
|
|
363
364
|
required: ["storyType"],
|
|
364
365
|
},
|
|
365
366
|
},
|
|
367
|
+
{
|
|
368
|
+
name: "install-skill",
|
|
369
|
+
description: "Install skills from the registry or any git repo",
|
|
370
|
+
inputSchema: {
|
|
371
|
+
type: "object",
|
|
372
|
+
properties: {
|
|
373
|
+
source: {
|
|
374
|
+
type: "string",
|
|
375
|
+
description: "Source name or git URL to install skills from",
|
|
376
|
+
},
|
|
377
|
+
path: {
|
|
378
|
+
type: "string",
|
|
379
|
+
description: "Subdirectory in repo containing skills",
|
|
380
|
+
},
|
|
381
|
+
force: {
|
|
382
|
+
type: "boolean",
|
|
383
|
+
description: "Reinstall even if already installed",
|
|
384
|
+
},
|
|
385
|
+
},
|
|
386
|
+
required: ["source"],
|
|
387
|
+
},
|
|
388
|
+
},
|
|
389
|
+
{
|
|
390
|
+
name: "skill-registry-list",
|
|
391
|
+
description: "List all available skill registry sources",
|
|
392
|
+
inputSchema: {
|
|
393
|
+
type: "object",
|
|
394
|
+
properties: {},
|
|
395
|
+
},
|
|
396
|
+
},
|
|
397
|
+
{
|
|
398
|
+
name: "skill-registry-add",
|
|
399
|
+
description: "Add a new source to the skills registry",
|
|
400
|
+
inputSchema: {
|
|
401
|
+
type: "object",
|
|
402
|
+
properties: {
|
|
403
|
+
name: { type: "string", description: "Unique source name" },
|
|
404
|
+
url: { type: "string", description: "Repository URL" },
|
|
405
|
+
desc: { type: "string", description: "Short description" },
|
|
406
|
+
license: { type: "string", description: "License type" },
|
|
407
|
+
},
|
|
408
|
+
required: ["name", "url"],
|
|
409
|
+
},
|
|
410
|
+
},
|
|
411
|
+
{
|
|
412
|
+
name: "skill-registry-remove",
|
|
413
|
+
description: "Remove a source from the skills registry",
|
|
414
|
+
inputSchema: {
|
|
415
|
+
type: "object",
|
|
416
|
+
properties: {
|
|
417
|
+
name: { type: "string", description: "Source name to remove" },
|
|
418
|
+
},
|
|
419
|
+
required: ["name"],
|
|
420
|
+
},
|
|
421
|
+
},
|
|
366
422
|
],
|
|
367
423
|
};
|
|
368
424
|
});
|
|
@@ -399,6 +455,14 @@ class SkillInvocationServer {
|
|
|
399
455
|
return await this.handleSkillDocumentationGeneration(args as unknown as DocumentationGenerationArgs);
|
|
400
456
|
case "skill-storyteller":
|
|
401
457
|
return await this.handleSkillStoryteller(args as unknown as StorytellerArgs);
|
|
458
|
+
case "install-skill":
|
|
459
|
+
return await this.handleInstallSkill(args as unknown as { source: string; path?: string; force?: boolean });
|
|
460
|
+
case "skill-registry-list":
|
|
461
|
+
return await this.handleSkillRegistryList();
|
|
462
|
+
case "skill-registry-add":
|
|
463
|
+
return await this.handleSkillRegistryAdd(args as unknown as { name: string; url: string; desc?: string; license?: string });
|
|
464
|
+
case "skill-registry-remove":
|
|
465
|
+
return await this.handleSkillRegistryRemove(args as unknown as { name: string });
|
|
402
466
|
default:
|
|
403
467
|
throw new McpError(
|
|
404
468
|
ErrorCode.MethodNotFound,
|
|
@@ -824,6 +888,52 @@ class SkillInvocationServer {
|
|
|
824
888
|
};
|
|
825
889
|
}
|
|
826
890
|
|
|
891
|
+
private async captureConsole(fn: () => Promise<void>): Promise<string> {
|
|
892
|
+
const chunks: string[] = [];
|
|
893
|
+
const origLog = console.log;
|
|
894
|
+
console.log = (...args: unknown[]) => chunks.push(args.map(String).join(" "));
|
|
895
|
+
try {
|
|
896
|
+
await fn();
|
|
897
|
+
} finally {
|
|
898
|
+
console.log = origLog;
|
|
899
|
+
}
|
|
900
|
+
return chunks.join("\n");
|
|
901
|
+
}
|
|
902
|
+
|
|
903
|
+
private async handleInstallSkill(args: { source: string; path?: string; force?: boolean }) {
|
|
904
|
+
const opts: { path?: string; force?: boolean } = {};
|
|
905
|
+
if (args.path !== undefined) opts.path = args.path;
|
|
906
|
+
if (args.force !== undefined) opts.force = args.force;
|
|
907
|
+
const output = await this.captureConsole(() =>
|
|
908
|
+
skillInstallCommand(args.source, opts)
|
|
909
|
+
);
|
|
910
|
+
return { content: [{ type: "text", text: output || "Skill installation completed." }] };
|
|
911
|
+
}
|
|
912
|
+
|
|
913
|
+
private async handleSkillRegistryList() {
|
|
914
|
+
const output = await this.captureConsole(() =>
|
|
915
|
+
skillRegistryCommand("list")
|
|
916
|
+
);
|
|
917
|
+
return { content: [{ type: "text", text: output || "No registry sources configured." }] };
|
|
918
|
+
}
|
|
919
|
+
|
|
920
|
+
private async handleSkillRegistryAdd(args: { name: string; url: string; desc?: string; license?: string }) {
|
|
921
|
+
const registryArgs: Record<string, string> = { name: args.name, url: args.url };
|
|
922
|
+
if (args.desc !== undefined) registryArgs.desc = args.desc;
|
|
923
|
+
if (args.license !== undefined) registryArgs.license = args.license;
|
|
924
|
+
const output = await this.captureConsole(() =>
|
|
925
|
+
skillRegistryCommand("add", registryArgs)
|
|
926
|
+
);
|
|
927
|
+
return { content: [{ type: "text", text: output || "Source added." }] };
|
|
928
|
+
}
|
|
929
|
+
|
|
930
|
+
private async handleSkillRegistryRemove(args: { name: string }) {
|
|
931
|
+
const output = await this.captureConsole(() =>
|
|
932
|
+
skillRegistryCommand("remove", { name: args.name })
|
|
933
|
+
);
|
|
934
|
+
return { content: [{ type: "text", text: output || "Source removed." }] };
|
|
935
|
+
}
|
|
936
|
+
|
|
827
937
|
async run(): Promise<void> {
|
|
828
938
|
const transport = new StdioServerTransport();
|
|
829
939
|
await this.server.connect(transport);
|
|
@@ -917,7 +1027,7 @@ class SkillInvocationServer {
|
|
|
917
1027
|
}
|
|
918
1028
|
|
|
919
1029
|
// Start the server if this file is run directly
|
|
920
|
-
const entryPoint =
|
|
1030
|
+
const entryPoint = fs.realpathSync(process.argv[1] ?? "");
|
|
921
1031
|
if (entryPoint && fileURLToPath(import.meta.url) === entryPoint) {
|
|
922
1032
|
// If --port or MCP_PORT is set, use HTTP transport (for Grok CLI compatibility)
|
|
923
1033
|
const cliPort = process.argv.find((a) => a.startsWith("--port="))?.split("=")[1];
|
|
@@ -11,7 +11,7 @@ import {
|
|
|
11
11
|
CallToolRequestSchema,
|
|
12
12
|
ListToolsRequestSchema,
|
|
13
13
|
} from "@modelcontextprotocol/sdk/types.js";
|
|
14
|
-
import * as
|
|
14
|
+
import * as fs from "fs";
|
|
15
15
|
import { fileURLToPath } from "url";
|
|
16
16
|
import { frameworkLogger } from "../../core/framework-logger.js";
|
|
17
17
|
|
|
@@ -110,7 +110,7 @@ class StrategistServer {
|
|
|
110
110
|
constructor() {
|
|
111
111
|
this.server = new Server(
|
|
112
112
|
{
|
|
113
|
-
name: "xray/strategist", version: "1.
|
|
113
|
+
name: "xray/strategist", version: "3.1.0",
|
|
114
114
|
},
|
|
115
115
|
{
|
|
116
116
|
capabilities: {
|
|
@@ -258,7 +258,7 @@ class StrategistServer {
|
|
|
258
258
|
}
|
|
259
259
|
}
|
|
260
260
|
|
|
261
|
-
const entryPoint =
|
|
261
|
+
const entryPoint = fs.realpathSync(process.argv[1] ?? "");
|
|
262
262
|
if (entryPoint && fileURLToPath(import.meta.url) === entryPoint) {
|
|
263
263
|
const server = new StrategistServer();
|
|
264
264
|
server.start().catch((error) => frameworkLogger.log("mcps/strategist", "run", "error", { error: String(error) }));
|
|
@@ -166,7 +166,7 @@ class XrayDocumentationGenerationServer {
|
|
|
166
166
|
constructor() {
|
|
167
167
|
this.server = new Server(
|
|
168
168
|
{
|
|
169
|
-
name: "documentation-generation", version: "1.
|
|
169
|
+
name: "documentation-generation", version: "3.1.0",
|
|
170
170
|
},
|
|
171
171
|
{
|
|
172
172
|
capabilities: {
|
|
@@ -1053,7 +1053,7 @@ class XrayDocumentationGenerationServer {
|
|
|
1053
1053
|
openapi: "3.0.0",
|
|
1054
1054
|
info: {
|
|
1055
1055
|
title: "API Documentation",
|
|
1056
|
-
version: "1.
|
|
1056
|
+
version: "3.1.0",
|
|
1057
1057
|
description: "Generated API documentation",
|
|
1058
1058
|
},
|
|
1059
1059
|
servers: [
|
|
@@ -1630,7 +1630,7 @@ class XrayDocumentationGenerationServer {
|
|
|
1630
1630
|
}
|
|
1631
1631
|
|
|
1632
1632
|
// Run the server if this file is executed directly
|
|
1633
|
-
if (import.meta.url === `file://${process.argv[1]}`) {
|
|
1633
|
+
if (import.meta.url === `file://${fs.realpathSync(process.argv[1]!)}`) {
|
|
1634
1634
|
const server = new XrayDocumentationGenerationServer();
|
|
1635
1635
|
server.run().catch(() => {});
|
|
1636
1636
|
}
|
|
@@ -7,6 +7,7 @@
|
|
|
7
7
|
|
|
8
8
|
import { Server } from "@modelcontextprotocol/sdk/server/index.js";
|
|
9
9
|
import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js";
|
|
10
|
+
import * as fs from "fs";
|
|
10
11
|
import { frameworkLogger } from "../../core/framework-logger.js";
|
|
11
12
|
import { createGracefulShutdown } from "../../utils/shutdown-handler.js";
|
|
12
13
|
import {
|
|
@@ -209,7 +210,7 @@ class XrayTestingBestPracticesServer {
|
|
|
209
210
|
constructor() {
|
|
210
211
|
this.server = new Server(
|
|
211
212
|
{
|
|
212
|
-
name: "testing-best-practices", version: "1.
|
|
213
|
+
name: "testing-best-practices", version: "3.1.0",
|
|
213
214
|
},
|
|
214
215
|
{
|
|
215
216
|
capabilities: {
|
|
@@ -1224,7 +1225,7 @@ class XrayTestingBestPracticesServer {
|
|
|
1224
1225
|
}
|
|
1225
1226
|
|
|
1226
1227
|
// Run the server if this file is executed directly
|
|
1227
|
-
if (import.meta.url === `file://${process.argv[1]}`) {
|
|
1228
|
+
if (import.meta.url === `file://${fs.realpathSync(process.argv[1]!)}`) {
|
|
1228
1229
|
const server = new XrayTestingBestPracticesServer();
|
|
1229
1230
|
server.run().catch(() => {});
|
|
1230
1231
|
}
|
|
@@ -135,7 +135,7 @@ class XrayTestingStrategyServer {
|
|
|
135
135
|
constructor() {
|
|
136
136
|
this.server = new Server(
|
|
137
137
|
{
|
|
138
|
-
name: "testing-strategy", version: "1.
|
|
138
|
+
name: "testing-strategy", version: "3.1.0",
|
|
139
139
|
},
|
|
140
140
|
{
|
|
141
141
|
capabilities: {
|
|
@@ -1164,7 +1164,7 @@ describe("${pathModule.basename(sourceFile, ".ts")}", () => {${testCases}
|
|
|
1164
1164
|
}
|
|
1165
1165
|
|
|
1166
1166
|
// Start the server if run directly
|
|
1167
|
-
if (import.meta.url === `file://${process.argv[1]}`) {
|
|
1167
|
+
if (import.meta.url === `file://${fs.realpathSync(process.argv[1]!)}`) {
|
|
1168
1168
|
const server = new XrayTestingStrategyServer();
|
|
1169
1169
|
server.run().catch(() => {});
|
|
1170
1170
|
}
|
|
@@ -12,6 +12,7 @@ import {
|
|
|
12
12
|
ListToolsRequestSchema,
|
|
13
13
|
type CallToolResult,
|
|
14
14
|
} from "@modelcontextprotocol/sdk/types.js";
|
|
15
|
+
import * as fs from "fs";
|
|
15
16
|
import { frameworkLogger } from "../../core/framework-logger.js";
|
|
16
17
|
|
|
17
18
|
interface UIDesignAnalysis {
|
|
@@ -192,7 +193,7 @@ class XrayUIUXDesignServer {
|
|
|
192
193
|
constructor() {
|
|
193
194
|
this.server = new Server(
|
|
194
195
|
{
|
|
195
|
-
name: "ui-ux-design", version: "1.
|
|
196
|
+
name: "ui-ux-design", version: "3.1.0",
|
|
196
197
|
},
|
|
197
198
|
{
|
|
198
199
|
capabilities: {
|
|
@@ -1985,7 +1986,7 @@ Available: ${Object.keys(system.components).length} component types
|
|
|
1985
1986
|
await this.server.connect(transport);
|
|
1986
1987
|
await frameworkLogger.log(
|
|
1987
1988
|
"ui-ux-design.server",
|
|
1988
|
-
"-
|
|
1989
|
+
"-xray-ui-ux-design-mcp-server-running-",
|
|
1989
1990
|
"info",
|
|
1990
1991
|
{ message: "xray UI/UX Design MCP Server running..." },
|
|
1991
1992
|
);
|
|
@@ -2011,7 +2012,7 @@ Available: ${Object.keys(system.components).length} component types
|
|
|
2011
2012
|
clearTimeout(timeout);
|
|
2012
2013
|
await frameworkLogger.log(
|
|
2013
2014
|
"ui-ux-design.server",
|
|
2014
|
-
"-
|
|
2015
|
+
"-xray-mcp-server-shut-down-gracefully-",
|
|
2015
2016
|
"info",
|
|
2016
2017
|
{ message: "xray MCP Server shut down gracefully" },
|
|
2017
2018
|
);
|
|
@@ -2068,7 +2069,7 @@ Available: ${Object.keys(system.components).length} component types
|
|
|
2068
2069
|
}
|
|
2069
2070
|
|
|
2070
2071
|
// Run the server if this file is executed directly
|
|
2071
|
-
if (import.meta.url === `file://${process.argv[1]}`) {
|
|
2072
|
+
if (import.meta.url === `file://${fs.realpathSync(process.argv[1]!)}`) {
|
|
2072
2073
|
const server = new XrayUIUXDesignServer();
|
|
2073
2074
|
server.run().catch((error) => frameworkLogger.log("mcps/ui-ux-design", "run", "error", { error: String(error) }));
|
|
2074
2075
|
}
|
package/src/mcps/lint.server.ts
CHANGED
|
@@ -39,7 +39,7 @@ class XrayLintServer {
|
|
|
39
39
|
constructor() {
|
|
40
40
|
this.server = new Server(
|
|
41
41
|
{
|
|
42
|
-
name: "lint", version: "1.
|
|
42
|
+
name: "lint", version: "3.1.0",
|
|
43
43
|
},
|
|
44
44
|
{
|
|
45
45
|
capabilities: {
|
|
@@ -51,7 +51,7 @@ class XrayLintServer {
|
|
|
51
51
|
this.setupToolHandlers();
|
|
52
52
|
void frameworkLogger.log(
|
|
53
53
|
"lint.server",
|
|
54
|
-
"-
|
|
54
|
+
"-xray-lint-mcp-server-initialized-",
|
|
55
55
|
"info",
|
|
56
56
|
{ message: "0xRay Lint MCP Server initialized" },
|
|
57
57
|
);
|
|
@@ -467,7 +467,7 @@ ${checkResults.details.map((d) => `• ${d}`).join("\n")}
|
|
|
467
467
|
await this.server.connect(transport);
|
|
468
468
|
await frameworkLogger.log(
|
|
469
469
|
"lint.server",
|
|
470
|
-
"-
|
|
470
|
+
"-xray-lint-mcp-server-started-",
|
|
471
471
|
"info",
|
|
472
472
|
{ message: "0xRay Lint MCP Server started" },
|
|
473
473
|
);
|
|
@@ -475,7 +475,7 @@ ${checkResults.details.map((d) => `• ${d}`).join("\n")}
|
|
|
475
475
|
}
|
|
476
476
|
|
|
477
477
|
// Start the server if run directly
|
|
478
|
-
if (import.meta.url === `file://${process.argv[1]}`) {
|
|
478
|
+
if (import.meta.url === `file://${fs.realpathSync(process.argv[1]!)}`) {
|
|
479
479
|
const server = new XrayLintServer();
|
|
480
480
|
server.run().catch((error) => frameworkLogger.log("mcps/lint", "run", "error", { error: String(error) }));
|
|
481
481
|
}
|
package/src/mcps/mcp-client.ts
CHANGED
|
@@ -153,7 +153,7 @@ export class MCPClient extends EventEmitter {
|
|
|
153
153
|
* Pure MCP mode — simulation and generic fallbacks are disabled.
|
|
154
154
|
*/
|
|
155
155
|
private get isPureMcpMode(): boolean {
|
|
156
|
-
return process.env.
|
|
156
|
+
return process.env.XRAY_FORCE_MCP_GOVERNANCE === 'true';
|
|
157
157
|
}
|
|
158
158
|
|
|
159
159
|
/**
|
|
@@ -344,17 +344,17 @@ export class MCPClient extends EventEmitter {
|
|
|
344
344
|
],
|
|
345
345
|
'framework-help': [
|
|
346
346
|
{
|
|
347
|
-
name: '
|
|
347
|
+
name: 'xray_get_capabilities',
|
|
348
348
|
description: 'Get 0xRay framework capabilities',
|
|
349
349
|
inputSchema: { type: 'object', properties: {} },
|
|
350
350
|
},
|
|
351
351
|
{
|
|
352
|
-
name: '
|
|
352
|
+
name: 'xray_get_commands',
|
|
353
353
|
description: 'Get available 0xRay commands',
|
|
354
354
|
inputSchema: { type: 'object', properties: {} },
|
|
355
355
|
},
|
|
356
356
|
{
|
|
357
|
-
name: '
|
|
357
|
+
name: 'xray_explain_capability',
|
|
358
358
|
description: 'Explain a specific capability',
|
|
359
359
|
inputSchema: {
|
|
360
360
|
type: 'object',
|
|
@@ -470,7 +470,7 @@ export class MCPClient extends EventEmitter {
|
|
|
470
470
|
if (this.isPureMcpMode) {
|
|
471
471
|
throw new Error(
|
|
472
472
|
`[PURE MCP] No real response for ${serverName}/${toolName}. ` +
|
|
473
|
-
`All fallbacks are disabled when
|
|
473
|
+
`All fallbacks are disabled when XRAY_FORCE_MCP_GOVERNANCE=true.`
|
|
474
474
|
);
|
|
475
475
|
}
|
|
476
476
|
|
|
@@ -42,7 +42,7 @@ class XrayModelHealthCheckServer {
|
|
|
42
42
|
constructor() {
|
|
43
43
|
this.server = new Server(
|
|
44
44
|
{
|
|
45
|
-
name: "model-health-check", version: "1.
|
|
45
|
+
name: "model-health-check", version: "3.1.0",
|
|
46
46
|
},
|
|
47
47
|
{
|
|
48
48
|
capabilities: {
|
|
@@ -284,7 +284,7 @@ class XrayModelHealthCheckServer {
|
|
|
284
284
|
}
|
|
285
285
|
|
|
286
286
|
// Start the server if this file is run directly
|
|
287
|
-
if (import.meta.url === `file://${process.argv[1]}`) {
|
|
287
|
+
if (import.meta.url === `file://${fs.realpathSync(process.argv[1]!)}`) {
|
|
288
288
|
const server = new XrayModelHealthCheckServer();
|
|
289
289
|
server.start().catch((error) => frameworkLogger.log("mcps/model-health-check", "run", "error", { error: String(error) }));
|
|
290
290
|
}
|
|
@@ -11,8 +11,9 @@ import {
|
|
|
11
11
|
CallToolRequestSchema,
|
|
12
12
|
ListToolsRequestSchema,
|
|
13
13
|
} from '@modelcontextprotocol/sdk/types.js';
|
|
14
|
+
import * as fs from 'fs';
|
|
14
15
|
import { frameworkLogger } from '../../core/framework-logger.js';
|
|
15
|
-
import {
|
|
16
|
+
import { XrayStateManager } from '../../state/state-manager.js';
|
|
16
17
|
import { MultiAgentOrchestrationCoordinator } from '../../orchestrator/multi-agent-orchestration-coordinator.js';
|
|
17
18
|
|
|
18
19
|
import { TaskHandler } from './handlers/task-handler.js';
|
|
@@ -45,7 +46,7 @@ export class OrchestratorServer {
|
|
|
45
46
|
|
|
46
47
|
constructor() {
|
|
47
48
|
// Initialize actual coordinator
|
|
48
|
-
const stateManager = new
|
|
49
|
+
const stateManager = new XrayStateManager();
|
|
49
50
|
this.coordinator = new MultiAgentOrchestrationCoordinator(stateManager);
|
|
50
51
|
|
|
51
52
|
// Initialize handlers
|
|
@@ -377,7 +378,7 @@ export function createOrchestratorServer(): OrchestratorServer {
|
|
|
377
378
|
}
|
|
378
379
|
|
|
379
380
|
// Run if called directly
|
|
380
|
-
if (import.meta.url === `file://${process.argv[1]}`) {
|
|
381
|
+
if (import.meta.url === `file://${fs.realpathSync(process.argv[1]!)}`) {
|
|
381
382
|
const server = createOrchestratorServer();
|
|
382
383
|
server.start().catch((error) => {
|
|
383
384
|
frameworkLogger.log('orchestrator.server', 'fatal-error', 'error', {
|
|
@@ -7,6 +7,7 @@
|
|
|
7
7
|
* @deprecated Use src/mcps/orchestrator/server.ts instead
|
|
8
8
|
*/
|
|
9
9
|
|
|
10
|
+
import * as fs from 'fs';
|
|
10
11
|
import { frameworkLogger } from '../core/framework-logger.js';
|
|
11
12
|
|
|
12
13
|
export { OrchestratorServer, createOrchestratorServer } from './orchestrator/server.js';
|
|
@@ -24,7 +25,7 @@ export type {
|
|
|
24
25
|
} from './orchestrator/types.js';
|
|
25
26
|
|
|
26
27
|
// Run if called directly
|
|
27
|
-
if (import.meta.url === `file://${process.argv[1]}`) {
|
|
28
|
+
if (import.meta.url === `file://${fs.realpathSync(process.argv[1]!)}`) {
|
|
28
29
|
const { createOrchestratorServer } = await import('./orchestrator/server.js');
|
|
29
30
|
const server = createOrchestratorServer();
|
|
30
31
|
server.start().catch((error) => {
|
|
@@ -64,7 +64,7 @@ class XrayPerformanceAnalysisServer {
|
|
|
64
64
|
constructor() {
|
|
65
65
|
this.server = new Server(
|
|
66
66
|
{
|
|
67
|
-
name: "performance-analysis", version: "1.
|
|
67
|
+
name: "performance-analysis", version: "3.1.0",
|
|
68
68
|
},
|
|
69
69
|
{
|
|
70
70
|
capabilities: {
|
|
@@ -707,7 +707,7 @@ ${results.recommendations.map((r) => `• 💡 ${r}`).join("\n") || "No recommen
|
|
|
707
707
|
}
|
|
708
708
|
|
|
709
709
|
// Start the server if run directly
|
|
710
|
-
if (import.meta.url === `file://${process.argv[1]}`) {
|
|
710
|
+
if (import.meta.url === `file://${fs.realpathSync(process.argv[1]!)}`) {
|
|
711
711
|
const server = new XrayPerformanceAnalysisServer();
|
|
712
712
|
server.run().catch((error) => frameworkLogger.log("mcps/performance-analysis", "run", "error", { error: String(error) }));
|
|
713
713
|
}
|
|
@@ -10,6 +10,7 @@ import {
|
|
|
10
10
|
CallToolRequestSchema,
|
|
11
11
|
ListToolsRequestSchema,
|
|
12
12
|
} from "@modelcontextprotocol/sdk/types.js";
|
|
13
|
+
import * as fs from "fs";
|
|
13
14
|
import { frameworkLogger } from "../core/framework-logger.js";
|
|
14
15
|
import { CodexLoader } from "../enforcement/loaders/codex-loader.js";
|
|
15
16
|
import type { RuleDefinition, RuleValidationContext } from "../enforcement/types.js";
|
|
@@ -107,7 +108,7 @@ class XrayProcessorPipelineServer {
|
|
|
107
108
|
this.codexLoader = new CodexLoader();
|
|
108
109
|
this.server = new Server(
|
|
109
110
|
{
|
|
110
|
-
name: "processor-pipeline", version: "1.
|
|
111
|
+
name: "processor-pipeline", version: "3.1.0",
|
|
111
112
|
},
|
|
112
113
|
{
|
|
113
114
|
capabilities: {
|
|
@@ -770,7 +771,7 @@ ${complianceResults.actions.map((a: string) => `• 🔧 ${a}`).join("\n") || "N
|
|
|
770
771
|
}
|
|
771
772
|
|
|
772
773
|
// Start the server if run directly
|
|
773
|
-
if (import.meta.url === `file://${process.argv[1]}`) {
|
|
774
|
+
if (import.meta.url === `file://${fs.realpathSync(process.argv[1]!)}`) {
|
|
774
775
|
const server = new XrayProcessorPipelineServer();
|
|
775
776
|
server.run().catch((error) => frameworkLogger.log("mcps/processor-pipeline", "run", "error", { error: String(error) }));
|
|
776
777
|
}
|
package/src/mcps/registry.json
CHANGED
|
@@ -18,6 +18,7 @@ import {
|
|
|
18
18
|
import * as fs from "fs";
|
|
19
19
|
import * as path from "path";
|
|
20
20
|
import { frameworkLogger } from "../core/framework-logger.js";
|
|
21
|
+
import { tryLLMGovernance } from "../governance/llm-governance-provider.js";
|
|
21
22
|
|
|
22
23
|
interface SearchResult {
|
|
23
24
|
file: string;
|
|
@@ -54,7 +55,7 @@ class XrayLibrarianServer {
|
|
|
54
55
|
constructor() {
|
|
55
56
|
this.server = new Server(
|
|
56
57
|
{
|
|
57
|
-
name: "researcher", version: "1.
|
|
58
|
+
name: "researcher", version: "3.1.0",
|
|
58
59
|
},
|
|
59
60
|
{
|
|
60
61
|
capabilities: {
|
|
@@ -482,47 +483,31 @@ class XrayLibrarianServer {
|
|
|
482
483
|
*/
|
|
483
484
|
async analyzeProposal(args: AnalyzeProposalArgs): Promise<CallToolResult> {
|
|
484
485
|
const { proposalTitle = "", proposalDescription = "", evidence = [], proposalType = "" } = args || {};
|
|
485
|
-
const text = `${proposalTitle} ${proposalDescription} ${(evidence || []).join(" ")}`.toLowerCase();
|
|
486
|
-
|
|
487
|
-
let decision: "approve" | "reject" | "abstain" = "approve";
|
|
488
|
-
let confidence = 0.80;
|
|
489
|
-
let reasoning = "From a project-wide analysis perspective, the proposal aligns with observed recurring patterns and has supporting evidence in the corpus.";
|
|
490
|
-
|
|
491
|
-
if (text.includes("aml") || text.includes("kyc") || text.includes("anti-money")) {
|
|
492
|
-
decision = "approve";
|
|
493
|
-
confidence = 0.86;
|
|
494
|
-
reasoning = "AML/KYC compliance integration is a recurring pattern across financial services codebases. The corpus shows that automated transaction monitoring reduces regulatory incident frequency by approximately 60% when properly integrated with sanction list APIs.";
|
|
495
|
-
} else if (text.includes("psd2") || text.includes("strong customer authentication") || text.includes("payment initiation")) {
|
|
496
|
-
decision = "approve";
|
|
497
|
-
confidence = 0.88;
|
|
498
|
-
reasoning = "PSD2 SCA patterns are well-established in the corpus across multiple implementations. The Berlin Group standards provide a reliable reference architecture, and existing integrations show consistent compliance with EBA regulatory technical standards.";
|
|
499
|
-
} else if (text.includes("gdpr") || text.includes("right to erasure") || text.includes("data protection")) {
|
|
500
|
-
decision = "approve";
|
|
501
|
-
confidence = 0.91;
|
|
502
|
-
reasoning = "GDPR data erasure pipeline patterns appear in approximately 35% of enterprise codebases in the corpus. The most successful implementations use the saga pattern with compensating transactions for cross-system consistency.";
|
|
503
|
-
} else if (text.includes("extract method")) {
|
|
504
|
-
decision = "approve";
|
|
505
|
-
confidence = 0.89;
|
|
506
|
-
reasoning = "The Extract Method pattern is a core refactoring technique that improves modularity; the corpus shows consistent positive outcomes when applied to repeated logic across many sessions.";
|
|
507
|
-
} else if (text.includes("test coverage")) {
|
|
508
|
-
decision = "approve";
|
|
509
|
-
confidence = 0.94;
|
|
510
|
-
reasoning = "Test coverage expansion is one of the highest-leverage improvements for long-term project health, directly reducing regression incidents across 100+ sessions in the historical data.";
|
|
511
|
-
} else if (text.includes("technical debt")) {
|
|
512
|
-
decision = "approve";
|
|
513
|
-
confidence = 0.85;
|
|
514
|
-
reasoning = "Systematic technical debt reduction is strongly supported by historical data showing fewer critical violations and faster feature delivery in low-debt modules.";
|
|
515
|
-
}
|
|
516
486
|
|
|
517
|
-
|
|
518
|
-
|
|
487
|
+
const vote = await tryLLMGovernance(
|
|
488
|
+
"researcher",
|
|
489
|
+
proposalTitle || "",
|
|
490
|
+
proposalDescription || "",
|
|
491
|
+
evidence || [],
|
|
492
|
+
proposalType || "",
|
|
493
|
+
);
|
|
494
|
+
|
|
495
|
+
if (!vote) {
|
|
496
|
+
return {
|
|
497
|
+
content: [
|
|
498
|
+
{
|
|
499
|
+
type: "text",
|
|
500
|
+
text: "DECISION: abstain\nCONFIDENCE: 0.50\nREASONING: No LLM governance provider configured. Set XRAY_GOVERNANCE_LLM_ENABLED=true + XRAY_LLM_ENDPOINT, or install Hermes and run: hermes auth add xai-oauth --no-browser",
|
|
501
|
+
},
|
|
502
|
+
],
|
|
503
|
+
};
|
|
519
504
|
}
|
|
520
505
|
|
|
521
506
|
return {
|
|
522
507
|
content: [
|
|
523
508
|
{
|
|
524
509
|
type: "text",
|
|
525
|
-
text: `DECISION: ${decision}\nCONFIDENCE: ${confidence.toFixed(2)}\nREASONING: ${reasoning}`,
|
|
510
|
+
text: `DECISION: ${vote.decision}\nCONFIDENCE: ${vote.confidence.toFixed(2)}\nREASONING: ${vote.reasoning}`,
|
|
526
511
|
},
|
|
527
512
|
],
|
|
528
513
|
};
|
|
@@ -587,7 +572,7 @@ class XrayLibrarianServer {
|
|
|
587
572
|
}
|
|
588
573
|
|
|
589
574
|
// Run the server if this file is executed directly
|
|
590
|
-
if (import.meta.url === `file://${process.argv[1]}`) {
|
|
575
|
+
if (import.meta.url === `file://${fs.realpathSync(process.argv[1]!)}`) {
|
|
591
576
|
const server = new XrayLibrarianServer();
|
|
592
577
|
server.run().catch((error) => frameworkLogger.log("mcps/researcher", "run", "error", { error: String(error) }));
|
|
593
578
|
}
|
|
@@ -45,7 +45,7 @@ class XraySecurityScanServer {
|
|
|
45
45
|
constructor() {
|
|
46
46
|
this.server = new Server(
|
|
47
47
|
{
|
|
48
|
-
name: "security-scan", version: "1.
|
|
48
|
+
name: "security-scan", version: "3.1.0",
|
|
49
49
|
},
|
|
50
50
|
{
|
|
51
51
|
capabilities: {
|
|
@@ -643,7 +643,7 @@ ${results.recommendations.map((r) => `• ${r}`).join("\n") || "No recommendatio
|
|
|
643
643
|
}
|
|
644
644
|
|
|
645
645
|
// Start the server if run directly
|
|
646
|
-
if (import.meta.url === `file://${process.argv[1]}`) {
|
|
646
|
+
if (import.meta.url === `file://${fs.realpathSync(process.argv[1]!)}`) {
|
|
647
647
|
const server = new XraySecurityScanServer();
|
|
648
648
|
server.run().catch((error) => frameworkLogger.log("mcps/security-scan", "run", "error", { error: String(error) }));
|
|
649
649
|
}
|
|
@@ -86,7 +86,7 @@ export const researcherSimulations: Record<string, SimulatorFunction> = {
|
|
|
86
86
|
* Framework Help server simulations
|
|
87
87
|
*/
|
|
88
88
|
export const frameworkHelpSimulations: Record<string, SimulatorFunction> = {
|
|
89
|
-
|
|
89
|
+
xray_get_capabilities: (): MCPToolResult => ({
|
|
90
90
|
content: [
|
|
91
91
|
{
|
|
92
92
|
type: 'text',
|
|
@@ -118,7 +118,7 @@ export const frameworkHelpSimulations: Record<string, SimulatorFunction> = {
|
|
|
118
118
|
],
|
|
119
119
|
}),
|
|
120
120
|
|
|
121
|
-
|
|
121
|
+
xray_get_commands: (): MCPToolResult => ({
|
|
122
122
|
content: [
|
|
123
123
|
{
|
|
124
124
|
type: 'text',
|
|
@@ -146,7 +146,7 @@ framework-reporting-system - Generate comprehensive framework reports
|
|
|
146
146
|
],
|
|
147
147
|
}),
|
|
148
148
|
|
|
149
|
-
|
|
149
|
+
xray_explain_capability: (): MCPToolResult => ({
|
|
150
150
|
content: [
|
|
151
151
|
{
|
|
152
152
|
type: 'text',
|
|
@@ -62,7 +62,7 @@ interface ValidationResult {
|
|
|
62
62
|
|
|
63
63
|
type StateValue = string | number | boolean | object | null | undefined;
|
|
64
64
|
|
|
65
|
-
class
|
|
65
|
+
class XrayStateManagerServer {
|
|
66
66
|
private server: Server;
|
|
67
67
|
private state: Map<string, unknown> = new Map();
|
|
68
68
|
private stateFile: string;
|
|
@@ -71,7 +71,7 @@ class StrRayStateManagerServer {
|
|
|
71
71
|
constructor() {
|
|
72
72
|
this.server = new Server(
|
|
73
73
|
{
|
|
74
|
-
name: "state-manager", version: "1.
|
|
74
|
+
name: "state-manager", version: "3.1.0",
|
|
75
75
|
},
|
|
76
76
|
{
|
|
77
77
|
capabilities: {
|
|
@@ -769,9 +769,9 @@ ${results.repairedKeys.length > 0 ? `**Repaired Keys:**\n${results.repairedKeys.
|
|
|
769
769
|
}
|
|
770
770
|
|
|
771
771
|
// Start the server if run directly
|
|
772
|
-
if (import.meta.url === `file://${process.argv[1]}`) {
|
|
773
|
-
const server = new
|
|
772
|
+
if (import.meta.url === `file://${fs.realpathSync(process.argv[1]!)}`) {
|
|
773
|
+
const server = new XrayStateManagerServer();
|
|
774
774
|
server.run().catch((error) => frameworkLogger.log("mcps/state-manager", "run", "error", { error: String(error) }));
|
|
775
775
|
}
|
|
776
776
|
|
|
777
|
-
export {
|
|
777
|
+
export { XrayStateManagerServer };
|