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
|
@@ -3,28 +3,132 @@
|
|
|
3
3
|
*
|
|
4
4
|
* Advanced state management with persistence, synchronization, and conflict resolution
|
|
5
5
|
*/
|
|
6
|
-
import {
|
|
7
|
-
import {
|
|
8
|
-
import { CallToolRequestSchema, ListToolsRequestSchema, } from "@modelcontextprotocol/sdk/types.js";
|
|
6
|
+
import { CallToolRequestSchema, } from "@modelcontextprotocol/sdk/types.js";
|
|
7
|
+
import { XrayKnowledgeSkillBase } from "./shared/knowledge-skill-base.js";
|
|
9
8
|
import fs from "fs";
|
|
10
9
|
import path from "path";
|
|
11
10
|
import { frameworkLogger, generateJobId } from "../core/framework-logger.js";
|
|
12
|
-
class XrayStateManagerServer {
|
|
13
|
-
server;
|
|
11
|
+
class XrayStateManagerServer extends XrayKnowledgeSkillBase {
|
|
14
12
|
state = new Map();
|
|
15
13
|
stateFile;
|
|
16
14
|
backups = new Map();
|
|
17
15
|
constructor() {
|
|
18
|
-
|
|
19
|
-
name: "state-manager", version: "3.1.0",
|
|
20
|
-
}, {
|
|
21
|
-
capabilities: {
|
|
22
|
-
tools: {},
|
|
23
|
-
},
|
|
24
|
-
});
|
|
16
|
+
super("state-manager", "3.1.0");
|
|
25
17
|
this.stateFile = path.join(process.cwd(), ".opencode", "state", "mcp-state.json");
|
|
26
18
|
this.ensureStateDirectory();
|
|
27
19
|
this.loadState();
|
|
20
|
+
this.tools = [
|
|
21
|
+
{
|
|
22
|
+
name: "get-state",
|
|
23
|
+
description: "Get state value by key with type safety and validation",
|
|
24
|
+
inputSchema: {
|
|
25
|
+
type: "object",
|
|
26
|
+
properties: {
|
|
27
|
+
key: { type: "string" },
|
|
28
|
+
defaultValue: {
|
|
29
|
+
oneOf: [
|
|
30
|
+
{ type: "string" },
|
|
31
|
+
{ type: "number" },
|
|
32
|
+
{ type: "boolean" },
|
|
33
|
+
{ type: "object" },
|
|
34
|
+
{ type: "array" },
|
|
35
|
+
],
|
|
36
|
+
},
|
|
37
|
+
validate: { type: "boolean", default: true },
|
|
38
|
+
},
|
|
39
|
+
required: ["key"],
|
|
40
|
+
},
|
|
41
|
+
},
|
|
42
|
+
{
|
|
43
|
+
name: "set-state",
|
|
44
|
+
description: "Set state value by key with conflict resolution and persistence",
|
|
45
|
+
inputSchema: {
|
|
46
|
+
type: "object",
|
|
47
|
+
properties: {
|
|
48
|
+
key: { type: "string" },
|
|
49
|
+
value: {
|
|
50
|
+
oneOf: [
|
|
51
|
+
{ type: "string" },
|
|
52
|
+
{ type: "number" },
|
|
53
|
+
{ type: "boolean" },
|
|
54
|
+
{ type: "object" },
|
|
55
|
+
{ type: "array" },
|
|
56
|
+
],
|
|
57
|
+
},
|
|
58
|
+
persist: { type: "boolean", default: true },
|
|
59
|
+
backup: { type: "boolean", default: false },
|
|
60
|
+
},
|
|
61
|
+
required: ["key", "value"],
|
|
62
|
+
},
|
|
63
|
+
},
|
|
64
|
+
{
|
|
65
|
+
name: "delete-state",
|
|
66
|
+
description: "Delete state value by key with cleanup and validation",
|
|
67
|
+
inputSchema: {
|
|
68
|
+
type: "object",
|
|
69
|
+
properties: {
|
|
70
|
+
key: { type: "string" },
|
|
71
|
+
force: { type: "boolean", default: false },
|
|
72
|
+
},
|
|
73
|
+
required: ["key"],
|
|
74
|
+
},
|
|
75
|
+
},
|
|
76
|
+
{
|
|
77
|
+
name: "list-state",
|
|
78
|
+
description: "List all state keys with filtering and metadata",
|
|
79
|
+
inputSchema: {
|
|
80
|
+
type: "object",
|
|
81
|
+
properties: {
|
|
82
|
+
prefix: { type: "string" },
|
|
83
|
+
includeValues: { type: "boolean", default: false },
|
|
84
|
+
limit: { type: "number", default: 100 },
|
|
85
|
+
},
|
|
86
|
+
},
|
|
87
|
+
},
|
|
88
|
+
{
|
|
89
|
+
name: "backup-state",
|
|
90
|
+
description: "Create backup of current state or specific keys",
|
|
91
|
+
inputSchema: {
|
|
92
|
+
type: "object",
|
|
93
|
+
properties: {
|
|
94
|
+
keys: { type: "array", items: { type: "string" } },
|
|
95
|
+
name: { type: "string" },
|
|
96
|
+
},
|
|
97
|
+
},
|
|
98
|
+
},
|
|
99
|
+
{
|
|
100
|
+
name: "restore-state",
|
|
101
|
+
description: "Restore state from backup",
|
|
102
|
+
inputSchema: {
|
|
103
|
+
type: "object",
|
|
104
|
+
properties: {
|
|
105
|
+
name: { type: "string" },
|
|
106
|
+
keys: { type: "array", items: { type: "string" } },
|
|
107
|
+
},
|
|
108
|
+
required: ["name"],
|
|
109
|
+
},
|
|
110
|
+
},
|
|
111
|
+
{
|
|
112
|
+
name: "validate-state",
|
|
113
|
+
description: "Validate state integrity and consistency",
|
|
114
|
+
inputSchema: {
|
|
115
|
+
type: "object",
|
|
116
|
+
properties: {
|
|
117
|
+
deep: { type: "boolean", default: false },
|
|
118
|
+
repair: { type: "boolean", default: false },
|
|
119
|
+
},
|
|
120
|
+
},
|
|
121
|
+
},
|
|
122
|
+
];
|
|
123
|
+
this.handlers = {
|
|
124
|
+
"get-state": async (args) => this.handleGetState(args),
|
|
125
|
+
"set-state": async (args) => this.handleSetState(args),
|
|
126
|
+
"delete-state": async (args) => this.handleDeleteState(args),
|
|
127
|
+
"list-state": async (args) => this.handleListState(args),
|
|
128
|
+
"backup-state": async (args) => this.handleBackupState(args),
|
|
129
|
+
"restore-state": async (args) => this.handleRestoreState(args),
|
|
130
|
+
"validate-state": async (args) => this.handleValidateState(args),
|
|
131
|
+
};
|
|
28
132
|
this.setupToolHandlers();
|
|
29
133
|
const jobId = generateJobId("mcp-state-manager-init");
|
|
30
134
|
frameworkLogger.log("mcps/state-manager", "initialize", "info", {}, undefined, jobId);
|
|
@@ -62,144 +166,18 @@ class XrayStateManagerServer {
|
|
|
62
166
|
}
|
|
63
167
|
}
|
|
64
168
|
setupToolHandlers() {
|
|
65
|
-
|
|
66
|
-
this.server.setRequestHandler(ListToolsRequestSchema, async () => {
|
|
67
|
-
return {
|
|
68
|
-
tools: [
|
|
69
|
-
{
|
|
70
|
-
name: "get-state",
|
|
71
|
-
description: "Get state value by key with type safety and validation",
|
|
72
|
-
inputSchema: {
|
|
73
|
-
type: "object",
|
|
74
|
-
properties: {
|
|
75
|
-
key: { type: "string" },
|
|
76
|
-
defaultValue: {
|
|
77
|
-
oneOf: [
|
|
78
|
-
{ type: "string" },
|
|
79
|
-
{ type: "number" },
|
|
80
|
-
{ type: "boolean" },
|
|
81
|
-
{ type: "object" },
|
|
82
|
-
{ type: "array" },
|
|
83
|
-
],
|
|
84
|
-
},
|
|
85
|
-
validate: { type: "boolean", default: true },
|
|
86
|
-
},
|
|
87
|
-
required: ["key"],
|
|
88
|
-
},
|
|
89
|
-
},
|
|
90
|
-
{
|
|
91
|
-
name: "set-state",
|
|
92
|
-
description: "Set state value by key with conflict resolution and persistence",
|
|
93
|
-
inputSchema: {
|
|
94
|
-
type: "object",
|
|
95
|
-
properties: {
|
|
96
|
-
key: { type: "string" },
|
|
97
|
-
value: {
|
|
98
|
-
oneOf: [
|
|
99
|
-
{ type: "string" },
|
|
100
|
-
{ type: "number" },
|
|
101
|
-
{ type: "boolean" },
|
|
102
|
-
{ type: "object" },
|
|
103
|
-
{ type: "array" },
|
|
104
|
-
],
|
|
105
|
-
},
|
|
106
|
-
persist: { type: "boolean", default: true },
|
|
107
|
-
backup: { type: "boolean", default: false },
|
|
108
|
-
},
|
|
109
|
-
required: ["key", "value"],
|
|
110
|
-
},
|
|
111
|
-
},
|
|
112
|
-
{
|
|
113
|
-
name: "delete-state",
|
|
114
|
-
description: "Delete state value by key with cleanup and validation",
|
|
115
|
-
inputSchema: {
|
|
116
|
-
type: "object",
|
|
117
|
-
properties: {
|
|
118
|
-
key: { type: "string" },
|
|
119
|
-
force: { type: "boolean", default: false },
|
|
120
|
-
},
|
|
121
|
-
required: ["key"],
|
|
122
|
-
},
|
|
123
|
-
},
|
|
124
|
-
{
|
|
125
|
-
name: "list-state",
|
|
126
|
-
description: "List all state keys with filtering and metadata",
|
|
127
|
-
inputSchema: {
|
|
128
|
-
type: "object",
|
|
129
|
-
properties: {
|
|
130
|
-
prefix: { type: "string" },
|
|
131
|
-
includeValues: { type: "boolean", default: false },
|
|
132
|
-
limit: { type: "number", default: 100 },
|
|
133
|
-
},
|
|
134
|
-
},
|
|
135
|
-
},
|
|
136
|
-
{
|
|
137
|
-
name: "backup-state",
|
|
138
|
-
description: "Create backup of current state or specific keys",
|
|
139
|
-
inputSchema: {
|
|
140
|
-
type: "object",
|
|
141
|
-
properties: {
|
|
142
|
-
keys: { type: "array", items: { type: "string" } },
|
|
143
|
-
name: { type: "string" },
|
|
144
|
-
},
|
|
145
|
-
},
|
|
146
|
-
},
|
|
147
|
-
{
|
|
148
|
-
name: "restore-state",
|
|
149
|
-
description: "Restore state from backup",
|
|
150
|
-
inputSchema: {
|
|
151
|
-
type: "object",
|
|
152
|
-
properties: {
|
|
153
|
-
name: { type: "string" },
|
|
154
|
-
keys: { type: "array", items: { type: "string" } },
|
|
155
|
-
},
|
|
156
|
-
required: ["name"],
|
|
157
|
-
},
|
|
158
|
-
},
|
|
159
|
-
{
|
|
160
|
-
name: "validate-state",
|
|
161
|
-
description: "Validate state integrity and consistency",
|
|
162
|
-
inputSchema: {
|
|
163
|
-
type: "object",
|
|
164
|
-
properties: {
|
|
165
|
-
deep: { type: "boolean", default: false },
|
|
166
|
-
repair: { type: "boolean", default: false },
|
|
167
|
-
},
|
|
168
|
-
},
|
|
169
|
-
},
|
|
170
|
-
],
|
|
171
|
-
};
|
|
172
|
-
});
|
|
173
|
-
// Handle tool calls
|
|
169
|
+
this.setupListToolsHandler();
|
|
174
170
|
this.server.setRequestHandler(CallToolRequestSchema, async (request) => {
|
|
171
|
+
const { name, arguments: args } = request.params;
|
|
172
|
+
const handler = this.handlers[name];
|
|
173
|
+
if (!handler)
|
|
174
|
+
throw new Error(`Unknown tool: ${name}`);
|
|
175
175
|
try {
|
|
176
|
-
|
|
177
|
-
switch (name) {
|
|
178
|
-
case "get-state":
|
|
179
|
-
return await this.handleGetState(args);
|
|
180
|
-
case "set-state":
|
|
181
|
-
return await this.handleSetState(args);
|
|
182
|
-
case "delete-state":
|
|
183
|
-
return await this.handleDeleteState(args);
|
|
184
|
-
case "list-state":
|
|
185
|
-
return await this.handleListState(args);
|
|
186
|
-
case "backup-state":
|
|
187
|
-
return await this.handleBackupState(args);
|
|
188
|
-
case "restore-state":
|
|
189
|
-
return await this.handleRestoreState(args);
|
|
190
|
-
case "validate-state":
|
|
191
|
-
return await this.handleValidateState(args);
|
|
192
|
-
default:
|
|
193
|
-
throw new Error(`Unknown tool: ${name}`);
|
|
194
|
-
}
|
|
176
|
+
return await handler(args);
|
|
195
177
|
}
|
|
196
178
|
catch (error) {
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
type: "text",
|
|
200
|
-
text: `Error handling tool '${request.params.name}': ${error instanceof Error ? error.message : String(error)}`,
|
|
201
|
-
}],
|
|
202
|
-
};
|
|
179
|
+
frameworkLogger.log("mcps/state-manager", "tool", "error", { tool: name, error: String(error) });
|
|
180
|
+
throw error;
|
|
203
181
|
}
|
|
204
182
|
});
|
|
205
183
|
}
|
|
@@ -622,12 +600,6 @@ ${results.repairedKeys.length > 0 ? `**Repaired Keys:**\n${results.repairedKeys.
|
|
|
622
600
|
}
|
|
623
601
|
return dependents;
|
|
624
602
|
}
|
|
625
|
-
async run() {
|
|
626
|
-
const transport = new StdioServerTransport();
|
|
627
|
-
await this.server.connect(transport);
|
|
628
|
-
const jobId = generateJobId("mcp-state-manager-start");
|
|
629
|
-
frameworkLogger.log("mcps/state-manager", "start", "success", {}, undefined, jobId);
|
|
630
|
-
}
|
|
631
603
|
}
|
|
632
604
|
// Start the server if run directly
|
|
633
605
|
if (import.meta.url === `file://${fs.realpathSync(process.argv[1])}`) {
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
export { getMemoryRoutingProvider, getMemoryRoutingProviderSync, getMemoryRoutingConfig, resetMemoryRoutingProvider, initializeMemoryRouting, } from './provider-registry.js';
|
|
2
|
+
export { NullMemoryRoutingProvider, createMemoryRoutingProvider } from './null-provider.js';
|
|
3
|
+
export { loadMemoryRoutingProvider } from './provider-loader.js';
|
|
4
|
+
export { validateMemoryRoutingConfig } from './validate-config.js';
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
const EMPTY_CONTEXT = {
|
|
2
|
+
providerId: 'null',
|
|
3
|
+
matchedSignals: [],
|
|
4
|
+
matchedTags: [],
|
|
5
|
+
flags: {},
|
|
6
|
+
synthesisAvailable: false,
|
|
7
|
+
};
|
|
8
|
+
export class NullMemoryRoutingProvider {
|
|
9
|
+
id = 'null';
|
|
10
|
+
name = 'Null (no memory routing)';
|
|
11
|
+
isAvailable() {
|
|
12
|
+
return true;
|
|
13
|
+
}
|
|
14
|
+
buildRoutingContext() {
|
|
15
|
+
return { ...EMPTY_CONTEXT };
|
|
16
|
+
}
|
|
17
|
+
enhanceAgentCapabilities(base) {
|
|
18
|
+
return new Map(base);
|
|
19
|
+
}
|
|
20
|
+
enrichTasks(tasks) {
|
|
21
|
+
return tasks;
|
|
22
|
+
}
|
|
23
|
+
buildInheritedContext() {
|
|
24
|
+
return { providerId: 'null', matchedSignals: [], flags: {} };
|
|
25
|
+
}
|
|
26
|
+
selectAgent(capabilities, requiredCapabilities, complexity) {
|
|
27
|
+
let bestAgent = null;
|
|
28
|
+
let bestScore = -1;
|
|
29
|
+
for (const [agent, caps] of capabilities) {
|
|
30
|
+
if (complexity > caps.complexityThreshold)
|
|
31
|
+
continue;
|
|
32
|
+
const matchCount = requiredCapabilities.filter((c) => caps.capabilities.includes(c)).length;
|
|
33
|
+
const score = matchCount * 10 + caps.concurrentTasks;
|
|
34
|
+
if (score > bestScore) {
|
|
35
|
+
bestScore = score;
|
|
36
|
+
bestAgent = agent;
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
return bestAgent;
|
|
40
|
+
}
|
|
41
|
+
resolveThinDispatch(baseAgent, _operation, complexityScore) {
|
|
42
|
+
return {
|
|
43
|
+
agent: baseAgent,
|
|
44
|
+
adjustedScore: complexityScore,
|
|
45
|
+
context: { ...EMPTY_CONTEXT },
|
|
46
|
+
};
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
export function createMemoryRoutingProvider() {
|
|
50
|
+
return new NullMemoryRoutingProvider();
|
|
51
|
+
}
|
|
@@ -0,0 +1,91 @@
|
|
|
1
|
+
import { existsSync } from 'node:fs';
|
|
2
|
+
import { resolve, dirname } from 'node:path';
|
|
3
|
+
import { pathToFileURL } from 'node:url';
|
|
4
|
+
import { frameworkLogger } from '../core/framework-logger.js';
|
|
5
|
+
import { createMemoryRoutingProvider as createNullProvider } from './null-provider.js';
|
|
6
|
+
import { validateMemoryRoutingConfig } from './validate-config.js';
|
|
7
|
+
const REPERTOIRE_CANDIDATE_PATHS = [
|
|
8
|
+
'../repertoire/dist/provider/memory-routing-provider.js',
|
|
9
|
+
'../../repertoire/dist/provider/memory-routing-provider.js',
|
|
10
|
+
'../../../repertoire/dist/provider/memory-routing-provider.js',
|
|
11
|
+
];
|
|
12
|
+
/**
|
|
13
|
+
* SECURITY: features.json is a trusted configuration boundary.
|
|
14
|
+
* module_path is resolved from disk and dynamically imported without signature
|
|
15
|
+
* verification. Only grant write access to features.json to trusted operators.
|
|
16
|
+
*/
|
|
17
|
+
function resolveModulePath(configuredPath, cwd) {
|
|
18
|
+
if (!configuredPath)
|
|
19
|
+
return null;
|
|
20
|
+
const candidates = [
|
|
21
|
+
resolve(cwd, configuredPath),
|
|
22
|
+
configuredPath,
|
|
23
|
+
];
|
|
24
|
+
for (const candidate of candidates) {
|
|
25
|
+
if (existsSync(candidate))
|
|
26
|
+
return candidate;
|
|
27
|
+
}
|
|
28
|
+
return null;
|
|
29
|
+
}
|
|
30
|
+
function defaultPathForProvider(provider, cwd) {
|
|
31
|
+
if (provider !== 'repertoire')
|
|
32
|
+
return null;
|
|
33
|
+
for (const rel of REPERTOIRE_CANDIDATE_PATHS) {
|
|
34
|
+
const abs = resolve(cwd, rel);
|
|
35
|
+
if (existsSync(abs))
|
|
36
|
+
return abs;
|
|
37
|
+
}
|
|
38
|
+
return null;
|
|
39
|
+
}
|
|
40
|
+
export async function loadMemoryRoutingProvider(config, cwd = process.cwd()) {
|
|
41
|
+
const validation = validateMemoryRoutingConfig(config);
|
|
42
|
+
if (!validation.valid) {
|
|
43
|
+
await frameworkLogger.log('memory-routing', 'config-invalid', 'error', { errors: validation.errors, provider: config.provider });
|
|
44
|
+
return createNullProvider();
|
|
45
|
+
}
|
|
46
|
+
const effective = validation.normalized;
|
|
47
|
+
if (!effective.enabled || effective.provider === 'null') {
|
|
48
|
+
return createNullProvider();
|
|
49
|
+
}
|
|
50
|
+
const modulePath = resolveModulePath(effective.module_path, cwd) ??
|
|
51
|
+
defaultPathForProvider(effective.provider, cwd);
|
|
52
|
+
if (!modulePath) {
|
|
53
|
+
await frameworkLogger.log('memory-routing', 'provider-not-found', 'error', {
|
|
54
|
+
provider: effective.provider,
|
|
55
|
+
module_path: effective.module_path,
|
|
56
|
+
message: `Provider "${effective.provider}" is configured but module_path could not be resolved. Falling back to null provider.`,
|
|
57
|
+
});
|
|
58
|
+
return createNullProvider();
|
|
59
|
+
}
|
|
60
|
+
try {
|
|
61
|
+
const mod = await import(pathToFileURL(modulePath).href);
|
|
62
|
+
const factory = mod.createMemoryRoutingProvider ??
|
|
63
|
+
mod.default?.createMemoryRoutingProvider;
|
|
64
|
+
if (typeof factory !== 'function') {
|
|
65
|
+
throw new Error(`Module ${modulePath} must export createMemoryRoutingProvider()`);
|
|
66
|
+
}
|
|
67
|
+
const provider = factory((effective.config ?? {}));
|
|
68
|
+
if (!provider?.id || typeof provider.isAvailable !== 'function') {
|
|
69
|
+
throw new Error(`Invalid memory routing provider from ${modulePath}`);
|
|
70
|
+
}
|
|
71
|
+
if (!provider.isAvailable()) {
|
|
72
|
+
await frameworkLogger.log('memory-routing', 'provider-unavailable', 'error', {
|
|
73
|
+
providerId: provider.id,
|
|
74
|
+
modulePath,
|
|
75
|
+
message: `Provider "${provider.id}" loaded but isAvailable() returned false. Falling back to null provider.`,
|
|
76
|
+
});
|
|
77
|
+
return createNullProvider();
|
|
78
|
+
}
|
|
79
|
+
await frameworkLogger.log('memory-routing', 'provider-loaded', 'info', { providerId: provider.id, name: provider.name, modulePath });
|
|
80
|
+
return provider;
|
|
81
|
+
}
|
|
82
|
+
catch (err) {
|
|
83
|
+
await frameworkLogger.log('memory-routing', 'provider-load-failed', 'error', {
|
|
84
|
+
modulePath,
|
|
85
|
+
error: err instanceof Error ? err.message : String(err),
|
|
86
|
+
cwd,
|
|
87
|
+
configDir: dirname(modulePath),
|
|
88
|
+
});
|
|
89
|
+
return createNullProvider();
|
|
90
|
+
}
|
|
91
|
+
}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
import { featuresConfigLoader } from '../core/features-config.js';
|
|
2
|
+
import { NullMemoryRoutingProvider } from './null-provider.js';
|
|
3
|
+
import { loadMemoryRoutingProvider } from './provider-loader.js';
|
|
4
|
+
import { validateMemoryRoutingConfig } from './validate-config.js';
|
|
5
|
+
let cachedProvider = null;
|
|
6
|
+
let loadPromise = null;
|
|
7
|
+
const nullProviderSingleton = new NullMemoryRoutingProvider();
|
|
8
|
+
export function getMemoryRoutingConfig() {
|
|
9
|
+
const raw = featuresConfigLoader.loadConfig().memory_routing;
|
|
10
|
+
const validation = validateMemoryRoutingConfig(raw ?? { enabled: false, provider: 'null' });
|
|
11
|
+
return validation.normalized;
|
|
12
|
+
}
|
|
13
|
+
export async function getMemoryRoutingProvider(forceReload = false) {
|
|
14
|
+
if (!forceReload && cachedProvider)
|
|
15
|
+
return cachedProvider;
|
|
16
|
+
if (!forceReload && loadPromise)
|
|
17
|
+
return loadPromise;
|
|
18
|
+
const config = getMemoryRoutingConfig();
|
|
19
|
+
loadPromise = loadMemoryRoutingProvider(config).then((provider) => {
|
|
20
|
+
cachedProvider = provider;
|
|
21
|
+
loadPromise = null;
|
|
22
|
+
return provider;
|
|
23
|
+
});
|
|
24
|
+
return loadPromise;
|
|
25
|
+
}
|
|
26
|
+
/** Synchronous accessor — returns shared null singleton until async load completes. */
|
|
27
|
+
export function getMemoryRoutingProviderSync() {
|
|
28
|
+
return cachedProvider ?? nullProviderSingleton;
|
|
29
|
+
}
|
|
30
|
+
export function resetMemoryRoutingProvider() {
|
|
31
|
+
cachedProvider = null;
|
|
32
|
+
loadPromise = null;
|
|
33
|
+
}
|
|
34
|
+
/** Kick off background load at module init. */
|
|
35
|
+
export function initializeMemoryRouting() {
|
|
36
|
+
const config = getMemoryRoutingConfig();
|
|
37
|
+
if (config.enabled) {
|
|
38
|
+
void getMemoryRoutingProvider();
|
|
39
|
+
}
|
|
40
|
+
}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
const VALID_PROVIDERS = new Set(['null', 'repertoire', 'custom']);
|
|
2
|
+
export function validateMemoryRoutingConfig(raw) {
|
|
3
|
+
const errors = [];
|
|
4
|
+
const input = (raw ?? {});
|
|
5
|
+
const enabled = input.enabled === true;
|
|
6
|
+
const provider = typeof input.provider === 'string' ? input.provider : 'null';
|
|
7
|
+
if (!VALID_PROVIDERS.has(provider)) {
|
|
8
|
+
errors.push(`Invalid memory_routing.provider "${provider}". Must be one of: null, repertoire, custom.`);
|
|
9
|
+
}
|
|
10
|
+
if (enabled && provider !== 'null' && !input.module_path) {
|
|
11
|
+
errors.push(`memory_routing.provider "${provider}" requires module_path when enabled.`);
|
|
12
|
+
}
|
|
13
|
+
if (input.module_path !== undefined && typeof input.module_path !== 'string') {
|
|
14
|
+
errors.push('memory_routing.module_path must be a string.');
|
|
15
|
+
}
|
|
16
|
+
if (input.config !== undefined && (typeof input.config !== 'object' || input.config === null)) {
|
|
17
|
+
errors.push('memory_routing.config must be an object.');
|
|
18
|
+
}
|
|
19
|
+
const normalized = {
|
|
20
|
+
enabled,
|
|
21
|
+
provider: VALID_PROVIDERS.has(provider)
|
|
22
|
+
? provider
|
|
23
|
+
: 'null',
|
|
24
|
+
};
|
|
25
|
+
if (typeof input.module_path === 'string') {
|
|
26
|
+
normalized.module_path = input.module_path;
|
|
27
|
+
}
|
|
28
|
+
if (input.config && typeof input.config === 'object') {
|
|
29
|
+
normalized.config = input.config;
|
|
30
|
+
}
|
|
31
|
+
return { valid: errors.length === 0, errors, normalized };
|
|
32
|
+
}
|
|
@@ -8,18 +8,10 @@
|
|
|
8
8
|
*/
|
|
9
9
|
import { frameworkLogger } from '../core/framework-logger.js';
|
|
10
10
|
import { pluginRegistry } from './plugin-registry.js';
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
if (schema === ListToolsRequestSchema) {
|
|
16
|
-
this.__xrayListToolsHandler = handler;
|
|
17
|
-
}
|
|
18
|
-
if (schema === CallToolRequestSchema) {
|
|
19
|
-
this.__xrayCallToolHandler = handler;
|
|
20
|
-
}
|
|
21
|
-
return origSetRequestHandler.call(this, schema, handler);
|
|
22
|
-
};
|
|
11
|
+
// Note: handlers are extracted directly from the SDK's Server internal
|
|
12
|
+
// _requestHandlers Map (keyed by method literal) instead of patching
|
|
13
|
+
// Server.prototype.setRequestHandler. This avoids global prototype mutation
|
|
14
|
+
// while preserving access to the same tool/handler metadata.
|
|
23
15
|
// ── Named exports (17 servers) ──────────────────────────────────────────────
|
|
24
16
|
import { XrayCodeReviewServer } from '../mcps/knowledge-skills/code-review.server.js';
|
|
25
17
|
import { XraySecurityAuditServer } from '../mcps/knowledge-skills/security-audit.server.js';
|
|
@@ -54,13 +46,14 @@ async function toServerDescriptor(instance, serverName) {
|
|
|
54
46
|
const srv = instance;
|
|
55
47
|
const tools = srv.tools ?? [];
|
|
56
48
|
const handlers = srv.handlers ?? {};
|
|
57
|
-
//
|
|
49
|
+
// Read handlers from SDK's internal _requestHandlers Map (keyed by method literal)
|
|
58
50
|
const mcp = srv.server;
|
|
59
|
-
const
|
|
60
|
-
const
|
|
51
|
+
const requestHandlers = mcp?._requestHandlers;
|
|
52
|
+
const listHandler = requestHandlers?.get('tools/list');
|
|
53
|
+
const callHandler = requestHandlers?.get('tools/call');
|
|
61
54
|
if (tools.length === 0 && listHandler) {
|
|
62
55
|
try {
|
|
63
|
-
const listResult = await listHandler();
|
|
56
|
+
const listResult = await listHandler({ method: 'tools/list', params: {} }, {});
|
|
64
57
|
if (listResult?.tools?.length) {
|
|
65
58
|
return {
|
|
66
59
|
name: serverName,
|
|
@@ -69,7 +62,8 @@ async function toServerDescriptor(instance, serverName) {
|
|
|
69
62
|
if (!callHandler) {
|
|
70
63
|
throw new Error(`Unknown tool '${toolName}' on server '${serverName}'`);
|
|
71
64
|
}
|
|
72
|
-
|
|
65
|
+
const result = await callHandler({ method: 'tools/call', params: { name: toolName, arguments: args } }, {});
|
|
66
|
+
return result;
|
|
73
67
|
},
|
|
74
68
|
};
|
|
75
69
|
}
|
|
@@ -154,7 +148,7 @@ export async function registerDefaultPlugins() {
|
|
|
154
148
|
{ label: 'git-workflow', create: () => new XrayGitWorkflowServer(), serverName: 'git-workflow' },
|
|
155
149
|
{ label: 'log-monitor', create: () => new LogMonitorServer(), serverName: 'log-monitor' },
|
|
156
150
|
{ label: 'session-management', create: () => new SessionManagementServer(), serverName: 'session-management' },
|
|
157
|
-
{ label: 'strategist', create: () => new StrategistServer(), serverName: '
|
|
151
|
+
{ label: 'strategist', create: () => new StrategistServer(), serverName: 'strategist' },
|
|
158
152
|
]);
|
|
159
153
|
// ── Batch 5: Content & Growth ──
|
|
160
154
|
const batch5Count = await registerBatch('content-growth', [
|
|
@@ -167,7 +161,7 @@ export async function registerDefaultPlugins() {
|
|
|
167
161
|
// ── Batch 6: Specialized ──
|
|
168
162
|
const batch6Count = await registerBatch('specialized', [
|
|
169
163
|
{ label: 'bug-triage-specialist', create: () => new BugTriageSpecialistServer(), serverName: 'bug-triage-specialist' },
|
|
170
|
-
{ label: 'skill-invocation', create: () => new SkillInvocationServer(), serverName: '
|
|
164
|
+
{ label: 'skill-invocation', create: () => new SkillInvocationServer(), serverName: 'skill-invocation' },
|
|
171
165
|
{ label: 'testing-best-practices', create: () => new XrayTestingBestPracticesServer(), serverName: 'testing-best-practices' },
|
|
172
166
|
]);
|
|
173
167
|
const registered = batch1Count + batch2Count + batch3Count + batch4Count + batch5Count + batch6Count;
|
package/dist/nucleus/index.js
CHANGED
|
@@ -6,7 +6,6 @@
|
|
|
6
6
|
*/
|
|
7
7
|
export { handleGovernRequest, governSingle, getGovernanceService, GovernHTTPAdapter, NUCLEUS_VERSION, NUCLEUS_DESCRIPTION, } from './kernel.js';
|
|
8
8
|
export { pluginRegistry, } from './plugin-registry.js';
|
|
9
|
-
export { NucleusOrchestrator } from './orchestrator.js';
|
|
10
9
|
export { scoreComplexity, routeToAgent, scoreAndRoute } from './thin-dispatch.js';
|
|
11
10
|
export { NUCLEUS_THIN_DISPATCH_VERSION } from './thin-dispatch.js';
|
|
12
11
|
export { registerDefaultPlugins } from './default-plugins.js';
|