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
|
@@ -10,30 +10,30 @@ import { join } from "path";
|
|
|
10
10
|
import { getConfigDir } from "../../core/config-paths.js";
|
|
11
11
|
function getSkillsFromSkills(cwd) {
|
|
12
12
|
const skills = [];
|
|
13
|
-
const skillsPath
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
return existsSync(skillPath);
|
|
20
|
-
});
|
|
21
|
-
for (const dir of dirs) {
|
|
22
|
-
const skillPath = join(skillsPath, dir, "SKILL.md");
|
|
23
|
-
const content = readFileSync(skillPath, "utf-8");
|
|
24
|
-
const sourceMatch = content.match(/^source:\s*(.+)/m);
|
|
25
|
-
const sourceNameMatch = content.match(/^source_name:\s*(.+)/m);
|
|
26
|
-
const licenseMatch = content.match(/License:\s*(.+)/m);
|
|
27
|
-
const rawName = dir.includes("--") ? dir.split("--").slice(1).join("--") : dir;
|
|
28
|
-
const communitySource = sourceNameMatch ? sourceNameMatch[1].trim() : null;
|
|
29
|
-
skills.push({
|
|
30
|
-
name: rawName,
|
|
31
|
-
source: sourceMatch && sourceMatch[1] ? sourceMatch[1].trim() : "custom",
|
|
32
|
-
communitySource,
|
|
33
|
-
license: licenseMatch ? licenseMatch[1].trim() : "unknown",
|
|
34
|
-
category: extractCategory(content),
|
|
35
|
-
path: skillPath,
|
|
13
|
+
for (const skillsPath of [join(getConfigDir(cwd), "skills"), join(cwd, ".opencode", "skills")]) {
|
|
14
|
+
if (!existsSync(skillsPath))
|
|
15
|
+
continue;
|
|
16
|
+
const dirs = readdirSync(skillsPath).filter((f) => {
|
|
17
|
+
const skillPath = join(skillsPath, f, "SKILL.md");
|
|
18
|
+
return existsSync(skillPath);
|
|
36
19
|
});
|
|
20
|
+
for (const dir of dirs) {
|
|
21
|
+
const skillPath = join(skillsPath, dir, "SKILL.md");
|
|
22
|
+
const content = readFileSync(skillPath, "utf-8");
|
|
23
|
+
const sourceMatch = content.match(/^source:\s*(.+)/m);
|
|
24
|
+
const sourceNameMatch = content.match(/^source_name:\s*(.+)/m);
|
|
25
|
+
const licenseMatch = content.match(/License:\s*(.+)/m);
|
|
26
|
+
const rawName = dir.includes("--") ? dir.split("--").slice(1).join("--") : dir;
|
|
27
|
+
const communitySource = sourceNameMatch ? sourceNameMatch[1].trim() : null;
|
|
28
|
+
skills.push({
|
|
29
|
+
name: rawName,
|
|
30
|
+
source: sourceMatch && sourceMatch[1] ? sourceMatch[1].trim() : "custom",
|
|
31
|
+
communitySource,
|
|
32
|
+
license: licenseMatch ? licenseMatch[1].trim() : "unknown",
|
|
33
|
+
category: extractCategory(content),
|
|
34
|
+
path: skillPath,
|
|
35
|
+
});
|
|
36
|
+
}
|
|
37
37
|
}
|
|
38
38
|
return skills;
|
|
39
39
|
}
|
|
@@ -60,7 +60,7 @@ function showNotImplemented() {
|
|
|
60
60
|
console.log("━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━");
|
|
61
61
|
console.log("");
|
|
62
62
|
console.log("💡 To be notified when this feature is available:");
|
|
63
|
-
console.log(" Track the evolution spec at docs/roadmap/
|
|
63
|
+
console.log(" Track the evolution spec at docs/roadmap/XRAY_EVOLUTION_SPEC.md");
|
|
64
64
|
console.log("");
|
|
65
65
|
console.log("🔜 Roadmap: Phase 3 (Polishing & Release)");
|
|
66
66
|
console.log("");
|
|
@@ -2,6 +2,7 @@ import fs from 'fs';
|
|
|
2
2
|
import path from 'path';
|
|
3
3
|
import { homedir } from 'os';
|
|
4
4
|
import { frameworkLogger } from '../../core/framework-logger.js';
|
|
5
|
+
import { syncBuiltinSkills } from './skill-install.js';
|
|
5
6
|
const __dirname = path.dirname(new URL(import.meta.url).pathname);
|
|
6
7
|
export function registerHermesCommands(hermesCmd) {
|
|
7
8
|
hermesCmd
|
|
@@ -49,6 +50,13 @@ async function installForHermes(options = {}) {
|
|
|
49
50
|
}
|
|
50
51
|
frameworkLogger.log('hermes-integration', 'plugin-copied', 'info', { destination: targetPluginDir });
|
|
51
52
|
console.log(`\x1b[32m✓ Copied Hermes plugin to ${targetPluginDir}\x1b[0m`);
|
|
53
|
+
// Sync builtin skills to Hermes plugin skills dir
|
|
54
|
+
const hermesSkillsDir = path.join(targetPluginDir, 'skills');
|
|
55
|
+
const skillsCopied = syncBuiltinSkills(hermesSkillsDir);
|
|
56
|
+
if (skillsCopied > 0) {
|
|
57
|
+
console.log(`\x1b[32m✓ Synced ${skillsCopied} builtin skills to Hermes plugin\x1b[0m`);
|
|
58
|
+
}
|
|
59
|
+
frameworkLogger.log('hermes-integration', 'skills-synced', 'info', { count: skillsCopied });
|
|
52
60
|
// Write after-install instructions
|
|
53
61
|
const afterInstallPath = path.join(targetPluginDir, 'after-install.md');
|
|
54
62
|
if (fs.existsSync(afterInstallPath)) {
|
|
@@ -3,7 +3,7 @@ import { join, dirname } from "path";
|
|
|
3
3
|
import { execSync } from "child_process";
|
|
4
4
|
import { getConfigDir } from "../../core/config-paths.js";
|
|
5
5
|
function getMCPConfigPath() {
|
|
6
|
-
return join(process.cwd(), ".
|
|
6
|
+
return join(process.cwd(), ".xray", "mcp-registry.json");
|
|
7
7
|
}
|
|
8
8
|
function getBundledMCPRegistry() {
|
|
9
9
|
const paths = [
|
|
@@ -1,6 +1,8 @@
|
|
|
1
1
|
import fs from 'fs';
|
|
2
2
|
import path from 'path';
|
|
3
|
+
import { homedir } from 'os';
|
|
3
4
|
import { frameworkLogger } from '../../core/framework-logger.js';
|
|
5
|
+
import { syncBuiltinSkills } from './skill-install.js';
|
|
4
6
|
import { OpenClawConfigLoader } from '../../integrations/openclaw/config.js';
|
|
5
7
|
export function registerOpenClawCommands(openclawCmd) {
|
|
6
8
|
openclawCmd
|
|
@@ -29,6 +31,13 @@ async function installForOpenClaw(options = {}) {
|
|
|
29
31
|
loader.createSampleConfig();
|
|
30
32
|
const relative = path.relative(process.cwd(), configPath);
|
|
31
33
|
console.log(`\x1b[32m✓ Created OpenClaw config at ${relative}\x1b[0m`);
|
|
34
|
+
// Sync builtin skills to ~/.openclaw/skills/
|
|
35
|
+
const openclawSkillsDir = path.join(homedir(), '.openclaw', 'skills');
|
|
36
|
+
const skillsCopied = syncBuiltinSkills(openclawSkillsDir);
|
|
37
|
+
if (skillsCopied > 0) {
|
|
38
|
+
console.log(`\x1b[32m✓ Synced ${skillsCopied} builtin skills to ~/.openclaw/skills/\x1b[0m`);
|
|
39
|
+
}
|
|
40
|
+
frameworkLogger.log('openclaw-integration', 'skills-synced', 'info', { count: skillsCopied });
|
|
32
41
|
console.log('\n✅ 0xRay OpenClaw integration configured!');
|
|
33
42
|
console.log('Edit the config file to set your gateway URL, auth token, and device ID.');
|
|
34
43
|
console.log('');
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import fs from 'fs';
|
|
2
2
|
import path from 'path';
|
|
3
3
|
import { frameworkLogger } from '../../core/framework-logger.js';
|
|
4
|
+
import { syncBuiltinSkills } from './skill-install.js';
|
|
4
5
|
const __dirname = path.dirname(new URL(import.meta.url).pathname);
|
|
5
6
|
export function registerOpencodeCommands(opencodeCmd) {
|
|
6
7
|
opencodeCmd
|
|
@@ -80,6 +81,20 @@ async function installForOpencode(options = {}) {
|
|
|
80
81
|
return;
|
|
81
82
|
}
|
|
82
83
|
try {
|
|
84
|
+
// Auto-create package.json if missing (OpenCode requires it)
|
|
85
|
+
const consumerPkgPath = path.join(process.cwd(), 'package.json');
|
|
86
|
+
if (!fs.existsSync(consumerPkgPath)) {
|
|
87
|
+
const pkg = {
|
|
88
|
+
name: path.basename(process.cwd()),
|
|
89
|
+
version: '1.0.0',
|
|
90
|
+
private: true,
|
|
91
|
+
dependencies: {
|
|
92
|
+
'0xray': '*',
|
|
93
|
+
},
|
|
94
|
+
};
|
|
95
|
+
fs.writeFileSync(consumerPkgPath, JSON.stringify(pkg, null, 2) + '\n');
|
|
96
|
+
console.log(`\x1b[32m✓ Created package.json with 0xray dependency\x1b[0m`);
|
|
97
|
+
}
|
|
83
98
|
if (fs.existsSync(opencodeDest) && !options.force) {
|
|
84
99
|
console.log('[Opencode] .opencode/ directory already exists.');
|
|
85
100
|
console.log('Use --force to reinstall.');
|
|
@@ -87,6 +102,26 @@ async function installForOpencode(options = {}) {
|
|
|
87
102
|
}
|
|
88
103
|
copyDir(opencodeSource, opencodeDest);
|
|
89
104
|
frameworkLogger.log('opencode-integration', 'opencode-copied', 'info', { destination: opencodeDest });
|
|
105
|
+
// Copy plugin from dist/ to .opencode/plugin/
|
|
106
|
+
const pluginSource = path.join(__dirname, '..', '..', '..', 'dist', 'plugin', 'xray-codex-injection.js');
|
|
107
|
+
const pluginDest = path.join(opencodeDest, 'plugin', 'xray-codex-injection.js');
|
|
108
|
+
if (fs.existsSync(pluginSource)) {
|
|
109
|
+
const pluginDestDir = path.dirname(pluginDest);
|
|
110
|
+
if (!fs.existsSync(pluginDestDir))
|
|
111
|
+
fs.mkdirSync(pluginDestDir, { recursive: true });
|
|
112
|
+
fs.copyFileSync(pluginSource, pluginDest);
|
|
113
|
+
console.log(`\x1b[32m✓ Copied plugin to .opencode/plugin/\x1b[0m`);
|
|
114
|
+
}
|
|
115
|
+
else {
|
|
116
|
+
console.log('ℹ️ Plugin source not found (build may be needed)');
|
|
117
|
+
}
|
|
118
|
+
// Sync builtin skills to .opencode/skills/
|
|
119
|
+
const opencodeSkillsDir = path.join(opencodeDest, 'skills');
|
|
120
|
+
const skillsCopied = syncBuiltinSkills(opencodeSkillsDir);
|
|
121
|
+
if (skillsCopied > 0) {
|
|
122
|
+
console.log(`\x1b[32m✓ Synced ${skillsCopied} builtin skills to .opencode/skills/\x1b[0m`);
|
|
123
|
+
}
|
|
124
|
+
frameworkLogger.log('opencode-integration', 'skills-synced', 'info', { count: skillsCopied });
|
|
90
125
|
console.log(`\x1b[32m✓ Copied OpenCode config to .opencode/\x1b[0m`);
|
|
91
126
|
console.log('\n✅ 0xRay OpenCode plugin installed!');
|
|
92
127
|
console.log('Restart OpenCode or run `opencode` to load the plugin.');
|
|
@@ -1,8 +1,9 @@
|
|
|
1
|
-
import { existsSync, readdirSync, readFileSync, mkdirSync, writeFileSync, cpSync, rmSync, statSync, unlinkSync } from "fs";
|
|
1
|
+
import { existsSync, readdirSync, readFileSync, mkdirSync, writeFileSync, cpSync, rmSync, statSync, unlinkSync, copyFileSync } from "fs";
|
|
2
2
|
import { join, basename, dirname } from "path";
|
|
3
|
+
import { fileURLToPath } from "url";
|
|
3
4
|
import { execSync } from "child_process";
|
|
4
5
|
function getLocalRegistryPath() {
|
|
5
|
-
return join(process.cwd(), ".
|
|
6
|
+
return join(process.cwd(), ".xray", "skill-registry.json");
|
|
6
7
|
}
|
|
7
8
|
function getBundledRegistry() {
|
|
8
9
|
const paths = [
|
|
@@ -479,3 +480,39 @@ export async function skillRegistryCommand(action, args) {
|
|
|
479
480
|
console.log(` Unknown action: ${action}`);
|
|
480
481
|
console.log(" Usage: npx 0xray skill:registry [list|add|remove]");
|
|
481
482
|
}
|
|
483
|
+
// ── Cross-platform builtin skill sync ────────────────────────────────
|
|
484
|
+
// Each platform's install command calls this to copy framework skills.
|
|
485
|
+
export function syncBuiltinSkills(targetSkillsDir, packageRoot) {
|
|
486
|
+
const root = packageRoot ?? join(dirname(fileURLToPath(import.meta.url)), "..", "..", "..");
|
|
487
|
+
const candidateDirs = [
|
|
488
|
+
join(root, "dist", "skills"),
|
|
489
|
+
join(root, "src", "skills"),
|
|
490
|
+
];
|
|
491
|
+
const sourceDir = candidateDirs.find(existsSync);
|
|
492
|
+
if (!sourceDir)
|
|
493
|
+
return 0;
|
|
494
|
+
let copied = 0;
|
|
495
|
+
try {
|
|
496
|
+
if (!existsSync(targetSkillsDir))
|
|
497
|
+
mkdirSync(targetSkillsDir, { recursive: true });
|
|
498
|
+
for (const entry of readdirSync(sourceDir, { withFileTypes: true })) {
|
|
499
|
+
if (!entry.isDirectory())
|
|
500
|
+
continue;
|
|
501
|
+
const skillMd = join(sourceDir, entry.name, "SKILL.md");
|
|
502
|
+
if (!existsSync(skillMd))
|
|
503
|
+
continue;
|
|
504
|
+
const destMd = join(targetSkillsDir, entry.name, "SKILL.md");
|
|
505
|
+
const destDir = dirname(destMd);
|
|
506
|
+
if (!existsSync(destDir))
|
|
507
|
+
mkdirSync(destDir, { recursive: true });
|
|
508
|
+
if (existsSync(destMd) && statSync(skillMd).mtime <= statSync(destMd).mtime)
|
|
509
|
+
continue;
|
|
510
|
+
copyFileSync(skillMd, destMd);
|
|
511
|
+
copied++;
|
|
512
|
+
}
|
|
513
|
+
}
|
|
514
|
+
catch {
|
|
515
|
+
// best-effort
|
|
516
|
+
}
|
|
517
|
+
return copied;
|
|
518
|
+
}
|
|
@@ -13,6 +13,7 @@
|
|
|
13
13
|
import { readdirSync, existsSync, readFileSync } from "fs";
|
|
14
14
|
import { join } from "path";
|
|
15
15
|
import { getConfigDir } from "../../core/config-paths.js";
|
|
16
|
+
import { featuresConfigLoader } from "../../core/features-config.js";
|
|
16
17
|
function getSkillsList(cwd) {
|
|
17
18
|
const skills = [];
|
|
18
19
|
const configDir = getConfigDir(cwd);
|
|
@@ -26,6 +27,11 @@ function getSkillsList(cwd) {
|
|
|
26
27
|
const skillDirs = readdirSync(skillsPath).filter((f) => existsSync(join(skillsPath, f, "SKILL.md")));
|
|
27
28
|
skills.push(...skillDirs);
|
|
28
29
|
}
|
|
30
|
+
const opencodeSkillsPath = join(cwd, ".opencode", "skills");
|
|
31
|
+
if (existsSync(opencodeSkillsPath)) {
|
|
32
|
+
const skillDirs = readdirSync(opencodeSkillsPath).filter((f) => existsSync(join(opencodeSkillsPath, f, "SKILL.md")));
|
|
33
|
+
skills.push(...skillDirs);
|
|
34
|
+
}
|
|
29
35
|
const uniqueSkills = [...new Set(skills)];
|
|
30
36
|
return { count: uniqueSkills.length, names: uniqueSkills.sort() };
|
|
31
37
|
}
|
|
@@ -51,21 +57,18 @@ function getAgentsList(cwd) {
|
|
|
51
57
|
}
|
|
52
58
|
catch { /* ignore */ }
|
|
53
59
|
}
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
const
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
}
|
|
64
|
-
});
|
|
65
|
-
}
|
|
60
|
+
try {
|
|
61
|
+
const features = featuresConfigLoader.loadConfig();
|
|
62
|
+
if (features.agent_management?.disabled_agents) {
|
|
63
|
+
const disabled = features.agent_management.disabled_agents;
|
|
64
|
+
agentsFromSkills.forEach((agent) => {
|
|
65
|
+
if (!disabled.includes(agent) && !configuredAgents.includes(agent)) {
|
|
66
|
+
configuredAgents.push(agent);
|
|
67
|
+
}
|
|
68
|
+
});
|
|
66
69
|
}
|
|
67
|
-
catch { /* ignore */ }
|
|
68
70
|
}
|
|
71
|
+
catch { /* ignore */ }
|
|
69
72
|
if (configuredAgents.length === 0) {
|
|
70
73
|
configuredAgents.push(...agentsFromSkills);
|
|
71
74
|
}
|
|
@@ -16,8 +16,8 @@ import { execSync } from "child_process";
|
|
|
16
16
|
const STORY_TYPES = ["reflection", "saga", "journey", "narrative"];
|
|
17
17
|
function loadConfig(cwd) {
|
|
18
18
|
const candidates = [
|
|
19
|
-
join(cwd, ".opencode", "strray", "features.json"),
|
|
20
19
|
join(cwd, ".xray", "features.json"),
|
|
20
|
+
join(cwd, ".opencode", "xray", "features.json"),
|
|
21
21
|
];
|
|
22
22
|
for (const path of candidates) {
|
|
23
23
|
if (existsSync(path)) {
|
package/dist/cli/index.js
CHANGED
|
@@ -381,15 +381,10 @@ program
|
|
|
381
381
|
// Dynamic import to avoid loading analytics module unless needed
|
|
382
382
|
const { SimplePatternAnalyzer } = await import("../analytics/simple-pattern-analyzer.js");
|
|
383
383
|
// Get default limit from features.json
|
|
384
|
-
const fs = await import("fs");
|
|
385
|
-
const path = await import("path");
|
|
386
384
|
let defaultLimit = 500;
|
|
387
385
|
try {
|
|
388
|
-
const
|
|
389
|
-
|
|
390
|
-
const features = JSON.parse(fs.readFileSync(featuresPath, "utf-8"));
|
|
391
|
-
defaultLimit = features.analytics?.default_limit || 500;
|
|
392
|
-
}
|
|
386
|
+
const { featuresConfigLoader } = await import("../core/features-config.js");
|
|
387
|
+
defaultLimit = featuresConfigLoader.loadConfig().analytics?.default_limit ?? 500;
|
|
393
388
|
}
|
|
394
389
|
catch { /* use default */ }
|
|
395
390
|
const analyzer = new SimplePatternAnalyzer();
|
|
@@ -453,14 +448,14 @@ program
|
|
|
453
448
|
// Check configuration - check for opencode.json or .xray/ (min compat .xray/ fallback for prior 0xRay consumer runtime per Scope Rule; plain xray primary)
|
|
454
449
|
const cwd = process.cwd();
|
|
455
450
|
const opencodeConfigPath = path.join(cwd, "opencode.json");
|
|
456
|
-
const
|
|
451
|
+
const xrayDir = getConfigDir(cwd);
|
|
457
452
|
const opencodeExists = fs.existsSync(opencodeConfigPath);
|
|
458
|
-
const configDirExists = fs.existsSync(
|
|
453
|
+
const configDirExists = fs.existsSync(xrayDir);
|
|
459
454
|
if (opencodeExists) {
|
|
460
455
|
console.log("✅ opencode configuration found");
|
|
461
456
|
}
|
|
462
457
|
else if (configDirExists) {
|
|
463
|
-
console.log(`✅ Configuration directory found: ${
|
|
458
|
+
console.log(`✅ Configuration directory found: ${xrayDir}`);
|
|
464
459
|
}
|
|
465
460
|
else {
|
|
466
461
|
console.log("ℹ️ No opencode.json or config directory found (run: npx xray fix to create)");
|
|
@@ -865,15 +860,20 @@ program
|
|
|
865
860
|
program
|
|
866
861
|
.command('mcp')
|
|
867
862
|
.description('Run an MCP server subprocess (used by Grok/OpenCode .mcp.json)')
|
|
868
|
-
.argument('<server>', 'Server name: governance
|
|
863
|
+
.argument('<server>', 'Server name: governance, skills, researcher, code-review, architect-tools, enforcer, orchestrator')
|
|
869
864
|
.action(async (server) => {
|
|
870
865
|
const serverMap = {
|
|
871
866
|
governance: 'dist/mcps/governance.server.js',
|
|
872
867
|
skills: 'dist/mcps/knowledge-skills/skill-invocation.server.js',
|
|
868
|
+
researcher: 'dist/mcps/researcher.server.js',
|
|
869
|
+
'code-review': 'dist/mcps/knowledge-skills/code-review.server.js',
|
|
870
|
+
'architect-tools': 'dist/mcps/architect-tools.server.js',
|
|
871
|
+
enforcer: 'dist/mcps/enforcer-tools.server.js',
|
|
872
|
+
orchestrator: 'dist/mcps/orchestrator.server.js',
|
|
873
873
|
};
|
|
874
874
|
const relPath = serverMap[server];
|
|
875
875
|
if (!relPath) {
|
|
876
|
-
console.error(`Unknown MCP server: ${server}. Use: governance, skills`);
|
|
876
|
+
console.error(`Unknown MCP server: ${server}. Use: governance, skills, researcher, code-review, architect-tools, enforcer, orchestrator`);
|
|
877
877
|
process.exit(1);
|
|
878
878
|
}
|
|
879
879
|
const serverPath = resolve(join(packageRoot, relPath));
|
|
@@ -883,7 +883,8 @@ program
|
|
|
883
883
|
}
|
|
884
884
|
const env = { ...process.env };
|
|
885
885
|
if (server === 'governance') {
|
|
886
|
-
env.
|
|
886
|
+
env.XRAY_FORCE_MCP_GOVERNANCE = 'true';
|
|
887
|
+
env.XRAY_FORCE_MCP_GOVERNANCE = 'true';
|
|
887
888
|
}
|
|
888
889
|
const child = spawn(process.execPath, [serverPath], { stdio: 'inherit', env });
|
|
889
890
|
child.on('exit', (code) => process.exit(code ?? 0));
|
|
@@ -9,11 +9,10 @@
|
|
|
9
9
|
* - Test results
|
|
10
10
|
*
|
|
11
11
|
* Enable/Disable via:
|
|
12
|
-
*
|
|
13
|
-
*
|
|
12
|
+
* XRAY_ACTIVITY_LOGGING=true (enable)
|
|
13
|
+
* XRAY_ACTIVITY_LOGGING=false (disable, default)
|
|
14
14
|
*
|
|
15
15
|
* @module core/activity-logger
|
|
16
|
-
* @version 1.0.0
|
|
17
16
|
*/
|
|
18
17
|
import * as fs from "fs";
|
|
19
18
|
import * as path from "path";
|
|
@@ -21,7 +20,7 @@ import * as zlib from "zlib";
|
|
|
21
20
|
import { frameworkLogger } from "./framework-logger.js";
|
|
22
21
|
const MAX_LOG_SIZE_BYTES = 5 * 1024 * 1024; // 5MB before rotation
|
|
23
22
|
// Global state
|
|
24
|
-
let activityLoggerEnabled = process.env.
|
|
23
|
+
let activityLoggerEnabled = process.env.XRAY_ACTIVITY_LOGGING !== "false";
|
|
25
24
|
let activityLogPath;
|
|
26
25
|
let sessionId;
|
|
27
26
|
let sessionStartTime;
|
|
@@ -184,7 +183,7 @@ export function logActivity(category, level, action, message, details, options)
|
|
|
184
183
|
// Write to report JSON
|
|
185
184
|
writeToReportFile(record);
|
|
186
185
|
// Console output for debug mode
|
|
187
|
-
if (process.env.
|
|
186
|
+
if (process.env.XRAY_ACTIVITY_CONSOLE === "true") {
|
|
188
187
|
frameworkLogger.log("activity-logger", "console-output", "info", { message: `[${record.timestamp}] [${record.category}] ${level.toUpperCase()}: ${message}`, details: details || "" });
|
|
189
188
|
}
|
|
190
189
|
}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Agent Spawn Gate — Singleton (provider-agnostic)
|
|
3
3
|
*
|
|
4
|
-
* CENTRALIZED CONTROL for all agent process spawning across
|
|
4
|
+
* CENTRALIZED CONTROL for all agent process spawning across 0xRay
|
|
5
5
|
* (OpenCode, Hermes, or any other MCP-compatible host).
|
|
6
6
|
*
|
|
7
7
|
* Purpose:
|
|
@@ -1,15 +1,13 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* Boot Orchestrator (min documented consumer runtime compat shim from prior 0xRay releases; primary Xray
|
|
2
|
+
* Boot Orchestrator (min documented consumer runtime compat shim from prior 0xRay releases; primary Xray paths + .xray fallbacks only; 1-line per Scope Rule).
|
|
3
3
|
*/
|
|
4
4
|
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
|
-
const AGENTS_BASE_PATH = process.env.XRAY_AGENTS_PATH || process.env.
|
|
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";
|
|
14
12
|
import { createSessionCleanupManager } from "../session/session-cleanup-manager.js";
|
|
15
13
|
import { createSessionMonitor } from "../session/session-monitor.js";
|
|
@@ -20,7 +18,7 @@ import { frameworkLogger } from "../core/framework-logger.js";
|
|
|
20
18
|
import { featuresConfigLoader } from "../core/features-config.js";
|
|
21
19
|
import { memoryMonitor } from "../monitoring/memory-monitor.js";
|
|
22
20
|
import { advancedProfiler } from "../monitoring/advanced-profiler.js";
|
|
23
|
-
import {
|
|
21
|
+
import { xrayConfigLoader } from "./config-loader.js";
|
|
24
22
|
import { PluginRegistry } from "../integrations/plugins/index.js";
|
|
25
23
|
import { PluginServerConfigRegistry } from "../mcps/config/index.js";
|
|
26
24
|
import { initializeGovernanceIntegration } from "../integrations/governance/index.js";
|
|
@@ -47,7 +45,7 @@ function setupGracefulShutdown() {
|
|
|
47
45
|
}
|
|
48
46
|
catch (error) {
|
|
49
47
|
// Suppress error output in CLI mode to avoid breaking interface
|
|
50
|
-
if (process.env.
|
|
48
|
+
if (process.env.XRAY_CLI_MODE !== "true" &&
|
|
51
49
|
process.env.OPENCODE_CLI !== "true") {
|
|
52
50
|
frameworkLogger.log("boot-orchestrator", "shutdown-error", "error", { error, message: "Error during graceful shutdown" });
|
|
53
51
|
}
|
|
@@ -69,7 +67,7 @@ function setupGracefulShutdown() {
|
|
|
69
67
|
// Handle uncaught exceptions that might cause JSON parsing errors
|
|
70
68
|
process.on("uncaughtException", (error) => {
|
|
71
69
|
// Suppress error output in CLI mode to avoid breaking interface
|
|
72
|
-
if (process.env.
|
|
70
|
+
if (process.env.XRAY_CLI_MODE !== "true" &&
|
|
73
71
|
process.env.OPENCODE_CLI !== "true") {
|
|
74
72
|
frameworkLogger.log("boot-orchestrator", "uncaught-exception", "error", { error, message: "Uncaught Exception" });
|
|
75
73
|
}
|
|
@@ -79,7 +77,7 @@ function setupGracefulShutdown() {
|
|
|
79
77
|
});
|
|
80
78
|
process.on("unhandledRejection", (reason, promise) => {
|
|
81
79
|
// Suppress error output in CLI mode to avoid breaking interface
|
|
82
|
-
if (process.env.
|
|
80
|
+
if (process.env.XRAY_CLI_MODE !== "true" &&
|
|
83
81
|
process.env.OPENCODE_CLI !== "true") {
|
|
84
82
|
frameworkLogger.log("boot-orchestrator", "unhandled-rejection", "error", { promise, reason, message: "Unhandled Rejection" });
|
|
85
83
|
}
|
|
@@ -115,7 +113,7 @@ export class BootOrchestrator {
|
|
|
115
113
|
*/
|
|
116
114
|
async initializeDelegationSystem() {
|
|
117
115
|
try {
|
|
118
|
-
const agentDelegator = createAgentDelegator(this.stateManager,
|
|
116
|
+
const agentDelegator = createAgentDelegator(this.stateManager, xrayConfigLoader);
|
|
119
117
|
this.stateManager.set("delegation:agent_delegator", agentDelegator);
|
|
120
118
|
const sessionCoordinator = createSessionCoordinator(this.stateManager);
|
|
121
119
|
this.stateManager.set("delegation:session_coordinator", sessionCoordinator);
|
|
@@ -130,19 +128,10 @@ export class BootOrchestrator {
|
|
|
130
128
|
}
|
|
131
129
|
loadProcessorsConfig() {
|
|
132
130
|
try {
|
|
133
|
-
|
|
134
|
-
path.join(process.cwd(), ".xray", "features.json"),
|
|
135
|
-
path.join(process.cwd(), ".opencode", "xray", "features.json"),
|
|
136
|
-
];
|
|
137
|
-
for (const configPath of configPaths) {
|
|
138
|
-
if (existsSync(configPath)) {
|
|
139
|
-
const config = JSON.parse(readFileSync(configPath, "utf-8"));
|
|
140
|
-
return config.processors || null;
|
|
141
|
-
}
|
|
142
|
-
}
|
|
131
|
+
return featuresConfigLoader.loadConfig().processors ?? null;
|
|
143
132
|
}
|
|
144
133
|
catch {
|
|
145
|
-
//
|
|
134
|
+
// use defaults
|
|
146
135
|
}
|
|
147
136
|
return null;
|
|
148
137
|
}
|
|
@@ -189,7 +178,7 @@ export class BootOrchestrator {
|
|
|
189
178
|
});
|
|
190
179
|
return false;
|
|
191
180
|
}
|
|
192
|
-
const orchestratorInstance = orchestratorModule.
|
|
181
|
+
const orchestratorInstance = orchestratorModule.xrayOrchestrator;
|
|
193
182
|
if (!orchestratorInstance) {
|
|
194
183
|
frameworkLogger.log("boot-orchestrator", "orchestrator-not-found", "error", { message: "Orchestrator instance not found in module" });
|
|
195
184
|
return false;
|
|
@@ -596,7 +585,7 @@ export class BootOrchestrator {
|
|
|
596
585
|
};
|
|
597
586
|
try {
|
|
598
587
|
frameworkLogger.log("boot-orchestrator", "loading xray configuration", "info", { jobId });
|
|
599
|
-
// Consumer runtime compat shim from prior 0xRay releases (1-line min per Scope Rule; primary xray paths +
|
|
588
|
+
// Consumer runtime compat shim from prior 0xRay releases (1-line min per Scope Rule; primary xray paths + .xray fallbacks)
|
|
600
589
|
await this.loadXrayConfiguration(jobId);
|
|
601
590
|
frameworkLogger.log("boot-orchestrator", "xray configuration loaded", "success", { jobId });
|
|
602
591
|
// Phase 1: Initialize core systems
|
|
@@ -727,12 +716,12 @@ export class BootOrchestrator {
|
|
|
727
716
|
this.stateManager.set("boot:errors", result.errors);
|
|
728
717
|
return result;
|
|
729
718
|
}
|
|
730
|
-
// Consumer runtime compat shim from prior 0xRay releases (1-line min per Scope Rule; primary xray paths +
|
|
719
|
+
// Consumer runtime compat shim from prior 0xRay releases (1-line min per Scope Rule; primary xray paths + .xray fallbacks)
|
|
731
720
|
async loadXrayConfiguration(jobId) {
|
|
732
721
|
try {
|
|
733
|
-
// Consumer runtime compat shim from prior 0xRay releases (1-line min per Scope Rule; primary xray paths +
|
|
722
|
+
// Consumer runtime compat shim from prior 0xRay releases (1-line min per Scope Rule; primary xray paths + .xray fallbacks)
|
|
734
723
|
const xrayConfig = {
|
|
735
|
-
version: "1.
|
|
724
|
+
version: "3.1.0",
|
|
736
725
|
codex_enabled: true,
|
|
737
726
|
codex_version: "v1.7.5",
|
|
738
727
|
codex_terms: [
|
package/dist/core/bridge.mjs
CHANGED
|
@@ -33,7 +33,6 @@
|
|
|
33
33
|
* node bridge.mjs --http --port 18431 --cwd /path
|
|
34
34
|
* curl -X POST http://localhost:18431 -d '{"command":"get-codex-prompt"}'
|
|
35
35
|
*
|
|
36
|
-
* @version 1.0.0
|
|
37
36
|
* @since 2026-03-28
|
|
38
37
|
*/
|
|
39
38
|
|
|
@@ -69,7 +68,7 @@ let frameworkLoadAttempted = false;
|
|
|
69
68
|
// ============================================================================
|
|
70
69
|
|
|
71
70
|
function findProjectRoot() {
|
|
72
|
-
const envHome = process.env.
|
|
71
|
+
const envHome = process.env.XRAY_HOME;
|
|
73
72
|
if (envHome && existsSync(join(envHome, "package.json"))) return envHome;
|
|
74
73
|
|
|
75
74
|
const candidates = [
|
|
@@ -219,7 +218,7 @@ async function handleHealth(input) {
|
|
|
219
218
|
*/
|
|
220
219
|
/** Codex candidate paths — single source of truth for both loadCodexFromFs and handleGetConfig */
|
|
221
220
|
function getCodexCandidates(projectRoot) {
|
|
222
|
-
const envDir = process.env.
|
|
221
|
+
const envDir = process.env.XRAY_CONFIG_DIR;
|
|
223
222
|
const candidates = [];
|
|
224
223
|
if (envDir) candidates.push(join(projectRoot, envDir, "codex.json"));
|
|
225
224
|
candidates.push(join(projectRoot, ".xray", "codex.json"));
|
|
@@ -747,8 +746,8 @@ function startHttpServer(port, projectRoot) {
|
|
|
747
746
|
|
|
748
747
|
return new Promise((resolve, reject) => {
|
|
749
748
|
const server = createServer(async (req, res) => {
|
|
750
|
-
// CORS headers (wildcard — restrict via
|
|
751
|
-
const corsOrigin = process.env.
|
|
749
|
+
// CORS headers (wildcard — restrict via XRAY_HTTP_CORS_ORIGIN env var in production)
|
|
750
|
+
const corsOrigin = process.env.XRAY_HTTP_CORS_ORIGIN || "*";
|
|
752
751
|
res.setHeader("Content-Type", "application/json");
|
|
753
752
|
res.setHeader("Access-Control-Allow-Origin", corsOrigin);
|
|
754
753
|
res.setHeader("Access-Control-Allow-Methods", "GET, POST, OPTIONS");
|
|
@@ -13,7 +13,6 @@
|
|
|
13
13
|
* const prompt = formatCodexPrompt({ projectRoot: '/path' });
|
|
14
14
|
* // Append to system prompt
|
|
15
15
|
*
|
|
16
|
-
* @version 1.0.0
|
|
17
16
|
* @since 2026-03-28
|
|
18
17
|
*/
|
|
19
18
|
import { readFileSync, existsSync } from "fs";
|
|
@@ -84,13 +83,12 @@ export const BUILTIN_CODEX = {
|
|
|
84
83
|
*/
|
|
85
84
|
export function findCodexPath(projectRoot) {
|
|
86
85
|
const root = projectRoot || process.cwd();
|
|
87
|
-
const envDir = process.env.
|
|
86
|
+
const envDir = process.env.XRAY_CONFIG_DIR;
|
|
88
87
|
const candidates = [];
|
|
89
88
|
if (envDir) {
|
|
90
89
|
candidates.push(resolve(root, envDir, "codex.json"));
|
|
91
90
|
}
|
|
92
91
|
candidates.push(join(root, ".xray", "codex.json"));
|
|
93
|
-
candidates.push(join(root, ".opencode", "xray", "codex.json"));
|
|
94
92
|
// Additional fallback locations (for standalone usage)
|
|
95
93
|
candidates.push(join(root, "codex.json"));
|
|
96
94
|
candidates.push(join(root, "src", "codex.json"));
|
|
@@ -4,7 +4,6 @@
|
|
|
4
4
|
* Injects Universal Development Codex v1.2.0 context into agent operations.
|
|
5
5
|
* Follows production-tested pattern from rules-injector.
|
|
6
6
|
*
|
|
7
|
-
* @version 1.0.0
|
|
8
7
|
* @since 2026-01-06
|
|
9
8
|
*/
|
|
10
9
|
import * as fs from "fs";
|
|
@@ -38,7 +37,7 @@ async function initializeImports() {
|
|
|
38
37
|
const codexCache = new Map();
|
|
39
38
|
/**
|
|
40
39
|
* Codex file locations resolved through the standard priority chain.
|
|
41
|
-
* Uses config-paths.ts resolver so
|
|
40
|
+
* Uses config-paths.ts resolver so XRAY_CONFIG_DIR and .xray/ work.
|
|
42
41
|
*/
|
|
43
42
|
function getCodexFileLocations(projectRoot) {
|
|
44
43
|
const root = projectRoot || process.cwd();
|
|
@@ -170,7 +169,7 @@ export function createXrayCodexInjectorHook() {
|
|
|
170
169
|
});
|
|
171
170
|
// Skip codex enforcement during testing
|
|
172
171
|
if (process.env.NODE_ENV === "test" ||
|
|
173
|
-
process.env.
|
|
172
|
+
process.env.XRAY_TEST_MODE === "true") {
|
|
174
173
|
await frameworkLogger.log("codex-injector", "skipping enforcement in test mode", "info", { jobId });
|
|
175
174
|
return;
|
|
176
175
|
}
|
|
@@ -263,7 +262,7 @@ export function createXrayCodexInjectorHook() {
|
|
|
263
262
|
frameworkLogger.log("codex-injector", "tool.execute.after hook triggered", "info", { jobId, tool: input.tool, sessionId });
|
|
264
263
|
// Skip codex enforcement during testing
|
|
265
264
|
if (process.env.NODE_ENV === "test" ||
|
|
266
|
-
process.env.
|
|
265
|
+
process.env.XRAY_TEST_MODE === "true") {
|
|
267
266
|
frameworkLogger.log("codex-injector", "skipping injection in test mode", "info", { jobId });
|
|
268
267
|
return output;
|
|
269
268
|
}
|