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
package/src/mcps/lint.server.ts
CHANGED
|
@@ -4,15 +4,10 @@
|
|
|
4
4
|
* Comprehensive ESLint validation and automated code quality checking
|
|
5
5
|
*/
|
|
6
6
|
|
|
7
|
-
import { Server } from "@modelcontextprotocol/sdk/server/index.js";
|
|
8
|
-
import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js";
|
|
9
|
-
import {
|
|
10
|
-
CallToolRequestSchema,
|
|
11
|
-
ListToolsRequestSchema,
|
|
12
|
-
} from "@modelcontextprotocol/sdk/types.js";
|
|
13
7
|
import { execFileSync } from "child_process";
|
|
14
8
|
import fs from "fs";
|
|
15
9
|
import { frameworkLogger } from "../core/framework-logger.js";
|
|
10
|
+
import { XrayKnowledgeSkillBase } from "./shared/knowledge-skill-base.js";
|
|
16
11
|
|
|
17
12
|
interface LintArgs {
|
|
18
13
|
files?: string[];
|
|
@@ -33,20 +28,63 @@ interface LintResults {
|
|
|
33
28
|
details: string[];
|
|
34
29
|
}
|
|
35
30
|
|
|
36
|
-
class XrayLintServer {
|
|
37
|
-
private server: Server;
|
|
38
|
-
|
|
31
|
+
class XrayLintServer extends XrayKnowledgeSkillBase {
|
|
39
32
|
constructor() {
|
|
40
|
-
|
|
33
|
+
super("lint", "3.1.0");
|
|
34
|
+
|
|
35
|
+
this.tools = [
|
|
41
36
|
{
|
|
42
|
-
name: "lint",
|
|
37
|
+
name: "lint",
|
|
38
|
+
description:
|
|
39
|
+
"Comprehensive ESLint validation and automated code quality checking",
|
|
40
|
+
inputSchema: {
|
|
41
|
+
type: "object",
|
|
42
|
+
properties: {
|
|
43
|
+
files: {
|
|
44
|
+
type: "array",
|
|
45
|
+
items: { type: "string" },
|
|
46
|
+
description:
|
|
47
|
+
"Specific files to lint (optional - lints all if empty)",
|
|
48
|
+
},
|
|
49
|
+
fix: {
|
|
50
|
+
type: "boolean",
|
|
51
|
+
default: false,
|
|
52
|
+
description:
|
|
53
|
+
"Automatically fix linting issues where possible",
|
|
54
|
+
},
|
|
55
|
+
strict: {
|
|
56
|
+
type: "boolean",
|
|
57
|
+
default: false,
|
|
58
|
+
description: "Use strict linting rules",
|
|
59
|
+
},
|
|
60
|
+
},
|
|
61
|
+
},
|
|
43
62
|
},
|
|
44
63
|
{
|
|
45
|
-
|
|
46
|
-
|
|
64
|
+
name: "lint-check",
|
|
65
|
+
description: "Check code quality without making changes",
|
|
66
|
+
inputSchema: {
|
|
67
|
+
type: "object",
|
|
68
|
+
properties: {
|
|
69
|
+
files: {
|
|
70
|
+
type: "array",
|
|
71
|
+
items: { type: "string" },
|
|
72
|
+
description: "Files to check",
|
|
73
|
+
},
|
|
74
|
+
rules: {
|
|
75
|
+
type: "array",
|
|
76
|
+
items: { type: "string" },
|
|
77
|
+
description: "Specific ESLint rules to check",
|
|
78
|
+
},
|
|
79
|
+
},
|
|
47
80
|
},
|
|
48
81
|
},
|
|
49
|
-
|
|
82
|
+
];
|
|
83
|
+
|
|
84
|
+
this.handlers = {
|
|
85
|
+
"lint": async (args) => this.handleLint(args as LintArgs),
|
|
86
|
+
"lint-check": async (args) => this.handleLintCheck(args as LintCheckArgs),
|
|
87
|
+
};
|
|
50
88
|
|
|
51
89
|
this.setupToolHandlers();
|
|
52
90
|
void frameworkLogger.log(
|
|
@@ -57,87 +95,6 @@ class XrayLintServer {
|
|
|
57
95
|
);
|
|
58
96
|
}
|
|
59
97
|
|
|
60
|
-
private setupToolHandlers() {
|
|
61
|
-
// List available tools
|
|
62
|
-
this.server.setRequestHandler(ListToolsRequestSchema, async () => {
|
|
63
|
-
return {
|
|
64
|
-
tools: [
|
|
65
|
-
{
|
|
66
|
-
name: "lint",
|
|
67
|
-
description:
|
|
68
|
-
"Comprehensive ESLint validation and automated code quality checking",
|
|
69
|
-
inputSchema: {
|
|
70
|
-
type: "object",
|
|
71
|
-
properties: {
|
|
72
|
-
files: {
|
|
73
|
-
type: "array",
|
|
74
|
-
items: { type: "string" },
|
|
75
|
-
description:
|
|
76
|
-
"Specific files to lint (optional - lints all if empty)",
|
|
77
|
-
},
|
|
78
|
-
fix: {
|
|
79
|
-
type: "boolean",
|
|
80
|
-
default: false,
|
|
81
|
-
description:
|
|
82
|
-
"Automatically fix linting issues where possible",
|
|
83
|
-
},
|
|
84
|
-
strict: {
|
|
85
|
-
type: "boolean",
|
|
86
|
-
default: false,
|
|
87
|
-
description: "Use strict linting rules",
|
|
88
|
-
},
|
|
89
|
-
},
|
|
90
|
-
},
|
|
91
|
-
},
|
|
92
|
-
{
|
|
93
|
-
name: "lint-check",
|
|
94
|
-
description: "Check code quality without making changes",
|
|
95
|
-
inputSchema: {
|
|
96
|
-
type: "object",
|
|
97
|
-
properties: {
|
|
98
|
-
files: {
|
|
99
|
-
type: "array",
|
|
100
|
-
items: { type: "string" },
|
|
101
|
-
description: "Files to check",
|
|
102
|
-
},
|
|
103
|
-
rules: {
|
|
104
|
-
type: "array",
|
|
105
|
-
items: { type: "string" },
|
|
106
|
-
description: "Specific ESLint rules to check",
|
|
107
|
-
},
|
|
108
|
-
},
|
|
109
|
-
},
|
|
110
|
-
},
|
|
111
|
-
],
|
|
112
|
-
};
|
|
113
|
-
});
|
|
114
|
-
|
|
115
|
-
// Handle tool calls
|
|
116
|
-
this.server.setRequestHandler(CallToolRequestSchema, async (request) => {
|
|
117
|
-
const { name, arguments: args } = request.params;
|
|
118
|
-
|
|
119
|
-
try {
|
|
120
|
-
switch (name) {
|
|
121
|
-
case "lint":
|
|
122
|
-
return await this.handleLint(args as unknown as LintArgs);
|
|
123
|
-
case "lint-check":
|
|
124
|
-
return await this.handleLintCheck(args as unknown as LintCheckArgs);
|
|
125
|
-
default:
|
|
126
|
-
throw new Error(`Unknown tool: ${name}`);
|
|
127
|
-
}
|
|
128
|
-
} catch (error) {
|
|
129
|
-
return {
|
|
130
|
-
content: [
|
|
131
|
-
{
|
|
132
|
-
type: "text",
|
|
133
|
-
text: `❌ Tool execution failed: ${error instanceof Error ? error.message : String(error)}`,
|
|
134
|
-
},
|
|
135
|
-
],
|
|
136
|
-
};
|
|
137
|
-
}
|
|
138
|
-
});
|
|
139
|
-
}
|
|
140
|
-
|
|
141
98
|
private async handleLint(args: LintArgs) {
|
|
142
99
|
const files = args.files || [];
|
|
143
100
|
const fix = args.fix || false;
|
|
@@ -462,16 +419,6 @@ ${checkResults.details.map((d) => `• ${d}`).join("\n")}
|
|
|
462
419
|
- Fixed: ${results.issues.fixed}`;
|
|
463
420
|
}
|
|
464
421
|
|
|
465
|
-
async run() {
|
|
466
|
-
const transport = new StdioServerTransport();
|
|
467
|
-
await this.server.connect(transport);
|
|
468
|
-
await frameworkLogger.log(
|
|
469
|
-
"lint.server",
|
|
470
|
-
"-xray-lint-mcp-server-started-",
|
|
471
|
-
"info",
|
|
472
|
-
{ message: "0xRay Lint MCP Server started" },
|
|
473
|
-
);
|
|
474
|
-
}
|
|
475
422
|
}
|
|
476
423
|
|
|
477
424
|
// Start the server if run directly
|
|
@@ -4,16 +4,11 @@
|
|
|
4
4
|
* Advanced model compatibility validation and dynamic health assessment
|
|
5
5
|
*/
|
|
6
6
|
|
|
7
|
-
import { Server } from "@modelcontextprotocol/sdk/server/index.js";
|
|
8
|
-
import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js";
|
|
9
7
|
import { modelRouter } from "../core/model-router.js";
|
|
10
|
-
import {
|
|
11
|
-
CallToolRequestSchema,
|
|
12
|
-
ListToolsRequestSchema,
|
|
13
|
-
} from "@modelcontextprotocol/sdk/types.js";
|
|
14
8
|
import { execSync } from "child_process";
|
|
15
9
|
import fs from "fs";
|
|
16
10
|
import { frameworkLogger } from "../core/framework-logger.js";
|
|
11
|
+
import { XrayKnowledgeSkillBase } from "./shared/knowledge-skill-base.js";
|
|
17
12
|
|
|
18
13
|
interface ModelHealthCheckArgs {
|
|
19
14
|
models?: string[];
|
|
@@ -36,73 +31,47 @@ interface ModelHealthReportData {
|
|
|
36
31
|
summary: { total: number; healthy: number; issues: number };
|
|
37
32
|
}
|
|
38
33
|
|
|
39
|
-
class XrayModelHealthCheckServer {
|
|
40
|
-
private server: Server;
|
|
41
|
-
|
|
34
|
+
class XrayModelHealthCheckServer extends XrayKnowledgeSkillBase {
|
|
42
35
|
constructor() {
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
},
|
|
36
|
+
super("model-health-check", "3.1.0");
|
|
37
|
+
|
|
38
|
+
this.tools = [
|
|
47
39
|
{
|
|
48
|
-
|
|
49
|
-
|
|
40
|
+
name: "model-health-check",
|
|
41
|
+
description:
|
|
42
|
+
"Advanced model compatibility validation and dynamic health assessment",
|
|
43
|
+
inputSchema: {
|
|
44
|
+
type: "object",
|
|
45
|
+
properties: {
|
|
46
|
+
models: {
|
|
47
|
+
type: "array",
|
|
48
|
+
items: { type: "string" },
|
|
49
|
+
description:
|
|
50
|
+
"Specific models to check (optional - checks all configured if empty)",
|
|
51
|
+
},
|
|
52
|
+
compatibility: {
|
|
53
|
+
type: "boolean",
|
|
54
|
+
default: true,
|
|
55
|
+
description: "Include compatibility matrix in results",
|
|
56
|
+
},
|
|
57
|
+
performance: {
|
|
58
|
+
type: "boolean",
|
|
59
|
+
default: true,
|
|
60
|
+
description: "Include performance metrics in results",
|
|
61
|
+
},
|
|
62
|
+
},
|
|
50
63
|
},
|
|
51
64
|
},
|
|
52
|
-
|
|
65
|
+
];
|
|
66
|
+
|
|
67
|
+
this.handlers = {
|
|
68
|
+
"model-health-check": async (args) => this.handleModelHealthCheck((args || {}) as ModelHealthCheckArgs),
|
|
69
|
+
};
|
|
53
70
|
|
|
54
71
|
this.setupToolHandlers();
|
|
55
72
|
frameworkLogger.log("mcps/model-health-check", "initialize", "info");
|
|
56
73
|
}
|
|
57
74
|
|
|
58
|
-
private setupToolHandlers() {
|
|
59
|
-
// List available tools
|
|
60
|
-
this.server.setRequestHandler(ListToolsRequestSchema, async () => {
|
|
61
|
-
return {
|
|
62
|
-
tools: [
|
|
63
|
-
{
|
|
64
|
-
name: "model-health-check",
|
|
65
|
-
description:
|
|
66
|
-
"Advanced model compatibility validation and dynamic health assessment",
|
|
67
|
-
inputSchema: {
|
|
68
|
-
type: "object",
|
|
69
|
-
properties: {
|
|
70
|
-
models: {
|
|
71
|
-
type: "array",
|
|
72
|
-
items: { type: "string" },
|
|
73
|
-
description:
|
|
74
|
-
"Specific models to check (optional - checks all configured if empty)",
|
|
75
|
-
},
|
|
76
|
-
compatibility: {
|
|
77
|
-
type: "boolean",
|
|
78
|
-
default: true,
|
|
79
|
-
description: "Include compatibility matrix in results",
|
|
80
|
-
},
|
|
81
|
-
performance: {
|
|
82
|
-
type: "boolean",
|
|
83
|
-
default: true,
|
|
84
|
-
description: "Include performance metrics in results",
|
|
85
|
-
},
|
|
86
|
-
},
|
|
87
|
-
},
|
|
88
|
-
},
|
|
89
|
-
],
|
|
90
|
-
};
|
|
91
|
-
});
|
|
92
|
-
|
|
93
|
-
// Handle tool calls
|
|
94
|
-
this.server.setRequestHandler(CallToolRequestSchema, async (request) => {
|
|
95
|
-
const { name, arguments: args } = request.params;
|
|
96
|
-
|
|
97
|
-
switch (name) {
|
|
98
|
-
case "model-health-check":
|
|
99
|
-
return await this.handleModelHealthCheck((args || {}) as unknown as ModelHealthCheckArgs);
|
|
100
|
-
default:
|
|
101
|
-
throw new Error(`Unknown tool: ${name}`);
|
|
102
|
-
}
|
|
103
|
-
});
|
|
104
|
-
}
|
|
105
|
-
|
|
106
75
|
private async handleModelHealthCheck(args: ModelHealthCheckArgs) {
|
|
107
76
|
const models = args.models || [modelRouter.getValidatedModel()];
|
|
108
77
|
const includeCompatibility = args.compatibility !== false;
|
|
@@ -276,17 +245,12 @@ class XrayModelHealthCheckServer {
|
|
|
276
245
|
return report;
|
|
277
246
|
}
|
|
278
247
|
|
|
279
|
-
public async start() {
|
|
280
|
-
const transport = new StdioServerTransport();
|
|
281
|
-
await this.server.connect(transport);
|
|
282
|
-
frameworkLogger.log("mcps/model-health-check", "start", "info");
|
|
283
|
-
}
|
|
284
248
|
}
|
|
285
249
|
|
|
286
250
|
// Start the server if this file is run directly
|
|
287
251
|
if (import.meta.url === `file://${fs.realpathSync(process.argv[1]!)}`) {
|
|
288
252
|
const server = new XrayModelHealthCheckServer();
|
|
289
|
-
server.
|
|
253
|
+
server.run().catch((error) => frameworkLogger.log("mcps/model-health-check", "run", "error", { error: String(error) }));
|
|
290
254
|
}
|
|
291
255
|
|
|
292
256
|
export default XrayModelHealthCheckServer;
|
|
@@ -0,0 +1,245 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* AsideContext — bounded subcontext for depth, continuity, and layered exploration
|
|
3
|
+
*
|
|
4
|
+
* Enables the orchestrator to spawn sub-investigations that inherit session context,
|
|
5
|
+
* accumulate structured observations from v3 subsystems (governance, orchestration,
|
|
6
|
+
* complexity analysis), and feed results back into the governance loop.
|
|
7
|
+
*/
|
|
8
|
+
|
|
9
|
+
import { frameworkLogger } from "../../core/framework-logger.js";
|
|
10
|
+
import type {
|
|
11
|
+
AsideContextOptions,
|
|
12
|
+
AsideObservation,
|
|
13
|
+
AsideResult,
|
|
14
|
+
ActiveAside,
|
|
15
|
+
} from "./types.js";
|
|
16
|
+
import type { InferenceCycleResult } from "../../inference/inference-cycle.js";
|
|
17
|
+
import type { OrchestrationResult, ComplexityAnalysis } from "./types.js";
|
|
18
|
+
|
|
19
|
+
let asideCounter = 0;
|
|
20
|
+
const activeAsides = new Map<string, ActiveAside>();
|
|
21
|
+
|
|
22
|
+
export function getActiveAsideCount(): number {
|
|
23
|
+
return activeAsides.size;
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
export function getActiveAsideIds(): string[] {
|
|
27
|
+
return Array.from(activeAsides.keys());
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
export function getAsideState(asideId: string): ActiveAside | undefined {
|
|
31
|
+
return activeAsides.get(asideId);
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
export function addObservations(
|
|
35
|
+
asideId: string,
|
|
36
|
+
observations: AsideObservation[],
|
|
37
|
+
): boolean {
|
|
38
|
+
const aside = activeAsides.get(asideId);
|
|
39
|
+
if (!aside) return false;
|
|
40
|
+
aside.observations.push(...observations);
|
|
41
|
+
return true;
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
export function extractGovernanceObservations(
|
|
45
|
+
result: InferenceCycleResult,
|
|
46
|
+
): AsideObservation[] {
|
|
47
|
+
const obs: AsideObservation[] = [];
|
|
48
|
+
obs.push({
|
|
49
|
+
key: "governanceCycleId",
|
|
50
|
+
value: result.cycleId,
|
|
51
|
+
source: "inference/inference-cycle.ts",
|
|
52
|
+
});
|
|
53
|
+
obs.push({
|
|
54
|
+
key: "governanceVoteCount",
|
|
55
|
+
value: String(result.votes.length),
|
|
56
|
+
source: "inference/inference-cycle.ts",
|
|
57
|
+
});
|
|
58
|
+
const approved = result.votes.filter((v) => v.decision === "approve").length;
|
|
59
|
+
const rejected = result.votes.filter((v) => v.decision === "reject").length;
|
|
60
|
+
obs.push({
|
|
61
|
+
key: "governanceApprovedCount",
|
|
62
|
+
value: String(approved),
|
|
63
|
+
source: "inference/inference-cycle.ts",
|
|
64
|
+
});
|
|
65
|
+
obs.push({
|
|
66
|
+
key: "governanceRejectedCount",
|
|
67
|
+
value: String(rejected),
|
|
68
|
+
source: "inference/inference-cycle.ts",
|
|
69
|
+
});
|
|
70
|
+
if (result.corpusSummary) {
|
|
71
|
+
obs.push({
|
|
72
|
+
key: "corpusSessionCount",
|
|
73
|
+
value: String(result.corpusSummary.sessions),
|
|
74
|
+
source: "inference/inference-cycle.ts",
|
|
75
|
+
});
|
|
76
|
+
obs.push({
|
|
77
|
+
key: "corpusPatternCount",
|
|
78
|
+
value: String(result.corpusSummary.recurringPatterns),
|
|
79
|
+
source: "inference/inference-cycle.ts",
|
|
80
|
+
});
|
|
81
|
+
}
|
|
82
|
+
return obs;
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
export function extractOrchestrationObservations(
|
|
86
|
+
result: OrchestrationResult,
|
|
87
|
+
): AsideObservation[] {
|
|
88
|
+
const obs: AsideObservation[] = [];
|
|
89
|
+
obs.push({
|
|
90
|
+
key: "orchestrationSuccess",
|
|
91
|
+
value: String(result.success),
|
|
92
|
+
source: "mcps/orchestrator/types.ts",
|
|
93
|
+
});
|
|
94
|
+
obs.push({
|
|
95
|
+
key: "tasksCompleted",
|
|
96
|
+
value: String(result.completedTasks),
|
|
97
|
+
source: "mcps/orchestrator/types.ts",
|
|
98
|
+
});
|
|
99
|
+
obs.push({
|
|
100
|
+
key: "tasksFailed",
|
|
101
|
+
value: String(result.failedTasks),
|
|
102
|
+
source: "mcps/orchestrator/types.ts",
|
|
103
|
+
});
|
|
104
|
+
obs.push({
|
|
105
|
+
key: "orchestrationDuration",
|
|
106
|
+
value: `${result.duration}ms`,
|
|
107
|
+
source: "mcps/orchestrator/types.ts",
|
|
108
|
+
});
|
|
109
|
+
for (const b of result.bottlenecks) {
|
|
110
|
+
obs.push({
|
|
111
|
+
key: "bottleneck",
|
|
112
|
+
value: b.substring(0, 200),
|
|
113
|
+
source: "mcps/orchestrator/types.ts",
|
|
114
|
+
});
|
|
115
|
+
}
|
|
116
|
+
for (const r of result.recommendations) {
|
|
117
|
+
obs.push({
|
|
118
|
+
key: "recommendation",
|
|
119
|
+
value: r.substring(0, 200),
|
|
120
|
+
source: "mcps/orchestrator/types.ts",
|
|
121
|
+
});
|
|
122
|
+
}
|
|
123
|
+
return obs;
|
|
124
|
+
}
|
|
125
|
+
|
|
126
|
+
export function extractComplexityObservations(
|
|
127
|
+
analysis: ComplexityAnalysis,
|
|
128
|
+
): AsideObservation[] {
|
|
129
|
+
const obs: AsideObservation[] = [];
|
|
130
|
+
obs.push({
|
|
131
|
+
key: "complexityScore",
|
|
132
|
+
value: String(analysis.overallComplexity),
|
|
133
|
+
source: "mcps/orchestrator/execution/execution-planner.ts",
|
|
134
|
+
});
|
|
135
|
+
obs.push({
|
|
136
|
+
key: "recommendedStrategy",
|
|
137
|
+
value: analysis.recommendedStrategy,
|
|
138
|
+
source: "mcps/orchestrator/execution/execution-planner.ts",
|
|
139
|
+
});
|
|
140
|
+
obs.push({
|
|
141
|
+
key: "parallelPotential",
|
|
142
|
+
value: String(analysis.parallelPotential),
|
|
143
|
+
source: "mcps/orchestrator/execution/execution-planner.ts",
|
|
144
|
+
});
|
|
145
|
+
obs.push({
|
|
146
|
+
key: "estimatedDuration",
|
|
147
|
+
value: `${analysis.estimatedDuration}ms`,
|
|
148
|
+
source: "mcps/orchestrator/execution/execution-planner.ts",
|
|
149
|
+
});
|
|
150
|
+
for (const tc of analysis.taskComplexity) {
|
|
151
|
+
obs.push({
|
|
152
|
+
key: `taskComplexity`,
|
|
153
|
+
value: `${tc.complexity} (${tc.category})`,
|
|
154
|
+
source: "mcps/orchestrator/execution/execution-planner.ts",
|
|
155
|
+
});
|
|
156
|
+
}
|
|
157
|
+
return obs;
|
|
158
|
+
}
|
|
159
|
+
|
|
160
|
+
export async function spawnAside(
|
|
161
|
+
options: AsideContextOptions,
|
|
162
|
+
): Promise<AsideResult> {
|
|
163
|
+
const asideId = options.parentAsideId
|
|
164
|
+
? `${options.parentAsideId}.aside-${++asideCounter}`
|
|
165
|
+
: `aside-${++asideCounter}-${Date.now()}`;
|
|
166
|
+
const startTime = Date.now();
|
|
167
|
+
|
|
168
|
+
const aside: ActiveAside = {
|
|
169
|
+
asideId,
|
|
170
|
+
description: options.description,
|
|
171
|
+
startedAt: startTime,
|
|
172
|
+
observations: [],
|
|
173
|
+
...(options.inheritedContext !== undefined ? { inheritedContext: options.inheritedContext } : {}),
|
|
174
|
+
...(options.parentAsideId !== undefined ? { parentAsideId: options.parentAsideId } : {}),
|
|
175
|
+
...(options.sessionId !== undefined ? { sessionId: options.sessionId } : {}),
|
|
176
|
+
...(options.priorVerdictContext !== undefined ? { priorVerdictContext: options.priorVerdictContext } : {}),
|
|
177
|
+
};
|
|
178
|
+
|
|
179
|
+
activeAsides.set(asideId, aside);
|
|
180
|
+
|
|
181
|
+
frameworkLogger.log("aside-context", "aside-spawn", "info", {
|
|
182
|
+
asideId,
|
|
183
|
+
description: options.description,
|
|
184
|
+
sessionId: options.sessionId,
|
|
185
|
+
parentAsideId: options.parentAsideId,
|
|
186
|
+
activeAsideCount: activeAsides.size,
|
|
187
|
+
});
|
|
188
|
+
|
|
189
|
+
if (options.priorVerdictContext) {
|
|
190
|
+
const decision = options.priorVerdictContext["decision"];
|
|
191
|
+
if (decision) {
|
|
192
|
+
aside.observations.push({
|
|
193
|
+
key: "governanceDecision",
|
|
194
|
+
value: String(decision),
|
|
195
|
+
source: "priorVerdictContext",
|
|
196
|
+
});
|
|
197
|
+
}
|
|
198
|
+
}
|
|
199
|
+
|
|
200
|
+
const duration = Date.now() - startTime;
|
|
201
|
+
|
|
202
|
+
const result: AsideResult = {
|
|
203
|
+
asideId,
|
|
204
|
+
description: options.description,
|
|
205
|
+
success: true,
|
|
206
|
+
duration,
|
|
207
|
+
observations: aside.observations,
|
|
208
|
+
...(options.priorVerdictContext !== undefined ? { priorVerdictContext: options.priorVerdictContext } : {}),
|
|
209
|
+
};
|
|
210
|
+
|
|
211
|
+
frameworkLogger.log("aside-context", "aside-complete", "info", {
|
|
212
|
+
asideId,
|
|
213
|
+
duration,
|
|
214
|
+
observationCount: aside.observations.length,
|
|
215
|
+
activeAsideCount: activeAsides.size,
|
|
216
|
+
});
|
|
217
|
+
|
|
218
|
+
return result;
|
|
219
|
+
}
|
|
220
|
+
|
|
221
|
+
export function closeAside(asideId: string): boolean {
|
|
222
|
+
const aside = activeAsides.get(asideId);
|
|
223
|
+
if (!aside) return false;
|
|
224
|
+
activeAsides.delete(asideId);
|
|
225
|
+
frameworkLogger.log("aside-context", "aside-closed", "info", {
|
|
226
|
+
asideId,
|
|
227
|
+
duration: Date.now() - aside.startedAt,
|
|
228
|
+
remainingActive: activeAsides.size,
|
|
229
|
+
});
|
|
230
|
+
return true;
|
|
231
|
+
}
|
|
232
|
+
|
|
233
|
+
export function closeAllAsides(): number {
|
|
234
|
+
const count = activeAsides.size;
|
|
235
|
+
activeAsides.clear();
|
|
236
|
+
frameworkLogger.log("aside-context", "aside-close-all", "info", {
|
|
237
|
+
closedCount: count,
|
|
238
|
+
});
|
|
239
|
+
return count;
|
|
240
|
+
}
|
|
241
|
+
|
|
242
|
+
export function resetAsideContext(): void {
|
|
243
|
+
activeAsides.clear();
|
|
244
|
+
asideCounter = 0;
|
|
245
|
+
}
|
|
@@ -1,11 +1,18 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Agent Capabilities Configuration
|
|
3
|
-
*
|
|
4
|
-
* Centralized agent capability definitions for orchestration decisions
|
|
3
|
+
*
|
|
4
|
+
* Centralized agent capability definitions for orchestration decisions.
|
|
5
|
+
* Enriched at runtime by the active MemoryRoutingProvider (Repertoire, etc.).
|
|
5
6
|
*/
|
|
6
7
|
|
|
7
8
|
import type { AgentCapability } from '../types.js';
|
|
8
9
|
import { AGENT_REGISTRY } from "../../../agents/registry.js";
|
|
10
|
+
import { initializeMemoryRouting } from '../../../memory-routing/index.js';
|
|
11
|
+
import {
|
|
12
|
+
getProvider,
|
|
13
|
+
toMemoryCapabilityMap,
|
|
14
|
+
fromMemoryCapabilityMap,
|
|
15
|
+
} from './memory-routing-bridge.js';
|
|
9
16
|
|
|
10
17
|
const DEFAULT_AGENT_CAPABILITIES: Record<string, AgentCapability> = Object.fromEntries(
|
|
11
18
|
Object.entries(AGENT_REGISTRY).map(([name, entry]) => [
|
|
@@ -18,18 +25,31 @@ const DEFAULT_AGENT_CAPABILITIES: Record<string, AgentCapability> = Object.fromE
|
|
|
18
25
|
]),
|
|
19
26
|
);
|
|
20
27
|
|
|
28
|
+
initializeMemoryRouting();
|
|
29
|
+
|
|
21
30
|
/**
|
|
22
31
|
* Agent Capabilities Manager
|
|
23
32
|
* Manages agent capabilities for orchestration decisions
|
|
24
33
|
*/
|
|
25
34
|
export class AgentCapabilitiesManager {
|
|
26
35
|
private capabilities: Map<string, AgentCapability> = new Map();
|
|
36
|
+
private enriched = false;
|
|
27
37
|
|
|
28
38
|
constructor() {
|
|
29
|
-
// Initialize with default capabilities
|
|
30
39
|
Object.entries(DEFAULT_AGENT_CAPABILITIES).forEach(([agent, config]) => {
|
|
31
40
|
this.capabilities.set(agent, config);
|
|
32
41
|
});
|
|
42
|
+
this.applyMemoryRoutingEnrichment();
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
private applyMemoryRoutingEnrichment(): void {
|
|
46
|
+
const provider = getProvider();
|
|
47
|
+
if (provider.id === 'null') return;
|
|
48
|
+
|
|
49
|
+
const memoryCaps = toMemoryCapabilityMap(this.capabilities);
|
|
50
|
+
const enriched = provider.enhanceAgentCapabilities(memoryCaps);
|
|
51
|
+
this.capabilities = fromMemoryCapabilityMap(enriched);
|
|
52
|
+
this.enriched = true;
|
|
33
53
|
}
|
|
34
54
|
|
|
35
55
|
/**
|
|
@@ -43,6 +63,7 @@ export class AgentCapabilitiesManager {
|
|
|
43
63
|
* Get all registered agent capabilities
|
|
44
64
|
*/
|
|
45
65
|
getAllCapabilities(): Map<string, AgentCapability> {
|
|
66
|
+
if (!this.enriched) this.applyMemoryRoutingEnrichment();
|
|
46
67
|
return new Map(this.capabilities);
|
|
47
68
|
}
|
|
48
69
|
|
|
@@ -54,24 +75,35 @@ export class AgentCapabilitiesManager {
|
|
|
54
75
|
}
|
|
55
76
|
|
|
56
77
|
/**
|
|
57
|
-
* Select the best agent for a task based on complexity and
|
|
78
|
+
* Select the best agent for a task based on complexity, capabilities, and memory routing.
|
|
58
79
|
*/
|
|
59
|
-
selectAgentForTask(
|
|
80
|
+
selectAgentForTask(
|
|
81
|
+
requiredCapabilities: string[],
|
|
82
|
+
complexity: number,
|
|
83
|
+
operationDescription = '',
|
|
84
|
+
): string | null {
|
|
85
|
+
const provider = getProvider();
|
|
86
|
+
|
|
87
|
+
if (provider.id !== 'null' && operationDescription) {
|
|
88
|
+
const memoryCaps = toMemoryCapabilityMap(this.getAllCapabilities());
|
|
89
|
+
return provider.selectAgent(
|
|
90
|
+
memoryCaps,
|
|
91
|
+
requiredCapabilities,
|
|
92
|
+
complexity,
|
|
93
|
+
operationDescription,
|
|
94
|
+
);
|
|
95
|
+
}
|
|
96
|
+
|
|
60
97
|
let bestAgent: string | null = null;
|
|
61
98
|
let bestScore = -1;
|
|
62
99
|
|
|
63
100
|
for (const [agent, caps] of this.capabilities) {
|
|
64
|
-
|
|
65
|
-
if (complexity > caps.complexityThreshold) {
|
|
66
|
-
continue;
|
|
67
|
-
}
|
|
101
|
+
if (complexity > caps.complexityThreshold) continue;
|
|
68
102
|
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
caps.capabilities.includes(cap)
|
|
103
|
+
const matchCount = requiredCapabilities.filter((cap) =>
|
|
104
|
+
caps.capabilities.includes(cap),
|
|
72
105
|
).length;
|
|
73
106
|
|
|
74
|
-
// Prefer agents with more concurrent tasks available
|
|
75
107
|
const score = matchCount * 10 + caps.concurrentTasks;
|
|
76
108
|
|
|
77
109
|
if (score > bestScore) {
|
|
@@ -97,7 +129,6 @@ export class AgentCapabilitiesManager {
|
|
|
97
129
|
}
|
|
98
130
|
}
|
|
99
131
|
|
|
100
|
-
// Singleton instance
|
|
101
132
|
let capabilitiesManagerInstance: AgentCapabilitiesManager | null = null;
|
|
102
133
|
|
|
103
134
|
export function getAgentCapabilitiesManager(): AgentCapabilitiesManager {
|
|
@@ -106,3 +137,7 @@ export function getAgentCapabilitiesManager(): AgentCapabilitiesManager {
|
|
|
106
137
|
}
|
|
107
138
|
return capabilitiesManagerInstance;
|
|
108
139
|
}
|
|
140
|
+
|
|
141
|
+
export function resetAgentCapabilitiesManager(): void {
|
|
142
|
+
capabilitiesManagerInstance = null;
|
|
143
|
+
}
|