0xray 3.1.0 → 3.2.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/.gitignore.default +59 -0
- package/.mcp.json +35 -0
- 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/dependency-audit.md +3 -3
- 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 +6 -6
- package/.opencode/enforcer-config.json +2 -2
- package/.opencode/hooks/post-commit +1 -1
- package/.opencode/init.sh +6 -0
- package/.plugin/plugin.json +11 -0
- package/AGENTS-consumer.md +46 -0
- package/AGENTS.md +2 -12
- package/LICENSE +1 -1
- package/README.md +6 -6
- package/SKILLS.md +140 -0
- package/dist/.gitignore.default +59 -0
- package/dist/AGENTS.md +2 -12
- package/dist/CHANGELOG.md +54 -0
- package/dist/LICENSE +1 -1
- package/dist/README.md +6 -6
- package/dist/SKILLS.md +140 -0
- package/dist/agents/index.js +3 -1
- package/dist/agents/registry.js +13 -0
- 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 +1 -2
- package/dist/analytics/simple-pattern-analyzer.js +0 -1
- package/dist/architect/architectural-integrity.js +3 -3
- package/dist/benchmark/performance-benchmark.js +1 -2
- package/dist/cli/commands/antigravity-status.js +23 -23
- package/dist/cli/commands/archive-logs.js +0 -1
- package/dist/cli/commands/credible-init.js +1 -1
- package/dist/cli/commands/hermes-install.js +8 -0
- package/dist/cli/commands/mcp-install.js +1 -1
- package/dist/cli/commands/openclaw-install.js +9 -0
- package/dist/cli/commands/opencode-install.js +35 -0
- package/dist/cli/commands/plugin-commands.js +0 -1
- package/dist/cli/commands/skill-install.js +39 -2
- package/dist/cli/commands/status.js +16 -13
- package/dist/cli/commands/storyteller.js +1 -1
- package/dist/cli/index.js +14 -13
- package/dist/core/activity-logger.js +4 -5
- package/dist/core/adaptive-kernel.js +0 -1
- package/dist/core/agent-spawn-gate.js +1 -1
- package/dist/core/boot-orchestrator.js +14 -25
- package/dist/core/bridge.mjs +4 -5
- package/dist/core/codex-formatter.js +1 -3
- package/dist/core/codex-injector.js +3 -4
- package/dist/core/config-loader.js +36 -29
- package/dist/core/config-paths.js +30 -23
- package/dist/core/context-loader.js +0 -4
- package/dist/core/context-validator.js +0 -1
- package/dist/core/features-config.js +38 -2
- package/dist/core/index.js +2 -2
- package/dist/core/kernel-patterns.js +0 -1
- package/dist/core/logging-config.js +7 -7
- package/dist/core/model-router.js +23 -64
- package/dist/core/orchestrator.js +1 -1
- package/dist/core/system-prompt-generator.js +0 -1
- package/dist/core/xray-activation.js +3 -4
- package/dist/delegation/agent-delegator.js +2 -3
- 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/enforcer-tools.js +2 -2
- 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 +2 -3
- 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/execution/opencode-cli-invoker.js +1 -1
- package/dist/governance/codex-policy.service.js +0 -1
- package/dist/governance/governance-service.js +1 -1
- package/dist/governance/llm-governance-provider.js +14 -1
- package/dist/index.js +3 -5
- package/dist/inference/inference-agent-invoker.js +67 -0
- package/dist/inference/inference-applier.js +178 -0
- package/dist/inference/inference-cycle.js +52 -828
- 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/README.md +1 -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 +5 -5
- 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/grok/grok-cli.js +20 -6
- package/dist/integrations/grok/hooks/pre-tool-use.js +3 -3
- package/dist/integrations/grok/plugin/0xray/.mcp.json +16 -4
- package/dist/integrations/grok/plugin/0xray/hooks/hooks.json +2 -2
- package/dist/integrations/hermes-agent/__init__.py +29 -14
- package/dist/integrations/hermes-agent/bridge.mjs +76 -4
- package/dist/integrations/hermes-agent/schemas.py +49 -0
- package/dist/integrations/hermes-agent/test_plugin.py +7 -7
- package/dist/integrations/hermes-agent/tools.py +107 -3
- package/dist/integrations/openclaw/README.md +6 -6
- package/dist/integrations/openclaw/api-server.js +0 -1
- package/dist/integrations/openclaw/client.js +0 -1
- package/dist/integrations/openclaw/config.js +1 -2
- package/dist/integrations/openclaw/hooks/{strray-hooks.js → xray-hooks.js} +0 -1
- package/dist/integrations/openclaw/index.js +2 -3
- package/dist/integrations/openclaw/types.js +3 -4
- package/dist/integrations/plugins/index.js +0 -1
- package/dist/integrations/plugins/plugin-integration.js +1 -2
- package/dist/integrations/plugins/plugin-registry.js +1 -2
- package/dist/mcps/agent-resolver.js +0 -1
- package/dist/mcps/architect-tools.server.js +121 -186
- package/dist/mcps/auto-format.server.js +57 -75
- package/dist/mcps/boot-orchestrator.server.js +68 -86
- package/dist/mcps/config/config-loader.js +46 -9
- package/dist/mcps/config/plugin-server-registry.js +0 -1
- package/dist/mcps/enforcer-tools.server.js +208 -274
- package/dist/mcps/estimation.server.js +65 -108
- package/dist/mcps/framework-compliance-audit.server.js +53 -82
- package/dist/mcps/framework-help.server.js +73 -90
- package/dist/mcps/governance.server.js +104 -152
- package/dist/mcps/knowledge-skills/api-design.server.js +35 -66
- package/dist/mcps/knowledge-skills/architecture-patterns.server.js +35 -66
- package/dist/mcps/knowledge-skills/bug-triage-specialist.server.js +125 -165
- package/dist/mcps/knowledge-skills/code-analyzer.server.js +211 -238
- package/dist/mcps/knowledge-skills/code-review.server.js +109 -143
- package/dist/mcps/knowledge-skills/content-creator.server.js +205 -227
- package/dist/mcps/knowledge-skills/database-design.server.js +117 -151
- package/dist/mcps/knowledge-skills/devops-deployment.server.js +125 -158
- package/dist/mcps/knowledge-skills/git-workflow.server.js +36 -68
- package/dist/mcps/knowledge-skills/growth-strategist.server.js +303 -325
- package/dist/mcps/knowledge-skills/log-monitor.server.js +141 -161
- package/dist/mcps/knowledge-skills/mobile-development.server.js +172 -202
- package/dist/mcps/knowledge-skills/multimodal-looker.server.js +124 -160
- package/dist/mcps/knowledge-skills/performance-optimization.server.js +89 -139
- package/dist/mcps/knowledge-skills/project-analysis.server.js +132 -219
- package/dist/mcps/knowledge-skills/refactoring-strategies.server.js +117 -151
- package/dist/mcps/knowledge-skills/security-audit.server.js +17 -144
- package/dist/mcps/knowledge-skills/seo-consultant.server.js +22 -214
- package/dist/mcps/knowledge-skills/session-management.server.js +15 -91
- package/dist/mcps/knowledge-skills/skill-invocation.server.js +83 -359
- package/dist/mcps/knowledge-skills/strategist.server.js +12 -57
- package/dist/mcps/knowledge-skills/tech-writer.server.js +18 -193
- package/dist/mcps/knowledge-skills/testing-best-practices.server.js +20 -192
- package/dist/mcps/knowledge-skills/testing-strategy.server.js +19 -157
- package/dist/mcps/knowledge-skills/ui-ux-design.server.js +24 -297
- package/dist/mcps/lint.server.js +51 -92
- package/dist/mcps/model-health-check.server.js +34 -61
- package/dist/mcps/orchestrator/aside-context.js +207 -0
- 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 +5 -0
- package/dist/mcps/orchestrator/index.js +5 -0
- package/dist/mcps/orchestrator/server.js +65 -9
- package/dist/mcps/orchestrator.server.js +2 -1
- package/dist/mcps/performance-analysis.server.js +57 -88
- package/dist/mcps/processor-pipeline.server.js +70 -100
- package/dist/mcps/registry.json +1 -1
- package/dist/mcps/researcher.server.js +81 -154
- package/dist/mcps/security-scan.server.js +57 -71
- package/dist/mcps/shared/knowledge-skill-base.js +11 -4
- package/dist/mcps/state-manager.server.js +127 -155
- package/dist/metrics/agent-metrics.js +1 -1
- 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/orchestrator/agent-spawn-governor.js +0 -1
- package/dist/orchestrator/enhanced-multi-agent-orchestrator.js +2 -2
- package/dist/orchestrator/intelligent-commit-batcher.js +2 -11
- package/dist/orchestrator/multi-agent-orchestration-coordinator.js +1 -2
- package/dist/orchestrator/orchestrator.js +8 -19
- package/dist/orchestrator/self-direction-activation.js +0 -1
- package/dist/orchestrator/universal-registry-bridge.js +1 -2
- 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 +39 -558
- package/dist/postprocessor/PostProcessor.js +7 -13
- 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 +2 -3
- package/dist/postprocessor/triggers/APITrigger.js +0 -1
- package/dist/postprocessor/triggers/GitHookTrigger.js +4 -4
- 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 -10
- 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 -13
- 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 -29
- 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/public/about.html +6 -6
- package/dist/public/enterprise.html +1 -1
- package/dist/public/features.html +2 -2
- package/dist/public/index.html +4 -4
- package/dist/reporting/report-formatter.js +1 -1
- package/dist/scripts/activate-kernel-pipeline.js +2 -2
- package/dist/scripts/integration.js +0 -1
- package/dist/scripts/pre-command +1 -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 +1 -2
- 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/api-design/SKILL.md +1 -1
- package/dist/skills/architect-tools/SKILL.md +1 -1
- package/dist/skills/architecture-patterns/SKILL.md +1 -1
- package/dist/skills/auto-format/SKILL.md +1 -1
- package/dist/skills/boot-orchestrator/SKILL.md +1 -1
- package/dist/skills/bug-triage/SKILL.md +1 -1
- package/dist/skills/code-analyzer/SKILL.md +1 -1
- package/dist/skills/code-review/SKILL.md +1 -1
- package/dist/skills/enforcer/SKILL.md +1 -1
- package/dist/skills/framework-compliance-audit/SKILL.md +1 -1
- package/dist/skills/git-workflow/SKILL.md +1 -1
- package/dist/skills/hermes-agent/SKILL.md +2 -2
- package/dist/skills/inference-improve/SKILL.md +1 -1
- package/dist/skills/lint/SKILL.md +1 -1
- package/dist/skills/log-monitor/SKILL.md +1 -1
- package/dist/skills/model-health-check/SKILL.md +1 -1
- package/dist/skills/multimodal-looker/SKILL.md +1 -1
- package/dist/skills/orchestrator/SKILL.md +1 -1
- package/dist/skills/performance-analysis/SKILL.md +1 -1
- package/dist/skills/performance-optimization/SKILL.md +1 -1
- package/dist/skills/processor-pipeline/SKILL.md +1 -1
- package/dist/skills/project-analysis/SKILL.md +1 -1
- package/dist/skills/refactoring-strategies/SKILL.md +1 -1
- package/dist/skills/registry.json +1 -1
- package/dist/skills/researcher/SKILL.md +1 -1
- package/dist/skills/security-audit/SKILL.md +1 -1
- package/dist/skills/security-scan/SKILL.md +1 -1
- package/dist/skills/session-management/SKILL.md +1 -1
- package/dist/skills/state-manager/SKILL.md +1 -1
- package/dist/skills/storyteller/SKILL.md +1 -1
- package/dist/skills/testing-best-practices/SKILL.md +1 -1
- package/dist/skills/testing-strategy/SKILL.md +1 -1
- package/dist/skills/ui-ux-design/SKILL.md +1 -1
- package/dist/skills/xray-orchestrator/index.js +0 -1
- package/dist/state/index.js +0 -1
- package/dist/state/state-manager.js +1 -2
- package/dist/utils/codex-parser.js +0 -1
- package/dist/utils/import-resolver.js +1 -1
- package/dist/utils/language-detector.js +0 -1
- package/dist/utils/path-resolver.js +2 -2
- 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 +10 -3
- package/scripts/hooks/pre-command +1 -1
- package/scripts/hooks/run-hook.js +2 -2
- package/scripts/node/auto-reflection-generator.mjs +30 -36
- package/scripts/node/govern-reflection.mjs +1 -1
- package/scripts/node/postinstall.cjs +37 -2
- package/scripts/node/release.mjs +2 -2
- package/scripts/node/setup-xai-oauth.mjs +244 -0
- package/scripts/node/setup.cjs +28 -0
- package/scripts/node/universal-version-manager.js +8 -8
- package/scripts/node/version-manager.mjs +1 -1
- package/src/integrations/grok/plugin/0xray/.mcp.json +16 -4
- package/src/integrations/grok/plugin/0xray/hooks/hooks.json +2 -2
- package/src/mcps/agent-resolver.ts +0 -1
- package/src/mcps/architect-tools.server.ts +130 -212
- package/src/mcps/auto-format.server.ts +75 -104
- package/src/mcps/boot-orchestrator.server.ts +72 -97
- package/src/mcps/config/__tests__/config-loader.test.ts +33 -37
- package/src/mcps/config/config-loader.ts +57 -11
- package/src/mcps/config/plugin-server-registry.ts +0 -1
- package/src/mcps/enforcer-tools.server.ts +218 -295
- package/src/mcps/estimation.server.ts +64 -123
- package/src/mcps/framework-compliance-audit.server.ts +54 -96
- package/src/mcps/framework-help.server.ts +76 -97
- package/src/mcps/governance.server.ts +104 -164
- package/src/mcps/knowledge-skills/api-design.server.ts +35 -73
- package/src/mcps/knowledge-skills/architecture-patterns.server.ts +34 -73
- package/src/mcps/knowledge-skills/bug-triage-specialist.server.ts +149 -194
- package/src/mcps/knowledge-skills/code-analyzer.server.ts +223 -255
- package/src/mcps/knowledge-skills/code-review.server.ts +116 -158
- package/src/mcps/knowledge-skills/content-creator.server.ts +221 -248
- package/src/mcps/knowledge-skills/database-design.server.ts +120 -161
- package/src/mcps/knowledge-skills/devops-deployment.server.ts +128 -168
- package/src/mcps/knowledge-skills/git-workflow.server.ts +34 -78
- package/src/mcps/knowledge-skills/growth-strategist.server.ts +324 -362
- package/src/mcps/knowledge-skills/log-monitor.server.ts +70 -97
- package/src/mcps/knowledge-skills/mobile-development.server.ts +18 -58
- package/src/mcps/knowledge-skills/multimodal-looker.server.ts +15 -61
- package/src/mcps/knowledge-skills/performance-optimization.server.ts +14 -75
- package/src/mcps/knowledge-skills/project-analysis.server.ts +14 -121
- package/src/mcps/knowledge-skills/refactoring-strategies.server.ts +15 -61
- package/src/mcps/knowledge-skills/security-audit.server.ts +20 -158
- package/src/mcps/knowledge-skills/seo-consultant.server.ts +25 -228
- package/src/mcps/knowledge-skills/session-management.server.ts +19 -107
- package/src/mcps/knowledge-skills/skill-invocation.server.ts +89 -380
- package/src/mcps/knowledge-skills/strategist.server.ts +15 -65
- package/src/mcps/knowledge-skills/tech-writer.server.ts +21 -206
- package/src/mcps/knowledge-skills/testing-best-practices.server.ts +23 -205
- package/src/mcps/knowledge-skills/testing-strategy.server.ts +22 -166
- package/src/mcps/knowledge-skills/ui-ux-design.server.ts +27 -343
- package/src/mcps/lint.server.ts +53 -106
- package/src/mcps/model-health-check.server.ts +35 -71
- package/src/mcps/orchestrator/aside-context.ts +245 -0
- 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 +8 -1
- package/src/mcps/orchestrator/index.ts +29 -0
- package/src/mcps/orchestrator/server.ts +81 -25
- package/src/mcps/orchestrator/types.ts +37 -0
- package/src/mcps/orchestrator.server.ts +2 -1
- package/src/mcps/performance-analysis.server.ts +60 -103
- package/src/mcps/processor-pipeline.server.ts +72 -109
- package/src/mcps/registry.json +1 -1
- package/src/mcps/researcher.server.ts +88 -176
- package/src/mcps/security-scan.server.ts +58 -77
- package/src/mcps/shared/knowledge-skill-base.ts +12 -4
- package/src/mcps/state-manager.server.ts +132 -172
- 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/dependency-audit.md +3 -3
- 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 +6 -6
- package/src/opencode/enforcer-config.json +2 -2
- package/src/skills/api-design/SKILL.md +1 -1
- package/src/skills/architect-tools/SKILL.md +1 -1
- package/src/skills/architecture-patterns/SKILL.md +1 -1
- package/src/skills/auto-format/SKILL.md +1 -1
- package/src/skills/boot-orchestrator/SKILL.md +1 -1
- package/src/skills/bug-triage/SKILL.md +1 -1
- package/src/skills/code-analyzer/SKILL.md +1 -1
- package/src/skills/code-review/SKILL.md +1 -1
- package/src/skills/enforcer/SKILL.md +1 -1
- package/src/skills/framework-compliance-audit/SKILL.md +1 -1
- package/src/skills/git-workflow/SKILL.md +1 -1
- package/src/skills/hermes-agent/SKILL.md +2 -2
- package/src/skills/inference-improve/SKILL.md +1 -1
- package/src/skills/lint/SKILL.md +1 -1
- package/src/skills/log-monitor/SKILL.md +1 -1
- package/src/skills/model-health-check/SKILL.md +1 -1
- package/src/skills/multimodal-looker/SKILL.md +1 -1
- package/src/skills/orchestrator/SKILL.md +1 -1
- package/src/skills/performance-analysis/SKILL.md +1 -1
- package/src/skills/performance-optimization/SKILL.md +1 -1
- package/src/skills/processor-pipeline/SKILL.md +1 -1
- package/src/skills/project-analysis/SKILL.md +1 -1
- package/src/skills/refactoring-strategies/SKILL.md +1 -1
- package/src/skills/registry.json +1 -1
- package/src/skills/researcher/SKILL.md +1 -1
- package/src/skills/security-audit/SKILL.md +1 -1
- package/src/skills/security-scan/SKILL.md +1 -1
- package/src/skills/session-management/SKILL.md +1 -1
- package/src/skills/state-manager/SKILL.md +1 -1
- package/src/skills/storyteller/SKILL.md +1 -1
- package/src/skills/testing-best-practices/SKILL.md +1 -1
- package/src/skills/testing-strategy/SKILL.md +1 -1
- package/src/skills/ui-ux-design/SKILL.md +1 -1
- package/src/skills/xray-orchestrator/index.ts +0 -1
- package/xray/agents_template.md +46 -0
- package/xray/codex.json +598 -0
- package/dist/nucleus/orchestrator.js +0 -479
|
@@ -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,19 +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
|
-
export { XrayConfigLoader as StringRayConfigLoader };
|
|
150
|
-
export { xrayConfigLoader as strRayConfigLoader };
|
|
@@ -2,17 +2,15 @@
|
|
|
2
2
|
* Config Path Resolver
|
|
3
3
|
*
|
|
4
4
|
* Centralizes all 0xRay config file path resolution.
|
|
5
|
-
* Supports
|
|
6
|
-
* making .opencode/ completely optional for environments like Hermes Agent.
|
|
5
|
+
* Supports XRAY_CONFIG_DIR env var for custom config roots.
|
|
7
6
|
*
|
|
8
7
|
* Resolution order (per file type):
|
|
9
|
-
* 1.
|
|
8
|
+
* 1. XRAY_CONFIG_DIR/<relative_path> (if env var set)
|
|
10
9
|
* 2. .xray/<relative_path> (preferred lightweight root)
|
|
11
|
-
* 3.
|
|
12
|
-
* 4. null (callers fall back to built-in defaults)
|
|
10
|
+
* 3. null (callers fall back to built-in defaults)
|
|
13
11
|
*
|
|
14
12
|
* For state/data directories, uses:
|
|
15
|
-
* 1.
|
|
13
|
+
* 1. XRAY_CONFIG_DIR/state (if env var set)
|
|
16
14
|
* 2. .xray/state
|
|
17
15
|
* 3. .opencode/state (legacy)
|
|
18
16
|
* 4. .xray/state (default — always writable)
|
|
@@ -20,7 +18,7 @@
|
|
|
20
18
|
import { existsSync } from "fs";
|
|
21
19
|
import { join, resolve } from "path";
|
|
22
20
|
/** Environment variable name for custom config root */
|
|
23
|
-
export const
|
|
21
|
+
export const XRAY_CONFIG_DIR_ENV = "XRAY_CONFIG_DIR";
|
|
24
22
|
/** Resolved config directories, cached per projectRoot */
|
|
25
23
|
const _resolvedConfigDirs = new Map();
|
|
26
24
|
/**
|
|
@@ -28,11 +26,11 @@ const _resolvedConfigDirs = new Map();
|
|
|
28
26
|
* Scans in priority order and caches the first one that exists (or the first default).
|
|
29
27
|
*/
|
|
30
28
|
export function getConfigDir(projectRoot) {
|
|
31
|
-
const root = projectRoot
|
|
29
|
+
const root = resolveRoot(projectRoot);
|
|
32
30
|
const cached = _resolvedConfigDirs.get(root);
|
|
33
31
|
if (cached)
|
|
34
32
|
return cached;
|
|
35
|
-
const envDir = process.env[
|
|
33
|
+
const envDir = process.env[XRAY_CONFIG_DIR_ENV];
|
|
36
34
|
// Priority candidates
|
|
37
35
|
const candidates = [];
|
|
38
36
|
if (envDir) {
|
|
@@ -41,7 +39,6 @@ export function getConfigDir(projectRoot) {
|
|
|
41
39
|
candidates.push({ dir: resolved, source: "env" });
|
|
42
40
|
}
|
|
43
41
|
candidates.push({ dir: join(root, ".xray"), source: "dot-xray" });
|
|
44
|
-
candidates.push({ dir: join(root, ".opencode", "xray"), source: "dot-opencode" });
|
|
45
42
|
// Return the first that exists, or the highest-priority default
|
|
46
43
|
for (const c of candidates) {
|
|
47
44
|
if (existsSync(c.dir)) {
|
|
@@ -49,7 +46,7 @@ export function getConfigDir(projectRoot) {
|
|
|
49
46
|
return c.dir;
|
|
50
47
|
}
|
|
51
48
|
}
|
|
52
|
-
// Nothing exists — use highest priority default (env > .xray
|
|
49
|
+
// Nothing exists — use highest priority default (env > .xray)
|
|
53
50
|
const defaultDir = candidates[0];
|
|
54
51
|
_resolvedConfigDirs.set(root, defaultDir.dir);
|
|
55
52
|
return defaultDir.dir;
|
|
@@ -62,14 +59,13 @@ export function getConfigDir(projectRoot) {
|
|
|
62
59
|
* @param projectRoot - Optional project root override
|
|
63
60
|
*/
|
|
64
61
|
export function resolveConfigPath(relativePath, projectRoot) {
|
|
65
|
-
const root = projectRoot
|
|
66
|
-
const envDir = process.env[
|
|
62
|
+
const root = resolveRoot(projectRoot);
|
|
63
|
+
const envDir = process.env[XRAY_CONFIG_DIR_ENV];
|
|
67
64
|
const candidates = [];
|
|
68
65
|
if (envDir) {
|
|
69
66
|
candidates.push(resolve(root, envDir, relativePath));
|
|
70
67
|
}
|
|
71
68
|
candidates.push(join(root, ".xray", relativePath));
|
|
72
|
-
candidates.push(join(root, ".opencode", "xray", relativePath));
|
|
73
69
|
for (const candidate of candidates) {
|
|
74
70
|
if (existsSync(candidate)) {
|
|
75
71
|
return candidate;
|
|
@@ -84,8 +80,8 @@ export function resolveConfigPath(relativePath, projectRoot) {
|
|
|
84
80
|
* Similar logic to resolveConfigPath but for the state/ subdirectory.
|
|
85
81
|
*/
|
|
86
82
|
export function resolveStateDir(projectRoot) {
|
|
87
|
-
const root = projectRoot
|
|
88
|
-
const envDir = process.env[
|
|
83
|
+
const root = resolveRoot(projectRoot);
|
|
84
|
+
const envDir = process.env[XRAY_CONFIG_DIR_ENV];
|
|
89
85
|
const candidates = [];
|
|
90
86
|
if (envDir) {
|
|
91
87
|
candidates.push(join(root, envDir, "state"));
|
|
@@ -111,14 +107,13 @@ export function resolveStateFilePath(projectRoot) {
|
|
|
111
107
|
* Get the profiles storage directory.
|
|
112
108
|
*/
|
|
113
109
|
export function resolveProfilesDir(projectRoot) {
|
|
114
|
-
const root = projectRoot
|
|
115
|
-
const envDir = process.env[
|
|
110
|
+
const root = resolveRoot(projectRoot);
|
|
111
|
+
const envDir = process.env[XRAY_CONFIG_DIR_ENV];
|
|
116
112
|
const candidates = [];
|
|
117
113
|
if (envDir) {
|
|
118
114
|
candidates.push(join(root, envDir, "profiles"));
|
|
119
115
|
}
|
|
120
116
|
candidates.push(join(root, ".xray", "profiles"));
|
|
121
|
-
candidates.push(join(root, ".opencode", "xray", "profiles"));
|
|
122
117
|
for (const candidate of candidates) {
|
|
123
118
|
if (existsSync(candidate)) {
|
|
124
119
|
return candidate;
|
|
@@ -130,16 +125,28 @@ export function resolveProfilesDir(projectRoot) {
|
|
|
130
125
|
* Resolve codex.json path.
|
|
131
126
|
* Has additional fallback locations beyond the standard config dir.
|
|
132
127
|
*/
|
|
128
|
+
/** Environment variable for explicit project root override */
|
|
129
|
+
export const XRAY_ROOT_ENV = "XRAY_ROOT";
|
|
130
|
+
/**
|
|
131
|
+
* Resolve project root using XRAY_ROOT env var if set,
|
|
132
|
+
* otherwise fall back to projectRoot param or cwd.
|
|
133
|
+
*/
|
|
134
|
+
export function resolveProjectRoot(projectRoot) {
|
|
135
|
+
return process.env[XRAY_ROOT_ENV] || projectRoot || process.cwd();
|
|
136
|
+
}
|
|
137
|
+
/** @deprecated Use resolveProjectRoot — kept for internal consistency */
|
|
138
|
+
function resolveRoot(projectRoot) {
|
|
139
|
+
return resolveProjectRoot(projectRoot);
|
|
140
|
+
}
|
|
133
141
|
export function resolveCodexPath(projectRoot) {
|
|
134
|
-
const root = projectRoot
|
|
135
|
-
const envDir = process.env[
|
|
142
|
+
const root = resolveRoot(projectRoot);
|
|
143
|
+
const envDir = process.env[XRAY_CONFIG_DIR_ENV];
|
|
136
144
|
const candidates = [];
|
|
137
145
|
if (envDir) {
|
|
138
146
|
candidates.push(join(root, envDir, "codex.json"));
|
|
139
147
|
}
|
|
140
148
|
candidates.push(join(root, ".xray", "codex.json"));
|
|
141
149
|
candidates.push(join(root, "xray", "codex.json"));
|
|
142
|
-
candidates.push(join(root, ".opencode", "xray", "codex.json"));
|
|
143
150
|
// Additional fallback locations (for standalone usage)
|
|
144
151
|
candidates.push(join(root, "codex.json"));
|
|
145
152
|
candidates.push(join(root, "src", "codex.json"));
|
|
@@ -150,7 +157,7 @@ export function resolveCodexPath(projectRoot) {
|
|
|
150
157
|
* Get the logs directory for framework logging.
|
|
151
158
|
*/
|
|
152
159
|
export function resolveLogDir(projectRoot) {
|
|
153
|
-
const root = projectRoot
|
|
160
|
+
const root = resolveRoot(projectRoot);
|
|
154
161
|
// Logs always go to logs/framework/ regardless of config dir
|
|
155
162
|
return join(root, "logs", "framework");
|
|
156
163
|
}
|
|
@@ -4,7 +4,6 @@
|
|
|
4
4
|
* Loads Universal Development Codex v1.2.0 context for agent initialization.
|
|
5
5
|
* Provides structured access to 30+ codex terms, interweaves, lenses, and anti-patterns.
|
|
6
6
|
*
|
|
7
|
-
* @version 1.0.0
|
|
8
7
|
* @since 2026-01-06
|
|
9
8
|
*/
|
|
10
9
|
import * as fs from "fs";
|
|
@@ -267,6 +266,3 @@ export class XrayContextLoader {
|
|
|
267
266
|
* Export singleton instance
|
|
268
267
|
*/
|
|
269
268
|
export const xrayContextLoader = XrayContextLoader.getInstance();
|
|
270
|
-
// Backward compat aliases
|
|
271
|
-
export { XrayContextLoader as StringRayContextLoader };
|
|
272
|
-
export { xrayContextLoader as strRayContextLoader };
|
|
@@ -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";
|
|
@@ -286,7 +285,7 @@ export class FeaturesConfigLoader {
|
|
|
286
285
|
*/
|
|
287
286
|
getDefaultConfig() {
|
|
288
287
|
return {
|
|
289
|
-
version: "1.
|
|
288
|
+
version: "3.1.0",
|
|
290
289
|
description: "0xRay Framework - Unified Feature Configuration",
|
|
291
290
|
token_optimization: {
|
|
292
291
|
enabled: true,
|
|
@@ -446,6 +445,43 @@ 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
|
+
getPublish() {
|
|
476
|
+
return this.loadConfig().publish;
|
|
477
|
+
}
|
|
478
|
+
getAutoReporting() {
|
|
479
|
+
return this.loadConfig().autonomous_reporting;
|
|
480
|
+
}
|
|
481
|
+
getGovernance() {
|
|
482
|
+
const config = this.loadConfig();
|
|
483
|
+
return config.inference;
|
|
484
|
+
}
|
|
449
485
|
}
|
|
450
486
|
// Export singleton instance
|
|
451
487
|
export const featuresConfigLoader = new FeaturesConfigLoader();
|
package/dist/core/index.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
export { KernelOrchestrator } from "./orchestrator.js";
|
|
2
|
-
export { defaultXrayConfig
|
|
2
|
+
export { defaultXrayConfig } from "./xray-activation.js";
|
|
3
3
|
// Decoupled config path resolution (Layer 1)
|
|
4
|
-
export { getConfigDir, resolveConfigPath, resolveStateDir, resolveProfilesDir, resolveCodexPath, resolveLogDir, resetConfigDirCache,
|
|
4
|
+
export { getConfigDir, resolveConfigPath, resolveStateDir, resolveProfilesDir, resolveCodexPath, resolveLogDir, resetConfigDirCache, XRAY_CONFIG_DIR_ENV, } from "./config-paths.js";
|
|
5
5
|
// Standalone codex formatter (Layer 2)
|
|
6
6
|
export { formatCodexPrompt, formatMinimalCodexPrompt, getCodexConfig, findCodexPath, loadCodex, BUILTIN_CODEX, } from "./codex-formatter.js";
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
// Default logging configuration
|
|
2
2
|
const defaultLoggingConfig = {
|
|
3
|
-
enabled: process.env.
|
|
4
|
-
level: process.env.
|
|
3
|
+
enabled: process.env.XRAY_LOGGING_ENABLED !== "false", // Default true, can be disabled
|
|
4
|
+
level: process.env.XRAY_LOG_LEVEL || "info",
|
|
5
5
|
destinations: ["console", "file"],
|
|
6
|
-
performanceMode: process.env.
|
|
6
|
+
performanceMode: process.env.XRAY_PERFORMANCE_MODE === "true",
|
|
7
7
|
};
|
|
8
8
|
// Available log levels in priority order (higher index = more verbose)
|
|
9
9
|
const LOG_LEVELS = ["debug", "info", "warn", "error"];
|
|
@@ -32,12 +32,12 @@ export function shouldLog(level) {
|
|
|
32
32
|
return messageLevelIndex >= currentLevelIndex;
|
|
33
33
|
}
|
|
34
34
|
// Environment variable configuration
|
|
35
|
-
if (process.env.
|
|
35
|
+
if (process.env.XRAY_LOGGING_ENABLED === "false") {
|
|
36
36
|
setLoggingConfig({ enabled: false });
|
|
37
37
|
}
|
|
38
|
-
if (process.env.
|
|
39
|
-
setLoggingConfig({ level: process.env.
|
|
38
|
+
if (process.env.XRAY_LOG_LEVEL) {
|
|
39
|
+
setLoggingConfig({ level: process.env.XRAY_LOG_LEVEL });
|
|
40
40
|
}
|
|
41
|
-
if (process.env.
|
|
41
|
+
if (process.env.XRAY_PERFORMANCE_MODE === "true") {
|
|
42
42
|
setLoggingConfig({ performanceMode: true });
|
|
43
43
|
}
|
|
@@ -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
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* Consumer runtime compat shim from prior 0xRay releases (1-line min per Scope Rule; primary xray paths +
|
|
2
|
+
* Consumer runtime compat shim from prior 0xRay releases (1-line min per Scope Rule; primary xray paths + .xray fallbacks).
|
|
3
3
|
*/
|
|
4
4
|
import { frameworkLogger } from "../core/framework-logger.js";
|
|
5
5
|
import { ensureCriticalComponents } from "../architect/architectural-integrity.js";
|
|
@@ -98,7 +98,7 @@ async function activateStateManagement(jobId) {
|
|
|
98
98
|
}
|
|
99
99
|
async function activateOrchestrator(jobId) {
|
|
100
100
|
frameworkLogger.log("xray-activation", "activating xray orchestrator", "info", { jobId });
|
|
101
|
-
const {
|
|
101
|
+
const { xrayOrchestrator } = await import("./orchestrator");
|
|
102
102
|
// Also activate the multi-agent orchestration coordinator
|
|
103
103
|
const { multiAgentOrchestrationCoordinator } = await import("../orchestrator/multi-agent-orchestration-coordinator");
|
|
104
104
|
frameworkLogger.log("xray-activation", "xray orchestrator and multi-agent coordination activated", "success", { jobId });
|
|
@@ -132,5 +132,4 @@ async function activatePostProcessor(jobId) {
|
|
|
132
132
|
globalThis.xrayCodexInjector = codexInjector;
|
|
133
133
|
frameworkLogger.log("xray-activation", "codex injector activated", "success", { jobId });
|
|
134
134
|
}
|
|
135
|
-
|
|
136
|
-
export { activateXrayFramework as activateStringRayFramework };
|
|
135
|
+
// Backward compat aliases
|
|
@@ -6,7 +6,6 @@
|
|
|
6
6
|
*
|
|
7
7
|
* Integrates with TaskSkillRouter for keyword-based preprocessing.
|
|
8
8
|
*
|
|
9
|
-
* @version 1.1.0
|
|
10
9
|
* @since 2026-01-07
|
|
11
10
|
*/
|
|
12
11
|
import * as fs from "fs";
|
|
@@ -47,7 +46,7 @@ export class AgentDelegator {
|
|
|
47
46
|
const candidates = [
|
|
48
47
|
path.resolve(process.cwd(), ".xray/routing-mappings.json"),
|
|
49
48
|
path.resolve(process.cwd(), "xray/routing-mappings.json"),
|
|
50
|
-
path.resolve(process.cwd(), ".
|
|
49
|
+
path.resolve(process.cwd(), ".xray/routing-mappings.json"),
|
|
51
50
|
path.resolve(process.cwd(), "routing-mappings.json"),
|
|
52
51
|
];
|
|
53
52
|
for (const p of candidates) {
|
|
@@ -451,7 +450,7 @@ export class AgentDelegator {
|
|
|
451
450
|
*/
|
|
452
451
|
resolveProjectDirectory() {
|
|
453
452
|
const root = process.cwd();
|
|
454
|
-
if (fs.existsSync(`${root}/package.json`) || fs.existsSync(`${root}/
|
|
453
|
+
if (fs.existsSync(`${root}/package.json`) || fs.existsSync(`${root}/xray.config.json`)) {
|
|
455
454
|
return root;
|
|
456
455
|
}
|
|
457
456
|
let current = root;
|