0xray 3.1.1 → 3.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.opencode/codex.codex +1 -1
- package/.opencode/commands/auto-format.md +3 -3
- package/.opencode/commands/auto-summary-capture.md +2 -2
- package/.opencode/commands/enforcer-daily-scan.md +3 -3
- package/.opencode/commands/framework-compliance-audit.md +4 -4
- package/.opencode/commands/interactive-validator.md +2 -2
- package/.opencode/commands/job-summary-logger.md +2 -2
- package/.opencode/commands/mode-switch.md +1 -1
- package/.opencode/commands/model-health-check.md +2 -2
- package/.opencode/commands/performance-analysis.md +2 -2
- package/.opencode/commands/pre-commit-introspection.md +3 -3
- package/.opencode/commands/security-scan.md +3 -3
- package/.opencode/commands/sisyphus-validation.md +3 -3
- package/.opencode/commands/summary-logger.md +2 -2
- package/AGENTS.md +3 -13
- package/README.md +3 -3
- package/dist/AGENTS.md +3 -13
- package/dist/CHANGELOG.md +55 -0
- package/dist/README.md +3 -3
- package/dist/analytics/consent-manager.js +0 -1
- package/dist/analytics/emerging-pattern-detector.js +0 -1
- package/dist/analytics/pattern-learning-engine.js +0 -1
- package/dist/analytics/pattern-performance-tracker.js +0 -1
- package/dist/analytics/predictive-analytics.js +0 -1
- package/dist/analytics/prompt-pattern-analyzer.js +0 -1
- package/dist/analytics/routing-performance-analyzer.js +0 -1
- package/dist/analytics/routing-refiner.js +0 -1
- package/dist/analytics/simple-pattern-analyzer.js +0 -1
- package/dist/cli/commands/archive-logs.js +0 -1
- package/dist/cli/commands/opencode-install.js +13 -0
- package/dist/cli/commands/plugin-commands.js +0 -1
- package/dist/cli/commands/status.js +11 -13
- package/dist/cli/index.js +2 -7
- package/dist/core/activity-logger.js +0 -1
- package/dist/core/adaptive-kernel.js +0 -1
- package/dist/core/boot-orchestrator.js +2 -12
- package/dist/core/bridge.mjs +0 -1
- package/dist/core/codex-formatter.js +0 -1
- package/dist/core/codex-injector.js +0 -1
- package/dist/core/config-loader.js +36 -28
- package/dist/core/context-loader.js +0 -1
- package/dist/core/context-validator.js +0 -1
- package/dist/core/features-config.js +40 -1
- package/dist/core/kernel-patterns.js +0 -1
- package/dist/core/model-router.js +23 -64
- package/dist/core/system-prompt-generator.js +0 -1
- package/dist/delegation/agent-delegator.js +0 -1
- package/dist/delegation/agent-expertise.js +0 -1
- package/dist/delegation/analytics/index.js +0 -1
- package/dist/delegation/analytics/learning-engine.js +0 -1
- package/dist/delegation/analytics/outcome-tracker.js +0 -1
- package/dist/delegation/analytics/routing-analytics.js +0 -1
- package/dist/delegation/ast-code-parser.js +0 -1
- package/dist/delegation/complexity-analyzer.js +0 -1
- package/dist/delegation/dependency-graph-builder.js +0 -1
- package/dist/delegation/index.js +0 -1
- package/dist/delegation/metrics-aggregator.js +0 -1
- package/dist/delegation/session-coordinator.js +0 -1
- package/dist/delegation/strategy-selector.js +0 -1
- package/dist/delegation/voting-coordinator.js +0 -1
- package/dist/delegation/voting-types.js +0 -1
- package/dist/delegation/weighted-voting-aggregator.js +0 -1
- package/dist/enforcement/core/index.js +0 -1
- package/dist/enforcement/core/rule-executor.js +0 -1
- package/dist/enforcement/core/rule-hierarchy.js +0 -1
- package/dist/enforcement/core/rule-registry.js +0 -1
- package/dist/enforcement/core/violation-fixer.js +0 -1
- package/dist/enforcement/index.js +0 -1
- package/dist/enforcement/loaders/agent-triage-loader.js +0 -1
- package/dist/enforcement/loaders/agents-md-validation-loader.js +0 -1
- package/dist/enforcement/loaders/base-loader.js +0 -1
- package/dist/enforcement/loaders/codex-loader.js +0 -1
- package/dist/enforcement/loaders/index.js +0 -1
- package/dist/enforcement/loaders/loader-orchestrator.js +0 -1
- package/dist/enforcement/loaders/processor-loader.js +0 -1
- package/dist/enforcement/types.js +0 -1
- package/dist/enforcement/validators/architecture-validators.js +0 -1
- package/dist/enforcement/validators/base-validator.js +0 -1
- package/dist/enforcement/validators/code-quality-validators.js +0 -1
- package/dist/enforcement/validators/index.js +0 -1
- package/dist/enforcement/validators/security-validators.js +0 -1
- package/dist/enforcement/validators/testing-validators.js +0 -1
- package/dist/enforcement/validators/validator-registry.js +0 -1
- package/dist/governance/codex-policy.service.js +0 -1
- package/dist/inference/inference-agent-invoker.js +67 -0
- package/dist/inference/inference-applier.js +178 -0
- package/dist/inference/inference-cycle.js +51 -827
- package/dist/inference/inference-proposal-generator.js +149 -0
- package/dist/infrastructure/iac-validator.js +465 -0
- package/dist/infrastructure/schemas/cloud-schemas.js +488 -0
- package/dist/integrations/base/ExampleIntegration.js +0 -1
- package/dist/integrations/base/Integration.js +0 -1
- package/dist/integrations/base/index.js +0 -1
- package/dist/integrations/base/registry.js +0 -1
- package/dist/integrations/base/types.js +0 -1
- package/dist/integrations/enforcement-gate.js +3 -3
- package/dist/integrations/governance/governance-client.js +0 -1
- package/dist/integrations/governance/index.js +11 -19
- package/dist/integrations/governance/types.js +0 -1
- package/dist/integrations/hermes-agent/__init__.py +4 -0
- package/dist/integrations/hermes-agent/bridge.mjs +37 -0
- package/dist/integrations/openclaw/api-server.js +0 -1
- package/dist/integrations/openclaw/client.js +0 -1
- package/dist/integrations/openclaw/config.js +0 -1
- package/dist/integrations/openclaw/hooks/xray-hooks.js +0 -1
- package/dist/integrations/openclaw/index.js +0 -1
- package/dist/integrations/openclaw/types.js +0 -1
- package/dist/integrations/plugins/index.js +0 -1
- package/dist/integrations/plugins/plugin-integration.js +0 -1
- package/dist/integrations/plugins/plugin-registry.js +0 -1
- package/dist/mcps/agent-resolver.js +0 -1
- package/dist/mcps/architect-tools.server.js +119 -185
- package/dist/mcps/auto-format.server.js +56 -74
- package/dist/mcps/boot-orchestrator.server.js +67 -85
- package/dist/mcps/config/config-loader.js +6 -0
- package/dist/mcps/config/plugin-server-registry.js +0 -1
- package/dist/mcps/enforcer-tools.server.js +207 -273
- package/dist/mcps/estimation.server.js +63 -107
- package/dist/mcps/framework-compliance-audit.server.js +52 -81
- package/dist/mcps/framework-help.server.js +71 -89
- package/dist/mcps/governance.server.js +97 -149
- package/dist/mcps/knowledge-skills/api-design.server.js +33 -65
- package/dist/mcps/knowledge-skills/architecture-patterns.server.js +33 -65
- package/dist/mcps/knowledge-skills/bug-triage-specialist.server.js +123 -163
- package/dist/mcps/knowledge-skills/code-analyzer.server.js +210 -237
- package/dist/mcps/knowledge-skills/code-review.server.js +108 -142
- package/dist/mcps/knowledge-skills/content-creator.server.js +203 -225
- package/dist/mcps/knowledge-skills/database-design.server.js +116 -150
- package/dist/mcps/knowledge-skills/devops-deployment.server.js +123 -157
- package/dist/mcps/knowledge-skills/git-workflow.server.js +34 -67
- package/dist/mcps/knowledge-skills/growth-strategist.server.js +301 -323
- package/dist/mcps/knowledge-skills/log-monitor.server.js +139 -159
- package/dist/mcps/knowledge-skills/mobile-development.server.js +170 -200
- package/dist/mcps/knowledge-skills/multimodal-looker.server.js +122 -158
- package/dist/mcps/knowledge-skills/performance-optimization.server.js +88 -138
- package/dist/mcps/knowledge-skills/project-analysis.server.js +131 -218
- package/dist/mcps/knowledge-skills/refactoring-strategies.server.js +115 -150
- package/dist/mcps/knowledge-skills/security-audit.server.js +16 -143
- package/dist/mcps/knowledge-skills/seo-consultant.server.js +20 -213
- package/dist/mcps/knowledge-skills/session-management.server.js +13 -90
- package/dist/mcps/knowledge-skills/skill-invocation.server.js +43 -421
- package/dist/mcps/knowledge-skills/strategist.server.js +10 -55
- package/dist/mcps/knowledge-skills/tech-writer.server.js +16 -191
- package/dist/mcps/knowledge-skills/testing-best-practices.server.js +18 -191
- package/dist/mcps/knowledge-skills/testing-strategy.server.js +18 -156
- package/dist/mcps/knowledge-skills/ui-ux-design.server.js +22 -296
- package/dist/mcps/lint.server.js +50 -91
- package/dist/mcps/model-health-check.server.js +32 -60
- package/dist/mcps/orchestrator/aside-context.js +207 -0
- package/dist/mcps/orchestrator/config/agent-capabilities.js +30 -11
- package/dist/mcps/orchestrator/config/memory-routing-bridge.js +70 -0
- package/dist/mcps/orchestrator/execution/execution-planner.js +25 -7
- package/dist/mcps/orchestrator/handlers/complexity-handler.js +5 -1
- package/dist/mcps/orchestrator/handlers/status-handler.js +8 -1
- package/dist/mcps/orchestrator/handlers/task-handler.js +59 -1
- package/dist/mcps/orchestrator/index.js +5 -0
- package/dist/mcps/orchestrator/server.js +63 -8
- package/dist/mcps/performance-analysis.server.js +56 -87
- package/dist/mcps/processor-pipeline.server.js +68 -99
- package/dist/mcps/researcher.server.js +80 -153
- package/dist/mcps/security-scan.server.js +56 -70
- package/dist/mcps/shared/knowledge-skill-base.js +11 -4
- package/dist/mcps/state-manager.server.js +124 -152
- package/dist/memory-routing/index.js +4 -0
- package/dist/memory-routing/null-provider.js +51 -0
- package/dist/memory-routing/provider-loader.js +91 -0
- package/dist/memory-routing/provider-registry.js +40 -0
- package/dist/memory-routing/types.js +7 -0
- package/dist/memory-routing/validate-config.js +32 -0
- package/dist/monitoring/nudge-watchdog.js +0 -1
- package/dist/nucleus/default-plugins.js +13 -19
- package/dist/nucleus/index.js +0 -1
- package/dist/nucleus/thin-dispatch.js +29 -1
- package/dist/orchestrator/agent-spawn-governor.js +0 -1
- package/dist/orchestrator/intelligent-commit-batcher.js +2 -10
- package/dist/orchestrator/multi-agent-orchestration-coordinator.js +0 -1
- package/dist/orchestrator/orchestrator.js +8 -18
- package/dist/orchestrator/self-direction-activation.js +0 -1
- package/dist/orchestrator/universal-registry-bridge.js +0 -1
- package/dist/performance/performance-budget-enforcer.js +0 -1
- package/dist/performance/performance-regression-tester.js +0 -1
- package/dist/plugin/plugin-codex-context.js +87 -0
- package/dist/plugin/plugin-helpers.js +155 -0
- package/dist/plugin/plugin-logger.js +46 -0
- package/dist/plugin/plugin-modules.js +144 -0
- package/dist/plugin/plugin-quality-gate.js +88 -0
- package/dist/plugin/plugin-types.js +1 -0
- package/dist/plugin/xray-codex-injection.js +338 -0
- package/dist/postprocessor/PostProcessor.js +3 -9
- package/dist/postprocessor/analysis/CodeChangeAnalyzer.js +50 -0
- package/dist/postprocessor/config/ProcessorConfigLoader.js +16 -0
- package/dist/postprocessor/integration.js +194 -0
- package/dist/postprocessor/metamorphosis/SelfProposalEngine.js +472 -0
- package/dist/postprocessor/metamorphosis/index.js +1 -0
- package/dist/postprocessor/redeploy/RetryHandler.js +118 -0
- package/dist/postprocessor/services/RegressionAnalysisService.js +0 -1
- package/dist/postprocessor/triggers/APITrigger.js +0 -1
- package/dist/postprocessor/triggers/WebhookTrigger.js +0 -1
- package/dist/processors/implementations/agents-md-validation-processor.js +0 -1
- package/dist/processors/implementations/async-pattern-processor.js +0 -1
- package/dist/processors/implementations/console-log-guard-processor.js +0 -1
- package/dist/processors/implementations/coverage-analysis-processor.js +0 -1
- package/dist/processors/implementations/inference-improvement-processor.js +2 -9
- package/dist/processors/implementations/log-protection-processor.js +0 -1
- package/dist/processors/implementations/nudge-processor.js +0 -1
- package/dist/processors/implementations/performance-budget-processor.js +0 -1
- package/dist/processors/implementations/postprocessor-chain-validator.js +0 -1
- package/dist/processors/implementations/publish-preflight-processor.js +4 -12
- package/dist/processors/implementations/session-summary-processor.js +8 -16
- package/dist/processors/implementations/spawn-governance-processor.js +0 -1
- package/dist/processors/implementations/storytelling-trigger-processor.js +3 -28
- package/dist/processors/implementations/test-auto-creation-processor.js +0 -1
- package/dist/processors/implementations/typescript-compilation-processor.js +0 -1
- package/dist/processors/implementations/version-compliance-processor.js +0 -1
- package/dist/processors/processor-interfaces.js +0 -1
- package/dist/processors/processor-types.js +0 -1
- package/dist/scripts/integration.js +0 -1
- package/dist/security/comprehensive-security-audit.js +0 -1
- package/dist/security/security-agent-coordinator.js +0 -1
- package/dist/security/security-auditor.js +0 -1
- package/dist/security/security-hardener.js +0 -1
- package/dist/security/security-hardening-system.js +0 -1
- package/dist/security/security-headers.js +0 -1
- package/dist/security/security-orchestration-layer.js +0 -1
- package/dist/services/inference-tuner.js +0 -1
- package/dist/session/session-cleanup-manager.js +0 -1
- package/dist/session/session-monitor.js +0 -1
- package/dist/session/session-state-manager.js +0 -1
- package/dist/skills/xray-orchestrator/index.js +0 -1
- package/dist/utils/codex-parser.js +0 -1
- package/dist/utils/language-detector.js +0 -1
- package/dist/utils/shutdown-handler.js +0 -1
- package/dist/validation/agent-config-validator.js +280 -0
- package/dist/validation/orchestration-flow-validator.js +606 -0
- package/package.json +1 -1
- package/scripts/node/release.mjs +2 -2
- package/scripts/node/setup.cjs +28 -0
- package/scripts/node/universal-version-manager.js +1 -1
- package/src/mcps/agent-resolver.ts +0 -1
- package/src/mcps/architect-tools.server.ts +129 -211
- package/src/mcps/auto-format.server.ts +74 -103
- package/src/mcps/boot-orchestrator.server.ts +71 -96
- package/src/mcps/config/__tests__/config-loader.test.ts +6 -6
- package/src/mcps/config/config-loader.ts +7 -0
- package/src/mcps/config/plugin-server-registry.ts +0 -1
- package/src/mcps/enforcer-tools.server.ts +217 -294
- package/src/mcps/estimation.server.ts +62 -122
- package/src/mcps/framework-compliance-audit.server.ts +53 -95
- package/src/mcps/framework-help.server.ts +74 -96
- package/src/mcps/governance.server.ts +97 -162
- package/src/mcps/knowledge-skills/api-design.server.ts +33 -72
- package/src/mcps/knowledge-skills/architecture-patterns.server.ts +33 -72
- package/src/mcps/knowledge-skills/bug-triage-specialist.server.ts +148 -193
- package/src/mcps/knowledge-skills/code-analyzer.server.ts +222 -254
- package/src/mcps/knowledge-skills/code-review.server.ts +115 -157
- package/src/mcps/knowledge-skills/content-creator.server.ts +219 -246
- package/src/mcps/knowledge-skills/database-design.server.ts +119 -160
- package/src/mcps/knowledge-skills/devops-deployment.server.ts +126 -167
- package/src/mcps/knowledge-skills/git-workflow.server.ts +32 -77
- package/src/mcps/knowledge-skills/growth-strategist.server.ts +322 -360
- package/src/mcps/knowledge-skills/log-monitor.server.ts +68 -95
- package/src/mcps/knowledge-skills/mobile-development.server.ts +16 -56
- package/src/mcps/knowledge-skills/multimodal-looker.server.ts +13 -59
- package/src/mcps/knowledge-skills/performance-optimization.server.ts +13 -74
- package/src/mcps/knowledge-skills/project-analysis.server.ts +13 -120
- package/src/mcps/knowledge-skills/refactoring-strategies.server.ts +13 -60
- package/src/mcps/knowledge-skills/security-audit.server.ts +19 -157
- package/src/mcps/knowledge-skills/seo-consultant.server.ts +23 -227
- package/src/mcps/knowledge-skills/session-management.server.ts +17 -106
- package/src/mcps/knowledge-skills/skill-invocation.server.ts +45 -446
- package/src/mcps/knowledge-skills/strategist.server.ts +13 -63
- package/src/mcps/knowledge-skills/tech-writer.server.ts +19 -204
- package/src/mcps/knowledge-skills/testing-best-practices.server.ts +21 -204
- package/src/mcps/knowledge-skills/testing-strategy.server.ts +21 -165
- package/src/mcps/knowledge-skills/ui-ux-design.server.ts +25 -342
- package/src/mcps/lint.server.ts +52 -105
- package/src/mcps/model-health-check.server.ts +34 -70
- package/src/mcps/orchestrator/aside-context.ts +245 -0
- package/src/mcps/orchestrator/config/agent-capabilities.ts +49 -14
- package/src/mcps/orchestrator/config/memory-routing-bridge.ts +80 -0
- package/src/mcps/orchestrator/execution/execution-planner.ts +36 -9
- package/src/mcps/orchestrator/handlers/complexity-handler.ts +9 -3
- package/src/mcps/orchestrator/handlers/status-handler.ts +11 -1
- package/src/mcps/orchestrator/handlers/task-handler.ts +78 -2
- package/src/mcps/orchestrator/index.ts +29 -0
- package/src/mcps/orchestrator/server.ts +79 -24
- package/src/mcps/orchestrator/types.ts +50 -0
- package/src/mcps/performance-analysis.server.ts +59 -102
- package/src/mcps/processor-pipeline.server.ts +70 -108
- package/src/mcps/researcher.server.ts +87 -175
- package/src/mcps/security-scan.server.ts +57 -76
- package/src/mcps/shared/knowledge-skill-base.ts +12 -4
- package/src/mcps/state-manager.server.ts +129 -169
- package/src/opencode/codex.codex +1 -1
- package/src/opencode/commands/auto-format.md +3 -3
- package/src/opencode/commands/auto-summary-capture.md +2 -2
- package/src/opencode/commands/enforcer-daily-scan.md +3 -3
- package/src/opencode/commands/framework-compliance-audit.md +4 -4
- package/src/opencode/commands/interactive-validator.md +2 -2
- package/src/opencode/commands/job-summary-logger.md +2 -2
- package/src/opencode/commands/mode-switch.md +1 -1
- package/src/opencode/commands/model-health-check.md +2 -2
- package/src/opencode/commands/performance-analysis.md +2 -2
- package/src/opencode/commands/pre-commit-introspection.md +3 -3
- package/src/opencode/commands/security-scan.md +3 -3
- package/src/opencode/commands/sisyphus-validation.md +3 -3
- package/src/opencode/commands/summary-logger.md +2 -2
- package/src/skills/xray-orchestrator/index.ts +0 -1
- package/dist/nucleus/orchestrator.js +0 -479
|
@@ -5,9 +5,7 @@ import { XrayContextLoader } from "./context-loader.js";
|
|
|
5
5
|
import { XrayStateManager } from "../state/state-manager.js";
|
|
6
6
|
import { ProcessorManager } from "../processors/processor-manager.js";
|
|
7
7
|
import { pathResolver } from "../utils/path-resolver.js";
|
|
8
|
-
import * as fs from "fs";
|
|
9
8
|
import * as path from "path";
|
|
10
|
-
const { existsSync, readFileSync } = fs;
|
|
11
9
|
// Path configuration - can be overridden by environment or use path resolver
|
|
12
10
|
const AGENTS_BASE_PATH = process.env.XRAY_AGENTS_PATH || process.env.XRAY_AGENTS_PATH || "../agents";
|
|
13
11
|
import { createAgentDelegator, createSessionCoordinator, } from "../delegation/index.js";
|
|
@@ -130,18 +128,10 @@ export class BootOrchestrator {
|
|
|
130
128
|
}
|
|
131
129
|
loadProcessorsConfig() {
|
|
132
130
|
try {
|
|
133
|
-
|
|
134
|
-
path.join(process.cwd(), ".xray", "features.json"),
|
|
135
|
-
];
|
|
136
|
-
for (const configPath of configPaths) {
|
|
137
|
-
if (existsSync(configPath)) {
|
|
138
|
-
const config = JSON.parse(readFileSync(configPath, "utf-8"));
|
|
139
|
-
return config.processors || null;
|
|
140
|
-
}
|
|
141
|
-
}
|
|
131
|
+
return featuresConfigLoader.loadConfig().processors ?? null;
|
|
142
132
|
}
|
|
143
133
|
catch {
|
|
144
|
-
//
|
|
134
|
+
// use defaults
|
|
145
135
|
}
|
|
146
136
|
return null;
|
|
147
137
|
}
|
package/dist/core/bridge.mjs
CHANGED
|
@@ -1,53 +1,57 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* Configuration Loader
|
|
2
|
+
* Configuration Loader (backward-compat shim)
|
|
3
3
|
*
|
|
4
|
-
*
|
|
4
|
+
* Delegates to FeaturesConfigLoader as the single source of truth.
|
|
5
|
+
* Retained for backward compatibility -- all consumers of xrayConfigLoader
|
|
6
|
+
* continue to work without changes.
|
|
5
7
|
*
|
|
6
|
-
* @
|
|
7
|
-
*
|
|
8
|
+
* @deprecated Use featuresConfigLoader from "./features-config.js" instead.
|
|
9
|
+
* Will be removed in v4.0.0.
|
|
8
10
|
*/
|
|
11
|
+
import { featuresConfigLoader } from "./features-config.js";
|
|
12
|
+
import { frameworkLogger } from "./framework-logger.js";
|
|
13
|
+
import { resolveConfigPath } from "./config-paths.js";
|
|
9
14
|
import * as fs from "fs";
|
|
10
15
|
import * as path from "path";
|
|
11
|
-
import { frameworkLogger } from "./framework-logger.js";
|
|
12
|
-
import { getConfigDir, resolveConfigPath } from "./config-paths.js";
|
|
13
16
|
export class XrayConfigLoader {
|
|
14
17
|
configPath;
|
|
15
18
|
cachedConfig = null;
|
|
16
|
-
cacheExpiry = 30000;
|
|
19
|
+
cacheExpiry = 30000;
|
|
17
20
|
lastLoadTime = 0;
|
|
18
21
|
constructor(configPath) {
|
|
19
|
-
this.configPath = configPath || resolveConfigPath("config.json") || path.join(
|
|
22
|
+
this.configPath = configPath || resolveConfigPath("config.json") || path.join(process.cwd(), ".xray", "config.json");
|
|
20
23
|
}
|
|
21
24
|
/**
|
|
22
|
-
* Load
|
|
25
|
+
* Load configuration -- delegates to FeaturesConfigLoader
|
|
26
|
+
* @deprecated Use featuresConfigLoader.getXrayConfig() instead.
|
|
23
27
|
*/
|
|
24
28
|
loadConfig() {
|
|
25
29
|
const now = Date.now();
|
|
26
|
-
// Return cached config if still valid
|
|
27
30
|
if (this.cachedConfig && now - this.lastLoadTime < this.cacheExpiry) {
|
|
28
31
|
return this.cachedConfig;
|
|
29
32
|
}
|
|
33
|
+
const primary = featuresConfigLoader.getXrayConfig();
|
|
30
34
|
try {
|
|
31
35
|
const configPath = path.resolve(process.cwd(), this.configPath);
|
|
32
|
-
if (
|
|
33
|
-
|
|
36
|
+
if (fs.existsSync(configPath)) {
|
|
37
|
+
const configData = JSON.parse(fs.readFileSync(configPath, "utf-8"));
|
|
38
|
+
if (configData.multi_agent_orchestration || configData.autonomous_reporting || configData.disabled_agents) {
|
|
39
|
+
frameworkLogger.log("config-loader", "deprecated-config-json", "warning", { message: "config.json contains overlapping keys. Migrate to features.json. See: https://0xray.ai/docs/config-migration" });
|
|
40
|
+
}
|
|
34
41
|
}
|
|
35
|
-
const configData = JSON.parse(fs.readFileSync(configPath, "utf-8"));
|
|
36
|
-
const config = this.parseConfig(configData);
|
|
37
|
-
this.cachedConfig = config;
|
|
38
|
-
this.lastLoadTime = now;
|
|
39
|
-
return config;
|
|
40
42
|
}
|
|
41
|
-
catch
|
|
42
|
-
|
|
43
|
-
return this.getDefaultConfig();
|
|
43
|
+
catch {
|
|
44
|
+
// config.json may not exist -- that's fine, features.json is SSOT
|
|
44
45
|
}
|
|
46
|
+
this.cachedConfig = primary;
|
|
47
|
+
this.lastLoadTime = now;
|
|
48
|
+
return primary;
|
|
45
49
|
}
|
|
46
50
|
/**
|
|
47
51
|
* Parse configuration data with validation
|
|
52
|
+
* @deprecated Use featuresConfigLoader.loadConfig() instead.
|
|
48
53
|
*/
|
|
49
54
|
parseConfig(configData) {
|
|
50
|
-
// Handle null/undefined config data
|
|
51
55
|
if (!configData || typeof configData !== 'object') {
|
|
52
56
|
return this.getDefaultConfig();
|
|
53
57
|
}
|
|
@@ -62,6 +66,7 @@ export class XrayConfigLoader {
|
|
|
62
66
|
}
|
|
63
67
|
/**
|
|
64
68
|
* Parse multi-agent orchestration configuration
|
|
69
|
+
* @deprecated Use featuresConfigLoader.loadConfig().multi_agent_orchestration instead.
|
|
65
70
|
*/
|
|
66
71
|
parseMultiAgentConfig(config) {
|
|
67
72
|
if (!config || typeof config !== 'object') {
|
|
@@ -80,6 +85,7 @@ export class XrayConfigLoader {
|
|
|
80
85
|
}
|
|
81
86
|
/**
|
|
82
87
|
* Parse autonomous reporting configuration
|
|
88
|
+
* @deprecated Use featuresConfigLoader.loadConfig().autonomous_reporting instead.
|
|
83
89
|
*/
|
|
84
90
|
parseAutonomousReportingConfig(config) {
|
|
85
91
|
if (!config || typeof config !== 'object') {
|
|
@@ -87,9 +93,9 @@ export class XrayConfigLoader {
|
|
|
87
93
|
}
|
|
88
94
|
const cfg = config;
|
|
89
95
|
return {
|
|
90
|
-
enabled: typeof cfg.enabled === 'boolean' ? cfg.enabled :
|
|
91
|
-
interval_minutes: Math.max(5, Math.min(1440, typeof cfg.interval_minutes === 'number' ? cfg.interval_minutes : 60)),
|
|
92
|
-
auto_schedule: typeof cfg.auto_schedule === 'boolean' ? cfg.auto_schedule :
|
|
96
|
+
enabled: typeof cfg.enabled === 'boolean' ? cfg.enabled : true,
|
|
97
|
+
interval_minutes: Math.max(5, Math.min(1440, typeof cfg.interval_minutes === 'number' ? cfg.interval_minutes : 60)),
|
|
98
|
+
auto_schedule: typeof cfg.auto_schedule === 'boolean' ? cfg.auto_schedule : true,
|
|
93
99
|
include_health_assessment: typeof cfg.include_health_assessment === 'boolean' ? cfg.include_health_assessment : true,
|
|
94
100
|
include_agent_activities: typeof cfg.include_agent_activities === 'boolean' ? cfg.include_agent_activities : true,
|
|
95
101
|
include_pipeline_operations: typeof cfg.include_pipeline_operations === 'boolean' ? cfg.include_pipeline_operations : true,
|
|
@@ -103,6 +109,7 @@ export class XrayConfigLoader {
|
|
|
103
109
|
}
|
|
104
110
|
/**
|
|
105
111
|
* Get default configuration
|
|
112
|
+
* @deprecated Use featuresConfigLoader.getDefaultConfig() instead.
|
|
106
113
|
*/
|
|
107
114
|
getDefaultConfig() {
|
|
108
115
|
return {
|
|
@@ -116,9 +123,9 @@ export class XrayConfigLoader {
|
|
|
116
123
|
session_persistence: true,
|
|
117
124
|
},
|
|
118
125
|
autonomous_reporting: {
|
|
119
|
-
enabled:
|
|
126
|
+
enabled: true,
|
|
120
127
|
interval_minutes: 60,
|
|
121
|
-
auto_schedule:
|
|
128
|
+
auto_schedule: true,
|
|
122
129
|
include_health_assessment: true,
|
|
123
130
|
include_agent_activities: true,
|
|
124
131
|
include_pipeline_operations: true,
|
|
@@ -132,18 +139,19 @@ export class XrayConfigLoader {
|
|
|
132
139
|
}
|
|
133
140
|
/**
|
|
134
141
|
* Validate enum values
|
|
142
|
+
* @deprecated Internal implementation detail.
|
|
135
143
|
*/
|
|
136
144
|
validateEnum(value, allowedValues, defaultValue) {
|
|
137
145
|
return allowedValues.includes(value) ? value : defaultValue;
|
|
138
146
|
}
|
|
139
147
|
/**
|
|
140
148
|
* Clear configuration cache
|
|
149
|
+
* @deprecated Use featuresConfigLoader.clearCache() instead.
|
|
141
150
|
*/
|
|
142
151
|
clearCache() {
|
|
143
152
|
this.cachedConfig = null;
|
|
144
153
|
this.lastLoadTime = 0;
|
|
154
|
+
featuresConfigLoader.clearCache();
|
|
145
155
|
}
|
|
146
156
|
}
|
|
147
|
-
// Export singleton instance
|
|
148
157
|
export const xrayConfigLoader = new XrayConfigLoader();
|
|
149
|
-
// Backward compat aliases
|
|
@@ -4,7 +4,6 @@
|
|
|
4
4
|
* Loads and validates the unified features configuration from features.json
|
|
5
5
|
* Supports token optimization, model routing, batch operations, and more.
|
|
6
6
|
*
|
|
7
|
-
* @version 1.0.0
|
|
8
7
|
* @since 2026-01-25
|
|
9
8
|
*/
|
|
10
9
|
import * as fs from "fs";
|
|
@@ -446,6 +445,46 @@ export class FeaturesConfigLoader {
|
|
|
446
445
|
});
|
|
447
446
|
}
|
|
448
447
|
}
|
|
448
|
+
/**
|
|
449
|
+
* Get XrayConfig-shaped slice for backward compatibility
|
|
450
|
+
* @deprecated Use individual getters or loadConfig() directly instead.
|
|
451
|
+
*/
|
|
452
|
+
getXrayConfig() {
|
|
453
|
+
const config = this.loadConfig();
|
|
454
|
+
return {
|
|
455
|
+
multi_agent_orchestration: config.multi_agent_orchestration,
|
|
456
|
+
autonomous_reporting: config.autonomous_reporting,
|
|
457
|
+
disabled_agents: config.agent_management?.disabled_agents ?? [],
|
|
458
|
+
};
|
|
459
|
+
}
|
|
460
|
+
getTokenManagement() {
|
|
461
|
+
return this.loadConfig().token_optimization;
|
|
462
|
+
}
|
|
463
|
+
getProcessors() {
|
|
464
|
+
return this.loadConfig().processors;
|
|
465
|
+
}
|
|
466
|
+
getCommitCycle() {
|
|
467
|
+
return this.loadConfig().commit_cycle;
|
|
468
|
+
}
|
|
469
|
+
getStorytelling() {
|
|
470
|
+
return this.loadConfig().storytelling;
|
|
471
|
+
}
|
|
472
|
+
getInference() {
|
|
473
|
+
return this.loadConfig().inference;
|
|
474
|
+
}
|
|
475
|
+
getMemoryRouting() {
|
|
476
|
+
return this.loadConfig().memory_routing;
|
|
477
|
+
}
|
|
478
|
+
getPublish() {
|
|
479
|
+
return this.loadConfig().publish;
|
|
480
|
+
}
|
|
481
|
+
getAutoReporting() {
|
|
482
|
+
return this.loadConfig().autonomous_reporting;
|
|
483
|
+
}
|
|
484
|
+
getGovernance() {
|
|
485
|
+
const config = this.loadConfig();
|
|
486
|
+
return config.inference;
|
|
487
|
+
}
|
|
449
488
|
}
|
|
450
489
|
// Export singleton instance
|
|
451
490
|
export const featuresConfigLoader = new FeaturesConfigLoader();
|
|
@@ -2,48 +2,24 @@
|
|
|
2
2
|
* Model Router
|
|
3
3
|
*
|
|
4
4
|
* Intelligent model routing based on task complexity and type.
|
|
5
|
-
*
|
|
5
|
+
* Uses featuresConfigLoader as the single source of truth for all model config.
|
|
6
6
|
*
|
|
7
|
-
* @version 2.0.0
|
|
8
7
|
* @since 2026-01-25
|
|
9
8
|
*/
|
|
10
|
-
import * as fs from "fs";
|
|
11
|
-
import * as path from "path";
|
|
12
9
|
import { featuresConfigLoader, detectTaskType, } from "./features-config.js";
|
|
13
10
|
// ============================================================================
|
|
14
11
|
// Model Router Class
|
|
15
12
|
// ============================================================================
|
|
16
13
|
class ModelRouter {
|
|
17
|
-
configPath;
|
|
18
|
-
config;
|
|
19
14
|
availableModels;
|
|
20
|
-
constructor(
|
|
21
|
-
this.configPath =
|
|
22
|
-
configPath || path.resolve(process.cwd(), "opencode.json");
|
|
23
|
-
this.config = this.loadConfig();
|
|
15
|
+
constructor() {
|
|
24
16
|
this.availableModels = this.discoverModels();
|
|
25
17
|
}
|
|
26
|
-
loadConfig() {
|
|
27
|
-
try {
|
|
28
|
-
const configData = fs.readFileSync(this.configPath, "utf8");
|
|
29
|
-
return JSON.parse(configData);
|
|
30
|
-
}
|
|
31
|
-
catch (error) {
|
|
32
|
-
// Provide defaults if config not found
|
|
33
|
-
return {
|
|
34
|
-
model_routing: {},
|
|
35
|
-
model_default: "claude-sonnet-4",
|
|
36
|
-
model_fallback: "claude-haiku-4",
|
|
37
|
-
};
|
|
38
|
-
}
|
|
39
|
-
}
|
|
40
18
|
discoverModels() {
|
|
41
19
|
const defaultModels = [
|
|
42
|
-
// Anthropic Claude models (preferred for 0xRay)
|
|
43
20
|
"claude-opus-4",
|
|
44
21
|
"claude-sonnet-4",
|
|
45
22
|
"claude-haiku-4",
|
|
46
|
-
// Other supported models
|
|
47
23
|
"openai/gpt-4o",
|
|
48
24
|
"openai/gpt-4o-mini",
|
|
49
25
|
"google/gemini-pro-1.5",
|
|
@@ -51,7 +27,15 @@ class ModelRouter {
|
|
|
51
27
|
"meta/llama-3.1-70b-instruct",
|
|
52
28
|
"mistral/mistral-7b-instruct",
|
|
53
29
|
];
|
|
54
|
-
const
|
|
30
|
+
const featuresConfig = featuresConfigLoader.loadConfig();
|
|
31
|
+
const configModels = [];
|
|
32
|
+
if (featuresConfig.model_routing?.task_routing) {
|
|
33
|
+
for (const route of Object.values(featuresConfig.model_routing.task_routing)) {
|
|
34
|
+
if (route?.model && !configModels.includes(route.model)) {
|
|
35
|
+
configModels.push(route.model);
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
}
|
|
55
39
|
const uniqueModels = new Set([...defaultModels, ...configModels]);
|
|
56
40
|
return Array.from(uniqueModels);
|
|
57
41
|
}
|
|
@@ -82,44 +66,28 @@ class ModelRouter {
|
|
|
82
66
|
return this.getValidatedModel();
|
|
83
67
|
}
|
|
84
68
|
/**
|
|
85
|
-
* Get validated model for agent type
|
|
69
|
+
* Get validated model for agent type
|
|
86
70
|
*/
|
|
87
71
|
getValidatedModel(agentType) {
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
if (userModel && this.isModelAvailable(userModel)) {
|
|
91
|
-
return userModel;
|
|
92
|
-
}
|
|
93
|
-
// 2. Check features config for agent-specific model
|
|
72
|
+
const featuresConfig = featuresConfigLoader.loadConfig();
|
|
73
|
+
// 1. Check features config for agent-specific model
|
|
94
74
|
if (agentType) {
|
|
95
|
-
const
|
|
96
|
-
const agentModel = featuresConfig.agent_management.agent_models[agentType];
|
|
75
|
+
const agentModel = featuresConfig.agent_management?.agent_models?.[agentType];
|
|
97
76
|
if (agentModel && this.isModelAvailable(agentModel)) {
|
|
98
77
|
return agentModel;
|
|
99
78
|
}
|
|
100
|
-
// Fall back to opencode.json model routing
|
|
101
|
-
if (this.config.model_routing?.[agentType]) {
|
|
102
|
-
const configModel = this.config.model_routing[agentType];
|
|
103
|
-
if (this.isModelAvailable(configModel)) {
|
|
104
|
-
return configModel;
|
|
105
|
-
}
|
|
106
|
-
}
|
|
107
79
|
}
|
|
108
|
-
//
|
|
109
|
-
const featuresConfig = featuresConfigLoader.loadConfig();
|
|
80
|
+
// 2. Framework default from features config
|
|
110
81
|
const defaultModel = featuresConfig.model_routing?.default_model;
|
|
111
82
|
if (defaultModel && this.isModelAvailable(defaultModel)) {
|
|
112
83
|
return defaultModel;
|
|
113
84
|
}
|
|
114
|
-
//
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
return legacyDefault;
|
|
85
|
+
// 3. Hardcoded default
|
|
86
|
+
if (this.isModelAvailable("claude-sonnet-4")) {
|
|
87
|
+
return "claude-sonnet-4";
|
|
118
88
|
}
|
|
119
|
-
//
|
|
120
|
-
const fallbackModel = featuresConfig.model_routing?.fallback_model ||
|
|
121
|
-
this.config.model_fallback ||
|
|
122
|
-
"claude-haiku-4";
|
|
89
|
+
// 4. Ultimate fallback
|
|
90
|
+
const fallbackModel = featuresConfig.model_routing?.fallback_model || "claude-haiku-4";
|
|
123
91
|
return fallbackModel;
|
|
124
92
|
}
|
|
125
93
|
/**
|
|
@@ -134,24 +102,15 @@ class ModelRouter {
|
|
|
134
102
|
getMaxTokensForTaskType(taskType) {
|
|
135
103
|
return featuresConfigLoader.getMaxTokensForTask(taskType);
|
|
136
104
|
}
|
|
137
|
-
|
|
138
|
-
// Check for user-specific config (future enhancement)
|
|
139
|
-
return null;
|
|
140
|
-
}
|
|
141
|
-
isModelAvailable(model) {
|
|
142
|
-
if (this.config.deprecated_models?.includes(model)) {
|
|
143
|
-
return false;
|
|
144
|
-
}
|
|
145
|
-
// For now, accept all models - the API will validate
|
|
105
|
+
isModelAvailable(_model) {
|
|
146
106
|
return true;
|
|
147
107
|
}
|
|
148
108
|
/**
|
|
149
109
|
* Reload configuration from disk
|
|
150
110
|
*/
|
|
151
111
|
reloadConfig() {
|
|
152
|
-
this.config = this.loadConfig();
|
|
153
|
-
this.availableModels = this.discoverModels();
|
|
154
112
|
featuresConfigLoader.clearCache();
|
|
113
|
+
this.availableModels = this.discoverModels();
|
|
155
114
|
}
|
|
156
115
|
/**
|
|
157
116
|
* Get current configuration summary
|
|
@@ -4,7 +4,6 @@
|
|
|
4
4
|
* P9 learning system - analyzes patterns, detects drift, and improves routing.
|
|
5
5
|
* Extracted from task-skill-router.ts as part of Phase 2 refactoring.
|
|
6
6
|
*
|
|
7
|
-
* @version 1.0.0
|
|
8
7
|
* @since 2026-03-12
|
|
9
8
|
*/
|
|
10
9
|
import { patternPerformanceTracker } from '../../analytics/pattern-performance-tracker.js';
|
|
@@ -10,7 +10,6 @@
|
|
|
10
10
|
* - complex: 50+ - multi-agent orchestration with voting
|
|
11
11
|
* - enterprise: 75+ - maximum orchestration
|
|
12
12
|
*
|
|
13
|
-
* @version 1.2.0
|
|
14
13
|
* @since 2026-01-07
|
|
15
14
|
*/
|
|
16
15
|
import { DEFAULT_THRESHOLDS, OPERATION_WEIGHTS, RISK_MULTIPLIERS, getLevelFromScore, getStrategyForLevel, getAgentCountForLevel, generateReasoning, } from "./complexity-core.js";
|
package/dist/delegation/index.js
CHANGED
|
@@ -6,7 +6,6 @@
|
|
|
6
6
|
* - History-weighted voting that considers past successful votes
|
|
7
7
|
* - Multiple aggregation strategies for different decision scenarios
|
|
8
8
|
*
|
|
9
|
-
* @version 1.0.0
|
|
10
9
|
* @since 2026-04-17
|
|
11
10
|
*/
|
|
12
11
|
import { getAgentExpertiseLevel, getVotingWeight, } from "./agent-expertise.js";
|