0xray 2.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.opencode/agents/api-design.yml +31 -0
- package/.opencode/agents/architect.yml +15 -0
- package/.opencode/agents/architecture-patterns.yml +14 -0
- package/.opencode/agents/auto-format.yml +14 -0
- package/.opencode/agents/backend-engineer.yml +12 -0
- package/.opencode/agents/boot-orchestrator.yml +14 -0
- package/.opencode/agents/bug-triage-specialist.yml +15 -0
- package/.opencode/agents/code-analyzer.yml +12 -0
- package/.opencode/agents/code-reviewer.yml +14 -0
- package/.opencode/agents/content-creator.yml +12 -0
- package/.opencode/agents/database-engineer.yml +12 -0
- package/.opencode/agents/devops-engineer.yml +12 -0
- package/.opencode/agents/framework-compliance-audit.yml +14 -0
- package/.opencode/agents/frontend-engineer.yml +12 -0
- package/.opencode/agents/frontend-ui-ux-engineer.yml +12 -0
- package/.opencode/agents/git-workflow.yml +15 -0
- package/.opencode/agents/growth-strategist.yml +12 -0
- package/.opencode/agents/hermes-agent.yml +12 -0
- package/.opencode/agents/inference-improve.yml +12 -0
- package/.opencode/agents/lint.yml +14 -0
- package/.opencode/agents/log-monitor.yml +12 -0
- package/.opencode/agents/mobile-developer.yml +12 -0
- package/.opencode/agents/model-health-check.yml +12 -0
- package/.opencode/agents/multimodal-looker.yml +12 -0
- package/.opencode/agents/performance-analysis.yml +12 -0
- package/.opencode/agents/performance-engineer.yml +12 -0
- package/.opencode/agents/performance-optimization.yml +12 -0
- package/.opencode/agents/processor-pipeline.yml +14 -0
- package/.opencode/agents/project-analysis.yml +12 -0
- package/.opencode/agents/refactorer.yml +12 -0
- package/.opencode/agents/researcher.yml +12 -0
- package/.opencode/agents/security-auditor.yml +12 -0
- package/.opencode/agents/security-scan.yml +12 -0
- package/.opencode/agents/seo-consultant.yml +12 -0
- package/.opencode/agents/session-management.yml +12 -0
- package/.opencode/agents/state-manager.yml +12 -0
- package/.opencode/agents/storyteller.yml +12 -0
- package/.opencode/agents/strategist.yml +12 -0
- package/.opencode/agents/tech-writer.yml +12 -0
- package/.opencode/agents/testing-best-practices.yml +12 -0
- package/.opencode/agents/testing-lead.yml +12 -0
- package/.opencode/agents/ui-ux-design.yml +12 -0
- package/.opencode/codex.codex +8 -0
- package/.opencode/commands/auto-format.md +99 -0
- package/.opencode/commands/auto-summary-capture.md +90 -0
- package/.opencode/commands/dependency-audit.md +184 -0
- package/.opencode/commands/enforcer-daily-scan.md +137 -0
- package/.opencode/commands/framework-compliance-audit.md +205 -0
- package/.opencode/commands/interactive-validator.md +75 -0
- package/.opencode/commands/job-summary-logger.md +68 -0
- package/.opencode/commands/lint.md +11 -0
- package/.opencode/commands/mode-switch.md +95 -0
- package/.opencode/commands/model-health-check.md +186 -0
- package/.opencode/commands/performance-analysis.md +144 -0
- package/.opencode/commands/pre-commit-introspection.md +185 -0
- package/.opencode/commands/pre-commit-introspection.sh +133 -0
- package/.opencode/commands/security-scan.md +157 -0
- package/.opencode/commands/sisyphus-validation.md +128 -0
- package/.opencode/commands/summary-logger.md +83 -0
- package/.opencode/enforcer-config.json +285 -0
- package/.opencode/hooks/hook-metrics.json +380 -0
- package/.opencode/hooks/post-commit +114 -0
- package/.opencode/hooks/post-push +34 -0
- package/.opencode/init.sh +151 -0
- package/.opencode/skills/api-design/SKILL.md +37 -0
- package/.opencode/skills/architect-tools/SKILL.md +37 -0
- package/.opencode/skills/architecture-patterns/SKILL.md +37 -0
- package/.opencode/skills/auto-format/SKILL.md +37 -0
- package/.opencode/skills/backend-engineer/SKILL.md +49 -0
- package/.opencode/skills/boot-orchestrator/SKILL.md +37 -0
- package/.opencode/skills/bug-triage/SKILL.md +43 -0
- package/.opencode/skills/code-analyzer/SKILL.md +45 -0
- package/.opencode/skills/code-review/SKILL.md +52 -0
- package/.opencode/skills/content-creator/SKILL.md +38 -0
- package/.opencode/skills/database-engineer/SKILL.md +46 -0
- package/.opencode/skills/devops-engineer/SKILL.md +49 -0
- package/.opencode/skills/enforcer/SKILL.md +37 -0
- package/.opencode/skills/framework-compliance-audit/SKILL.md +37 -0
- package/.opencode/skills/frontend-engineer/SKILL.md +49 -0
- package/.opencode/skills/frontend-ui-ux-engineer/SKILL.md +41 -0
- package/.opencode/skills/git-workflow/SKILL.md +37 -0
- package/.opencode/skills/growth-strategist/SKILL.md +48 -0
- package/.opencode/skills/hermes-agent/SKILL.md +212 -0
- package/.opencode/skills/inference-improve/SKILL.md +97 -0
- package/.opencode/skills/lint/SKILL.md +37 -0
- package/.opencode/skills/log-monitor/SKILL.md +44 -0
- package/.opencode/skills/mobile-developer/SKILL.md +42 -0
- package/.opencode/skills/model-health-check/SKILL.md +37 -0
- package/.opencode/skills/multimodal-looker/SKILL.md +45 -0
- package/.opencode/skills/orchestrator/SKILL.md +37 -0
- package/.opencode/skills/performance-analysis/SKILL.md +37 -0
- package/.opencode/skills/performance-engineer/SKILL.md +41 -0
- package/.opencode/skills/performance-optimization/SKILL.md +37 -0
- package/.opencode/skills/processor-pipeline/SKILL.md +37 -0
- package/.opencode/skills/project-analysis/SKILL.md +42 -0
- package/.opencode/skills/refactoring-strategies/SKILL.md +37 -0
- package/.opencode/skills/registry.json +66 -0
- package/.opencode/skills/researcher/SKILL.md +37 -0
- package/.opencode/skills/security-audit/SKILL.md +47 -0
- package/.opencode/skills/security-scan/SKILL.md +37 -0
- package/.opencode/skills/seo-consultant/SKILL.md +43 -0
- package/.opencode/skills/session-management/SKILL.md +36 -0
- package/.opencode/skills/state-manager/SKILL.md +37 -0
- package/.opencode/skills/storyteller/SKILL.md +130 -0
- package/.opencode/skills/strategist/SKILL.md +32 -0
- package/.opencode/skills/tech-writer/SKILL.md +37 -0
- package/.opencode/skills/testing-best-practices/SKILL.md +37 -0
- package/.opencode/skills/testing-strategy/SKILL.md +43 -0
- package/.opencode/skills/ui-ux-design/SKILL.md +603 -0
- package/.opencode/workflows/post-deployment-audit.yml +123 -0
- package/AGENTS.md +110 -0
- package/LICENSE +21 -0
- package/README.md +131 -0
- package/dist/AGENTS.md +110 -0
- package/dist/CHANGELOG.md +2182 -0
- package/dist/LICENSE +21 -0
- package/dist/README.md +131 -0
- package/dist/agents/architect.js +56 -0
- package/dist/agents/backend-engineer.js +81 -0
- package/dist/agents/bug-triage-specialist.js +74 -0
- package/dist/agents/code-analyzer.js +150 -0
- package/dist/agents/code-reviewer.js +69 -0
- package/dist/agents/content-creator.js +72 -0
- package/dist/agents/database-engineer.js +76 -0
- package/dist/agents/devops-engineer.js +84 -0
- package/dist/agents/frontend-engineer.js +78 -0
- package/dist/agents/frontend-ui-ux-engineer.js +64 -0
- package/dist/agents/growth-strategist.js +111 -0
- package/dist/agents/index.js +45 -0
- package/dist/agents/librarian-agents-updater.js +333 -0
- package/dist/agents/log-monitor.js +109 -0
- package/dist/agents/mobile-developer.js +102 -0
- package/dist/agents/multimodal-looker.js +93 -0
- package/dist/agents/performance-engineer.js +86 -0
- package/dist/agents/refactorer.js +80 -0
- package/dist/agents/registry.js +340 -0
- package/dist/agents/researcher.js +83 -0
- package/dist/agents/security-auditor.js +158 -0
- package/dist/agents/seo-consultant.js +53 -0
- package/dist/agents/strategist.js +47 -0
- package/dist/agents/tech-writer.js +84 -0
- package/dist/agents/testing-lead.js +95 -0
- package/dist/agents/types.js +1 -0
- package/dist/analytics/consent-manager.js +258 -0
- package/dist/analytics/emerging-pattern-detector.js +260 -0
- package/dist/analytics/pattern-learning-engine.js +278 -0
- package/dist/analytics/pattern-performance-tracker.js +336 -0
- package/dist/analytics/predictive-analytics.js +248 -0
- package/dist/analytics/prompt-pattern-analyzer.js +371 -0
- package/dist/analytics/routing-performance-analyzer.js +356 -0
- package/dist/analytics/routing-refiner.js +380 -0
- package/dist/analytics/simple-pattern-analyzer.js +297 -0
- package/dist/architect/architect-tools.js +437 -0
- package/dist/architect/architectural-integrity.js +78 -0
- package/dist/benchmark/performance-benchmark.js +372 -0
- package/dist/cli/commands/analytics-disable.js +72 -0
- package/dist/cli/commands/analytics-enable-action.js +82 -0
- package/dist/cli/commands/analytics-preview.js +106 -0
- package/dist/cli/commands/analytics-status.js +68 -0
- package/dist/cli/commands/antigravity-status.js +106 -0
- package/dist/cli/commands/archive-logs.js +161 -0
- package/dist/cli/commands/credible-init.js +82 -0
- package/dist/cli/commands/grok-install.js +16 -0
- package/dist/cli/commands/hermes-install.js +66 -0
- package/dist/cli/commands/mcp-install.js +253 -0
- package/dist/cli/commands/openclaw-install.js +44 -0
- package/dist/cli/commands/opencode-install.js +99 -0
- package/dist/cli/commands/plugin-commands.js +246 -0
- package/dist/cli/commands/publish-agent.js +184 -0
- package/dist/cli/commands/security-audit.js +219 -0
- package/dist/cli/commands/skill-install.js +481 -0
- package/dist/cli/commands/status.js +196 -0
- package/dist/cli/commands/storyteller.js +230 -0
- package/dist/cli/index.js +986 -0
- package/dist/cli/server.js +147 -0
- package/dist/config/default-agents.js +16 -0
- package/dist/core/activity-logger.js +260 -0
- package/dist/core/adaptive-kernel.js +192 -0
- package/dist/core/agent-spawn-gate.js +120 -0
- package/dist/core/boot-orchestrator.js +812 -0
- package/dist/core/bridge.mjs +945 -0
- package/dist/core/codex-formatter.js +220 -0
- package/dist/core/codex-injector.js +424 -0
- package/dist/core/config-loader.js +148 -0
- package/dist/core/config-paths.js +162 -0
- package/dist/core/context-loader.js +269 -0
- package/dist/core/context-validator.js +212 -0
- package/dist/core/features-config.js +457 -0
- package/dist/core/framework-logger.js +275 -0
- package/dist/core/index.js +6 -0
- package/dist/core/kernel-patterns.js +302 -0
- package/dist/core/logging-config.js +43 -0
- package/dist/core/model-router.js +175 -0
- package/dist/core/orchestrator.js +408 -0
- package/dist/core/system-prompt-generator.js +265 -0
- package/dist/core/trace-context.js +33 -0
- package/dist/core/xray-activation.js +134 -0
- package/dist/delegation/agent-delegator.js +769 -0
- package/dist/delegation/agent-expertise.js +156 -0
- package/dist/delegation/analytics/index.js +12 -0
- package/dist/delegation/analytics/learning-engine.js +277 -0
- package/dist/delegation/analytics/outcome-tracker.js +279 -0
- package/dist/delegation/analytics/routing-analytics.js +193 -0
- package/dist/delegation/ast-code-parser.js +878 -0
- package/dist/delegation/codebase-context-analyzer.js +1040 -0
- package/dist/delegation/complexity-analyzer.js +282 -0
- package/dist/delegation/complexity-core.js +219 -0
- package/dist/delegation/config/types.js +6 -0
- package/dist/delegation/dependency-graph-builder.js +409 -0
- package/dist/delegation/index.js +20 -0
- package/dist/delegation/metrics-aggregator.js +335 -0
- package/dist/delegation/session-coordinator.js +352 -0
- package/dist/delegation/strategy-selector.js +108 -0
- package/dist/delegation/voting-coordinator.js +375 -0
- package/dist/delegation/voting-types.js +10 -0
- package/dist/delegation/weighted-voting-aggregator.js +194 -0
- package/dist/enforcement/core/index.js +19 -0
- package/dist/enforcement/core/rule-executor.js +365 -0
- package/dist/enforcement/core/rule-hierarchy.js +259 -0
- package/dist/enforcement/core/rule-registry.js +240 -0
- package/dist/enforcement/core/violation-fixer.js +651 -0
- package/dist/enforcement/enforcer-tools.js +909 -0
- package/dist/enforcement/index.js +41 -0
- package/dist/enforcement/loaders/agent-triage-loader.js +222 -0
- package/dist/enforcement/loaders/agents-md-validation-loader.js +252 -0
- package/dist/enforcement/loaders/base-loader.js +86 -0
- package/dist/enforcement/loaders/codex-loader.js +396 -0
- package/dist/enforcement/loaders/index.js +40 -0
- package/dist/enforcement/loaders/loader-orchestrator.js +168 -0
- package/dist/enforcement/loaders/processor-loader.js +113 -0
- package/dist/enforcement/rule-enforcer.js +298 -0
- package/dist/enforcement/test-auto-healing.js +325 -0
- package/dist/enforcement/types.js +30 -0
- package/dist/enforcement/validators/architecture-validators.js +600 -0
- package/dist/enforcement/validators/base-validator.js +108 -0
- package/dist/enforcement/validators/code-quality-validators.js +336 -0
- package/dist/enforcement/validators/index.js +21 -0
- package/dist/enforcement/validators/security-validators.js +220 -0
- package/dist/enforcement/validators/testing-validators.js +253 -0
- package/dist/enforcement/validators/validator-registry.js +150 -0
- package/dist/execution/opencode-cli-invoker.js +173 -0
- package/dist/execution/proposal-applier.js +254 -0
- package/dist/governance/codex-policy.service.js +167 -0
- package/dist/governance/governance-core.js +152 -0
- package/dist/governance/governance-service.js +274 -0
- package/dist/governance/governance-types.js +6 -0
- package/dist/index.js +24 -0
- package/dist/inference/deploy-verifier.js +161 -0
- package/dist/inference/index.js +5 -0
- package/dist/inference/inference-accumulator.js +126 -0
- package/dist/inference/inference-cycle.js +1168 -0
- package/dist/inference/semantic-patterns.js +310 -0
- package/dist/inference/session-capture.js +308 -0
- package/dist/integrations/base/ExampleIntegration.js +181 -0
- package/dist/integrations/base/Integration.js +395 -0
- package/dist/integrations/base/README.md +446 -0
- package/dist/integrations/base/index.js +16 -0
- package/dist/integrations/base/registry.js +606 -0
- package/dist/integrations/base/types.js +118 -0
- package/dist/integrations/governance/governance-client.js +316 -0
- package/dist/integrations/governance/index.js +373 -0
- package/dist/integrations/governance/types.js +97 -0
- package/dist/integrations/grok/grok-cli.js +83 -0
- package/dist/integrations/grok/hooks/pre-tool-use.js +134 -0
- package/dist/integrations/grok/plugin/0xray/.mcp.json +15 -0
- package/dist/integrations/grok/plugin/0xray/hooks/hooks.json +30 -0
- package/dist/integrations/hermes-agent/__init__.py +718 -0
- package/dist/integrations/hermes-agent/after-install.md +71 -0
- package/dist/integrations/hermes-agent/bridge.mjs +861 -0
- package/dist/integrations/hermes-agent/conftest.py +14 -0
- package/dist/integrations/hermes-agent/plugin.yaml +12 -0
- package/dist/integrations/hermes-agent/schemas.py +100 -0
- package/dist/integrations/hermes-agent/test_plugin.py +1100 -0
- package/dist/integrations/hermes-agent/tools.py +253 -0
- package/dist/integrations/openclaw/README.md +134 -0
- package/dist/integrations/openclaw/api-server.js +389 -0
- package/dist/integrations/openclaw/client.js +492 -0
- package/dist/integrations/openclaw/config.js +374 -0
- package/dist/integrations/openclaw/hooks/strray-hooks.js +280 -0
- package/dist/integrations/openclaw/index.js +351 -0
- package/dist/integrations/openclaw/types.js +153 -0
- package/dist/integrations/plugins/index.js +10 -0
- package/dist/integrations/plugins/plugin-integration.js +606 -0
- package/dist/integrations/plugins/plugin-registry.js +580 -0
- package/dist/mcps/agent-resolver.js +106 -0
- package/dist/mcps/architect-tools.server.js +277 -0
- package/dist/mcps/auto-format.server.js +413 -0
- package/dist/mcps/boot-orchestrator.server.js +853 -0
- package/dist/mcps/config/config-loader.js +103 -0
- package/dist/mcps/config/config-validator.js +101 -0
- package/dist/mcps/config/index.js +30 -0
- package/dist/mcps/config/plugin-server-registry.js +223 -0
- package/dist/mcps/config/server-config-registry.js +348 -0
- package/dist/mcps/connection/connection-manager.js +79 -0
- package/dist/mcps/connection/connection-pool.js +164 -0
- package/dist/mcps/connection/mcp-connection.js +233 -0
- package/dist/mcps/connection/process-spawner.js +34 -0
- package/dist/mcps/enforcer-tools.server.js +778 -0
- package/dist/mcps/estimation.server.js +192 -0
- package/dist/mcps/framework-compliance-audit.server.js +500 -0
- package/dist/mcps/framework-help.server.js +400 -0
- package/dist/mcps/governance.server.js +464 -0
- package/dist/mcps/in-process-skill-registry.js +48 -0
- package/dist/mcps/knowledge-skills/api-design.server.js +123 -0
- package/dist/mcps/knowledge-skills/architecture-patterns.server.js +113 -0
- package/dist/mcps/knowledge-skills/bug-triage-specialist.server.js +474 -0
- package/dist/mcps/knowledge-skills/code-analyzer.server.js +605 -0
- package/dist/mcps/knowledge-skills/code-review.server.js +847 -0
- package/dist/mcps/knowledge-skills/content-creator.server.js +256 -0
- package/dist/mcps/knowledge-skills/database-design.server.js +822 -0
- package/dist/mcps/knowledge-skills/devops-deployment.server.js +1180 -0
- package/dist/mcps/knowledge-skills/git-workflow.server.js +115 -0
- package/dist/mcps/knowledge-skills/growth-strategist.server.js +361 -0
- package/dist/mcps/knowledge-skills/log-monitor.server.js +451 -0
- package/dist/mcps/knowledge-skills/mobile-development.server.js +525 -0
- package/dist/mcps/knowledge-skills/multimodal-looker.server.js +1063 -0
- package/dist/mcps/knowledge-skills/performance-optimization.server.js +1587 -0
- package/dist/mcps/knowledge-skills/project-analysis.server.js +811 -0
- package/dist/mcps/knowledge-skills/refactoring-strategies.server.js +796 -0
- package/dist/mcps/knowledge-skills/security-audit.server.js +846 -0
- package/dist/mcps/knowledge-skills/seo-consultant.server.js +937 -0
- package/dist/mcps/knowledge-skills/session-management.server.js +470 -0
- package/dist/mcps/knowledge-skills/skill-invocation.server.js +729 -0
- package/dist/mcps/knowledge-skills/strategist.server.js +217 -0
- package/dist/mcps/knowledge-skills/tech-writer.server.js +1191 -0
- package/dist/mcps/knowledge-skills/testing-best-practices.server.js +866 -0
- package/dist/mcps/knowledge-skills/testing-strategy.server.js +827 -0
- package/dist/mcps/knowledge-skills/ui-ux-design.server.js +1538 -0
- package/dist/mcps/lint.server.js +381 -0
- package/dist/mcps/mcp-client.js +574 -0
- package/dist/mcps/model-health-check.server.js +228 -0
- package/dist/mcps/orchestrator/config/agent-capabilities.js +87 -0
- package/dist/mcps/orchestrator/execution/execution-planner.js +279 -0
- package/dist/mcps/orchestrator/handlers/complexity-handler.js +94 -0
- package/dist/mcps/orchestrator/handlers/status-handler.js +232 -0
- package/dist/mcps/orchestrator/handlers/task-handler.js +197 -0
- package/dist/mcps/orchestrator/server.js +305 -0
- package/dist/mcps/orchestrator/types.js +6 -0
- package/dist/mcps/orchestrator.server.js +19 -0
- package/dist/mcps/performance-analysis.server.js +519 -0
- package/dist/mcps/processor-pipeline.server.js +561 -0
- package/dist/mcps/protocol/protocol-constants.js +46 -0
- package/dist/mcps/registry.json +110 -0
- package/dist/mcps/researcher.server.js +504 -0
- package/dist/mcps/security-scan.server.js +531 -0
- package/dist/mcps/simulation/index.js +12 -0
- package/dist/mcps/simulation/server-simulations.js +219 -0
- package/dist/mcps/simulation/simulation-engine.js +96 -0
- package/dist/mcps/state-manager.server.js +637 -0
- package/dist/mcps/tools/index.js +14 -0
- package/dist/mcps/tools/tool-cache.js +112 -0
- package/dist/mcps/tools/tool-discovery.js +65 -0
- package/dist/mcps/tools/tool-executor.js +75 -0
- package/dist/mcps/tools/tool-registry.js +67 -0
- package/dist/mcps/types/index.js +15 -0
- package/dist/mcps/types/json-rpc.types.js +7 -0
- package/dist/mcps/types/mcp.types.js +7 -0
- package/dist/metrics/agent-metrics.js +574 -0
- package/dist/metrics/index.js +6 -0
- package/dist/monitoring/advanced-profiler.js +232 -0
- package/dist/monitoring/memory-monitor.js +315 -0
- package/dist/monitoring/nudge-watchdog.js +356 -0
- package/dist/monitoring/test-auto-generation-monitor.js +157 -0
- package/dist/orchestrator/agent-spawn-governor.js +559 -0
- package/dist/orchestrator/enhanced-multi-agent-orchestrator.js +399 -0
- package/dist/orchestrator/intelligent-commit-batcher.js +353 -0
- package/dist/orchestrator/multi-agent-orchestration-coordinator.js +456 -0
- package/dist/orchestrator/orchestrator.js +657 -0
- package/dist/orchestrator/self-direction-activation.js +245 -0
- package/dist/orchestrator/universal-librarian-consultation.js +216 -0
- package/dist/orchestrator/universal-registry-bridge.js +247 -0
- package/dist/performance/performance-budget-enforcer.js +434 -0
- package/dist/performance/performance-regression-tester.js +342 -0
- package/dist/plugin/xray-codex-injection.js +857 -0
- package/dist/postprocessor/PostProcessor.js +1048 -0
- package/dist/postprocessor/analysis/FailureAnalysisEngine.js +245 -0
- package/dist/postprocessor/autofix/AutoFixEngine.js +254 -0
- package/dist/postprocessor/autofix/FixValidator.js +56 -0
- package/dist/postprocessor/config.js +65 -0
- package/dist/postprocessor/escalation/EscalationEngine.js +492 -0
- package/dist/postprocessor/monitoring/MonitoringEngine.js +125 -0
- package/dist/postprocessor/redeploy/RedeployCoordinator.js +342 -0
- package/dist/postprocessor/services/RegressionAnalysisService.js +131 -0
- package/dist/postprocessor/success/SuccessHandler.js +134 -0
- package/dist/postprocessor/triggers/APITrigger.js +115 -0
- package/dist/postprocessor/triggers/GitHookTrigger.js +551 -0
- package/dist/postprocessor/triggers/WebhookTrigger.js +211 -0
- package/dist/postprocessor/types.js +4 -0
- package/dist/processors/doc-write-guard.js +46 -0
- package/dist/processors/implementations/agents-md-validation-processor.js +286 -0
- package/dist/processors/implementations/async-pattern-processor.js +158 -0
- package/dist/processors/implementations/codex-compliance-processor.js +57 -0
- package/dist/processors/implementations/commit-batcher-processor.js +71 -0
- package/dist/processors/implementations/console-log-guard-processor.js +163 -0
- package/dist/processors/implementations/coverage-analysis-processor.js +138 -0
- package/dist/processors/implementations/error-boundary-processor.js +44 -0
- package/dist/processors/implementations/inference-improvement-processor.js +270 -0
- package/dist/processors/implementations/log-protection-processor.js +118 -0
- package/dist/processors/implementations/nudge-processor.js +130 -0
- package/dist/processors/implementations/performance-budget-processor.js +217 -0
- package/dist/processors/implementations/postprocessor-chain-validator.js +149 -0
- package/dist/processors/implementations/pre-validate-processor.js +18 -0
- package/dist/processors/implementations/publish-preflight-processor.js +249 -0
- package/dist/processors/implementations/refactoring-logging-processor-wrapper.js +33 -0
- package/dist/processors/implementations/refactoring-logging-processor.js +96 -0
- package/dist/processors/implementations/regression-testing-processor.js +59 -0
- package/dist/processors/implementations/session-capture-processor.js +37 -0
- package/dist/processors/implementations/session-summary-processor.js +130 -0
- package/dist/processors/implementations/spawn-governance-processor.js +219 -0
- package/dist/processors/implementations/state-validation-processor.js +15 -0
- package/dist/processors/implementations/storytelling-trigger-processor.js +589 -0
- package/dist/processors/implementations/test-auto-creation-processor.js +484 -0
- package/dist/processors/implementations/test-execution-processor.js +132 -0
- package/dist/processors/implementations/typescript-compilation-processor.js +87 -0
- package/dist/processors/implementations/version-compliance-processor.js +350 -0
- package/dist/processors/processor-interfaces.js +126 -0
- package/dist/processors/processor-manager.js +826 -0
- package/dist/processors/processor-types.js +12 -0
- package/dist/public/about.html +228 -0
- package/dist/public/enterprise.html +27 -0
- package/dist/public/features.html +102 -0
- package/dist/public/index.html +145 -0
- package/dist/reporting/framework-reporting-system.js +187 -0
- package/dist/reporting/log-parser.js +281 -0
- package/dist/reporting/metrics.js +202 -0
- package/dist/reporting/report-formatter.js +146 -0
- package/dist/reporting/types.js +1 -0
- package/dist/scripts/activate-kernel-pipeline.js +101 -0
- package/dist/scripts/integration.js +234 -0
- package/dist/scripts/pre-command +26 -0
- package/dist/scripts/pre-command.mjs +358 -0
- package/dist/security/comprehensive-security-audit.js +1005 -0
- package/dist/security/index.js +13 -0
- package/dist/security/prompt-security-validator.js +148 -0
- package/dist/security/security-agent-coordinator.js +204 -0
- package/dist/security/security-auditor.js +584 -0
- package/dist/security/security-hardener.js +170 -0
- package/dist/security/security-hardening-system.js +727 -0
- package/dist/security/security-headers.js +118 -0
- package/dist/security/security-orchestration-layer.js +496 -0
- package/dist/security/security-scanner.js +429 -0
- package/dist/services/inference-tuner.js +301 -0
- package/dist/session/index.js +3 -0
- package/dist/session/session-cleanup-manager.js +366 -0
- package/dist/session/session-monitor.js +503 -0
- package/dist/session/session-state-manager.js +522 -0
- package/dist/skills/api-design/SKILL.md +37 -0
- package/dist/skills/architect-tools/SKILL.md +37 -0
- package/dist/skills/architecture-patterns/SKILL.md +37 -0
- package/dist/skills/auto-format/SKILL.md +37 -0
- package/dist/skills/backend-engineer/SKILL.md +49 -0
- package/dist/skills/boot-orchestrator/SKILL.md +37 -0
- package/dist/skills/bug-triage/SKILL.md +43 -0
- package/dist/skills/code-analyzer/SKILL.md +45 -0
- package/dist/skills/code-review/SKILL.md +52 -0
- package/dist/skills/content-creator/SKILL.md +38 -0
- package/dist/skills/database-engineer/SKILL.md +46 -0
- package/dist/skills/devops-engineer/SKILL.md +49 -0
- package/dist/skills/enforcer/SKILL.md +37 -0
- package/dist/skills/framework-compliance-audit/SKILL.md +37 -0
- package/dist/skills/frontend-engineer/SKILL.md +49 -0
- package/dist/skills/frontend-ui-ux-engineer/SKILL.md +41 -0
- package/dist/skills/git-workflow/SKILL.md +37 -0
- package/dist/skills/growth-strategist/SKILL.md +48 -0
- package/dist/skills/hermes-agent/SKILL.md +212 -0
- package/dist/skills/inference-improve/SKILL.md +97 -0
- package/dist/skills/lint/SKILL.md +37 -0
- package/dist/skills/log-monitor/SKILL.md +44 -0
- package/dist/skills/mobile-developer/SKILL.md +42 -0
- package/dist/skills/model-health-check/SKILL.md +37 -0
- package/dist/skills/multimodal-looker/SKILL.md +45 -0
- package/dist/skills/orchestrator/SKILL.md +37 -0
- package/dist/skills/performance-analysis/SKILL.md +37 -0
- package/dist/skills/performance-engineer/SKILL.md +41 -0
- package/dist/skills/performance-optimization/SKILL.md +37 -0
- package/dist/skills/processor-pipeline/SKILL.md +37 -0
- package/dist/skills/project-analysis/SKILL.md +42 -0
- package/dist/skills/refactoring-strategies/SKILL.md +37 -0
- package/dist/skills/registry.json +66 -0
- package/dist/skills/researcher/SKILL.md +37 -0
- package/dist/skills/security-audit/SKILL.md +48 -0
- package/dist/skills/security-scan/SKILL.md +37 -0
- package/dist/skills/seo-consultant/SKILL.md +43 -0
- package/dist/skills/session-management/SKILL.md +36 -0
- package/dist/skills/state-manager/SKILL.md +37 -0
- package/dist/skills/storyteller/SKILL.md +130 -0
- package/dist/skills/strategist/SKILL.md +32 -0
- package/dist/skills/tech-writer/SKILL.md +37 -0
- package/dist/skills/testing-best-practices/SKILL.md +37 -0
- package/dist/skills/testing-strategy/SKILL.md +43 -0
- package/dist/skills/ui-ux-design/SKILL.md +603 -0
- package/dist/state/context-providers.js +1 -0
- package/dist/state/index.js +7 -0
- package/dist/state/state-manager.js +208 -0
- package/dist/state/state-types.js +1 -0
- package/dist/testing/memory-regression-suite.js +258 -0
- package/dist/utils/batch-operations.js +292 -0
- package/dist/utils/codex-parser.js +445 -0
- package/dist/utils/command-runner.js +96 -0
- package/dist/utils/import-resolver.js +189 -0
- package/dist/utils/language-detector.js +383 -0
- package/dist/utils/path-resolver.js +112 -0
- package/dist/utils/shutdown-handler.js +75 -0
- package/dist/utils/test-template-generator.js +178 -0
- package/dist/utils/token-manager.js +163 -0
- package/dist/validation/estimation-validator.js +241 -0
- package/dist/validation/report-content-validator.js +218 -0
- package/opencode.json +153 -0
- package/package.json +170 -0
- package/scripts/helpers/resolve-config-path.cjs +57 -0
- package/scripts/helpers/resolve-config-path.mjs +73 -0
- package/scripts/hooks/pre-command +26 -0
- package/scripts/hooks/pre-command.mjs +358 -0
- package/scripts/hooks/run-hook.js +570 -0
- package/scripts/mjs/test-consumer-readiness.mjs +273 -0
- package/scripts/mjs/test-mcp-functionality.mjs +507 -0
- package/scripts/mjs/validate-mcp-connectivity.cjs +75 -0
- package/scripts/mjs/validate-postinstall-config.mjs +308 -0
- package/scripts/node/auto-reflection-generator.mjs +496 -0
- package/scripts/node/basic-security-audit.cjs +338 -0
- package/scripts/node/ci-cd-auto-fix.cjs +263 -0
- package/scripts/node/ci-report-generator.mjs +227 -0
- package/scripts/node/enforce-agents-md.mjs +420 -0
- package/scripts/node/enforce-version-compliance.sh +22 -0
- package/scripts/node/enforce-version-compliance.ts +126 -0
- package/scripts/node/github-actions-monitor.cjs +23 -0
- package/scripts/node/govern-reflection.mjs +160 -0
- package/scripts/node/postinstall.cjs +78 -0
- package/scripts/node/pre-publish-guard.js +267 -0
- package/scripts/node/prepare-consumer.cjs +143 -0
- package/scripts/node/reflection-processor.cjs +213 -0
- package/scripts/node/reflection-validate.sh +194 -0
- package/scripts/node/release-tweet.mjs +39 -0
- package/scripts/node/release.js +159 -0
- package/scripts/node/release.mjs +213 -0
- package/scripts/node/setup-dev.cjs +83 -0
- package/scripts/node/setup.cjs +214 -0
- package/scripts/node/sync-versions.mjs +140 -0
- package/scripts/node/universal-version-manager.js +1025 -0
- package/scripts/node/validate-external-processes.js +265 -0
- package/scripts/node/validate-mcp-connectivity.js +258 -0
- package/scripts/node/version-manager.mjs +524 -0
- package/scripts/validate-stringray-comprehensive.js +636 -0
- package/src/integrations/grok/plugin/0xray/.mcp.json +15 -0
- package/src/integrations/grok/plugin/0xray/hooks/hooks.json +30 -0
- package/src/mcps/agent-resolver.ts +168 -0
- package/src/mcps/architect-tools.server.ts +343 -0
- package/src/mcps/auto-format.server.ts +529 -0
- package/src/mcps/boot-orchestrator.server.ts +1082 -0
- package/src/mcps/config/__tests__/config-loader.test.ts +338 -0
- package/src/mcps/config/__tests__/config-validator.test.ts +646 -0
- package/src/mcps/config/__tests__/server-config-registry.test.ts +257 -0
- package/src/mcps/config/config-loader.ts +127 -0
- package/src/mcps/config/config-validator.ts +127 -0
- package/src/mcps/config/index.ts +32 -0
- package/src/mcps/config/plugin-server-registry.ts +335 -0
- package/src/mcps/config/server-config-registry.ts +395 -0
- package/src/mcps/connection/connection-manager.ts +91 -0
- package/src/mcps/connection/connection-pool.ts +216 -0
- package/src/mcps/connection/mcp-connection.ts +327 -0
- package/src/mcps/connection/process-spawner.ts +47 -0
- package/src/mcps/enforcer-tools.server.ts +1106 -0
- package/src/mcps/estimation.server.ts +229 -0
- package/src/mcps/framework-compliance-audit.server.ts +635 -0
- package/src/mcps/framework-help.server.ts +467 -0
- package/src/mcps/governance.server.ts +551 -0
- package/src/mcps/in-process-skill-registry.ts +79 -0
- package/src/mcps/knowledge-skills/api-design.server.test.ts +41 -0
- package/src/mcps/knowledge-skills/api-design.server.ts +160 -0
- package/src/mcps/knowledge-skills/architecture-patterns.server.ts +152 -0
- package/src/mcps/knowledge-skills/bug-triage-specialist.server.ts +624 -0
- package/src/mcps/knowledge-skills/code-analyzer.server.test.ts +129 -0
- package/src/mcps/knowledge-skills/code-analyzer.server.ts +591 -0
- package/src/mcps/knowledge-skills/code-review.server.ts +1132 -0
- package/src/mcps/knowledge-skills/content-creator.server.ts +300 -0
- package/src/mcps/knowledge-skills/database-design.server.ts +1200 -0
- package/src/mcps/knowledge-skills/devops-deployment.server.ts +1622 -0
- package/src/mcps/knowledge-skills/git-workflow.server.ts +152 -0
- package/src/mcps/knowledge-skills/growth-strategist.server.ts +413 -0
- package/src/mcps/knowledge-skills/log-monitor.server.ts +619 -0
- package/src/mcps/knowledge-skills/mobile-development.server.ts +672 -0
- package/src/mcps/knowledge-skills/multimodal-looker.server.ts +1500 -0
- package/src/mcps/knowledge-skills/performance-optimization.server.ts +2065 -0
- package/src/mcps/knowledge-skills/project-analysis.server.ts +1111 -0
- package/src/mcps/knowledge-skills/refactoring-strategies.server.ts +1092 -0
- package/src/mcps/knowledge-skills/security-audit.server.test.ts +112 -0
- package/src/mcps/knowledge-skills/security-audit.server.ts +1193 -0
- package/src/mcps/knowledge-skills/seo-consultant.server.ts +1160 -0
- package/src/mcps/knowledge-skills/session-management.server.ts +576 -0
- package/src/mcps/knowledge-skills/skill-invocation.server.ts +941 -0
- package/src/mcps/knowledge-skills/strategist.server.ts +267 -0
- package/src/mcps/knowledge-skills/tech-writer.server.ts +1638 -0
- package/src/mcps/knowledge-skills/testing-best-practices.server.test.ts +136 -0
- package/src/mcps/knowledge-skills/testing-best-practices.server.ts +1232 -0
- package/src/mcps/knowledge-skills/testing-strategy.server.test.ts +100 -0
- package/src/mcps/knowledge-skills/testing-strategy.server.ts +1172 -0
- package/src/mcps/knowledge-skills/ui-ux-design.server.ts +2076 -0
- package/src/mcps/lint.server.ts +483 -0
- package/src/mcps/mcp-client.ts +706 -0
- package/src/mcps/model-health-check.server.ts +292 -0
- package/src/mcps/orchestrator/config/agent-capabilities.ts +108 -0
- package/src/mcps/orchestrator/execution/execution-planner.ts +353 -0
- package/src/mcps/orchestrator/handlers/complexity-handler.ts +125 -0
- package/src/mcps/orchestrator/handlers/status-handler.ts +295 -0
- package/src/mcps/orchestrator/handlers/task-handler.ts +268 -0
- package/src/mcps/orchestrator/server.ts +388 -0
- package/src/mcps/orchestrator/types.ts +81 -0
- package/src/mcps/orchestrator.server.ts +34 -0
- package/src/mcps/performance-analysis.server.ts +715 -0
- package/src/mcps/processor-pipeline.server.ts +778 -0
- package/src/mcps/protocol/protocol-constants.ts +51 -0
- package/src/mcps/registry.json +110 -0
- package/src/mcps/researcher.server.ts +595 -0
- package/src/mcps/security-scan.server.ts +651 -0
- package/src/mcps/simulation/__tests__/simulation-engine.test.ts +275 -0
- package/src/mcps/simulation/index.ts +23 -0
- package/src/mcps/simulation/server-simulations.ts +241 -0
- package/src/mcps/simulation/simulation-engine.ts +126 -0
- package/src/mcps/state-manager.server.ts +777 -0
- package/src/mcps/tools/__tests__/tool-cache.test.ts +205 -0
- package/src/mcps/tools/__tests__/tool-discovery.test.ts +189 -0
- package/src/mcps/tools/__tests__/tool-executor.test.ts +215 -0
- package/src/mcps/tools/__tests__/tool-registry.test.ts +230 -0
- package/src/mcps/tools/index.ts +15 -0
- package/src/mcps/tools/tool-cache.ts +145 -0
- package/src/mcps/tools/tool-discovery.ts +83 -0
- package/src/mcps/tools/tool-executor.ts +106 -0
- package/src/mcps/tools/tool-registry.ts +78 -0
- package/src/mcps/types/__tests__/types.test.ts +341 -0
- package/src/mcps/types/index.ts +17 -0
- package/src/mcps/types/json-rpc.types.ts +38 -0
- package/src/mcps/types/mcp.types.ts +115 -0
- package/src/opencode/agents/api-design.yml +31 -0
- package/src/opencode/agents/architect.yml +15 -0
- package/src/opencode/agents/architecture-patterns.yml +14 -0
- package/src/opencode/agents/auto-format.yml +14 -0
- package/src/opencode/agents/backend-engineer.yml +12 -0
- package/src/opencode/agents/boot-orchestrator.yml +14 -0
- package/src/opencode/agents/bug-triage-specialist.yml +15 -0
- package/src/opencode/agents/code-analyzer.yml +12 -0
- package/src/opencode/agents/code-reviewer.yml +14 -0
- package/src/opencode/agents/content-creator.yml +12 -0
- package/src/opencode/agents/database-engineer.yml +12 -0
- package/src/opencode/agents/devops-engineer.yml +12 -0
- package/src/opencode/agents/framework-compliance-audit.yml +14 -0
- package/src/opencode/agents/frontend-engineer.yml +12 -0
- package/src/opencode/agents/frontend-ui-ux-engineer.yml +12 -0
- package/src/opencode/agents/git-workflow.yml +15 -0
- package/src/opencode/agents/growth-strategist.yml +12 -0
- package/src/opencode/agents/hermes-agent.yml +12 -0
- package/src/opencode/agents/inference-improve.yml +12 -0
- package/src/opencode/agents/lint.yml +14 -0
- package/src/opencode/agents/log-monitor.yml +12 -0
- package/src/opencode/agents/mobile-developer.yml +12 -0
- package/src/opencode/agents/model-health-check.yml +12 -0
- package/src/opencode/agents/multimodal-looker.yml +12 -0
- package/src/opencode/agents/performance-analysis.yml +12 -0
- package/src/opencode/agents/performance-engineer.yml +12 -0
- package/src/opencode/agents/performance-optimization.yml +12 -0
- package/src/opencode/agents/processor-pipeline.yml +14 -0
- package/src/opencode/agents/project-analysis.yml +12 -0
- package/src/opencode/agents/refactorer.yml +12 -0
- package/src/opencode/agents/researcher.yml +12 -0
- package/src/opencode/agents/security-auditor.yml +12 -0
- package/src/opencode/agents/security-scan.yml +12 -0
- package/src/opencode/agents/seo-consultant.yml +12 -0
- package/src/opencode/agents/session-management.yml +12 -0
- package/src/opencode/agents/state-manager.yml +12 -0
- package/src/opencode/agents/storyteller.yml +12 -0
- package/src/opencode/agents/strategist.yml +12 -0
- package/src/opencode/agents/tech-writer.yml +12 -0
- package/src/opencode/agents/testing-best-practices.yml +12 -0
- package/src/opencode/agents/testing-lead.yml +12 -0
- package/src/opencode/agents/ui-ux-design.yml +12 -0
- package/src/opencode/codex.codex +8 -0
- package/src/opencode/commands/auto-format.md +99 -0
- package/src/opencode/commands/auto-summary-capture.md +90 -0
- package/src/opencode/commands/dependency-audit.md +184 -0
- package/src/opencode/commands/enforcer-daily-scan.md +137 -0
- package/src/opencode/commands/framework-compliance-audit.md +205 -0
- package/src/opencode/commands/interactive-validator.md +75 -0
- package/src/opencode/commands/job-summary-logger.md +68 -0
- package/src/opencode/commands/lint.md +11 -0
- package/src/opencode/commands/mode-switch.md +95 -0
- package/src/opencode/commands/model-health-check.md +186 -0
- package/src/opencode/commands/performance-analysis.md +144 -0
- package/src/opencode/commands/pre-commit-introspection.md +185 -0
- package/src/opencode/commands/pre-commit-introspection.sh +133 -0
- package/src/opencode/commands/security-scan.md +157 -0
- package/src/opencode/commands/sisyphus-validation.md +128 -0
- package/src/opencode/commands/summary-logger.md +83 -0
- package/src/opencode/enforcer-config.json +285 -0
- package/src/opencode/openclaw/config.json +25 -0
- package/src/opencode/workflows/post-deployment-audit.yml +123 -0
- package/src/skills/api-design/SKILL.md +37 -0
- package/src/skills/architect-tools/SKILL.md +37 -0
- package/src/skills/architecture-patterns/SKILL.md +37 -0
- package/src/skills/auto-format/SKILL.md +37 -0
- package/src/skills/backend-engineer/SKILL.md +49 -0
- package/src/skills/boot-orchestrator/SKILL.md +37 -0
- package/src/skills/bug-triage/SKILL.md +43 -0
- package/src/skills/code-analyzer/SKILL.md +45 -0
- package/src/skills/code-review/SKILL.md +52 -0
- package/src/skills/content-creator/SKILL.md +38 -0
- package/src/skills/database-engineer/SKILL.md +46 -0
- package/src/skills/devops-engineer/SKILL.md +49 -0
- package/src/skills/enforcer/SKILL.md +37 -0
- package/src/skills/framework-compliance-audit/SKILL.md +37 -0
- package/src/skills/frontend-engineer/SKILL.md +49 -0
- package/src/skills/frontend-ui-ux-engineer/SKILL.md +41 -0
- package/src/skills/git-workflow/SKILL.md +37 -0
- package/src/skills/growth-strategist/SKILL.md +48 -0
- package/src/skills/hermes-agent/SKILL.md +212 -0
- package/src/skills/inference-improve/SKILL.md +97 -0
- package/src/skills/lint/SKILL.md +37 -0
- package/src/skills/log-monitor/SKILL.md +44 -0
- package/src/skills/mobile-developer/SKILL.md +42 -0
- package/src/skills/model-health-check/SKILL.md +37 -0
- package/src/skills/multimodal-looker/SKILL.md +45 -0
- package/src/skills/orchestrator/SKILL.md +37 -0
- package/src/skills/performance-analysis/SKILL.md +37 -0
- package/src/skills/performance-engineer/SKILL.md +41 -0
- package/src/skills/performance-optimization/SKILL.md +37 -0
- package/src/skills/processor-pipeline/SKILL.md +37 -0
- package/src/skills/project-analysis/SKILL.md +42 -0
- package/src/skills/refactoring-strategies/SKILL.md +37 -0
- package/src/skills/registry.json +66 -0
- package/src/skills/researcher/SKILL.md +37 -0
- package/src/skills/security-audit/SKILL.md +48 -0
- package/src/skills/security-scan/SKILL.md +37 -0
- package/src/skills/seo-consultant/SKILL.md +43 -0
- package/src/skills/session-management/SKILL.md +36 -0
- package/src/skills/state-manager/SKILL.md +37 -0
- package/src/skills/storyteller/SKILL.md +130 -0
- package/src/skills/strategist/SKILL.md +32 -0
- package/src/skills/tech-writer/SKILL.md +37 -0
- package/src/skills/testing-best-practices/SKILL.md +37 -0
- package/src/skills/testing-strategy/SKILL.md +43 -0
- package/src/skills/ui-ux-design/SKILL.md +603 -0
|
@@ -0,0 +1,986 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
/**
|
|
3
|
+
* xray CLI - Command Line Interface
|
|
4
|
+
*
|
|
5
|
+
* Provides commands for installing and managing xray framework
|
|
6
|
+
*/
|
|
7
|
+
import { Command } from "commander";
|
|
8
|
+
import { execSync, spawn } from "child_process";
|
|
9
|
+
import { join, resolve } from "path";
|
|
10
|
+
import { readFileSync, existsSync } from "fs";
|
|
11
|
+
import { getConfigDir } from "../core/config-paths.js";
|
|
12
|
+
import { frameworkLogger } from "../core/framework-logger.js";
|
|
13
|
+
// Get package root relative to this script location
|
|
14
|
+
const packageRoot = resolve(join(new URL(".", import.meta.url).pathname, "..", ".."));
|
|
15
|
+
// Read version dynamically from package.json
|
|
16
|
+
const packageJsonPath = join(packageRoot, "package.json");
|
|
17
|
+
const { version } = JSON.parse(readFileSync(packageJsonPath, "utf-8"));
|
|
18
|
+
/**
|
|
19
|
+
* SECURITY: Validate script path to prevent command injection
|
|
20
|
+
* Ensures the script is within the package root directory
|
|
21
|
+
*/
|
|
22
|
+
function validateScriptPath(scriptPath, scriptName) {
|
|
23
|
+
// Resolve to absolute path
|
|
24
|
+
const resolvedPath = resolve(scriptPath);
|
|
25
|
+
// Check if file exists
|
|
26
|
+
if (!existsSync(resolvedPath)) {
|
|
27
|
+
throw new Error(`${scriptName} not found: ${resolvedPath}`);
|
|
28
|
+
}
|
|
29
|
+
// Check if path is within package root (prevent directory traversal)
|
|
30
|
+
const relativePath = resolve(packageRoot);
|
|
31
|
+
if (!resolvedPath.startsWith(relativePath)) {
|
|
32
|
+
throw new Error(`Security violation: ${scriptName} outside package root: ${resolvedPath}`);
|
|
33
|
+
}
|
|
34
|
+
// Check file extension (allow only .js, .cjs, .sh)
|
|
35
|
+
const allowedExtensions = ['.js', '.cjs', '.sh'];
|
|
36
|
+
const extension = resolve(resolvedPath).slice(-4);
|
|
37
|
+
if (!allowedExtensions.some(ext => resolvedPath.endsWith(ext))) {
|
|
38
|
+
throw new Error(`Security violation: ${scriptName} has disallowed extension: ${resolvedPath}`);
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
const program = new Command();
|
|
42
|
+
program
|
|
43
|
+
.name("0xray")
|
|
44
|
+
.description("xray: Bulletproof AI orchestration with systematic error prevention")
|
|
45
|
+
.version(version);
|
|
46
|
+
function runSetup() {
|
|
47
|
+
const setupScript = join(packageRoot, "scripts", "node", "setup.cjs");
|
|
48
|
+
validateScriptPath(setupScript, "setup script");
|
|
49
|
+
execSync(`node "${setupScript}"`, { stdio: "inherit", cwd: process.cwd() });
|
|
50
|
+
}
|
|
51
|
+
program
|
|
52
|
+
.command("install")
|
|
53
|
+
.description("Install xray framework in the current project")
|
|
54
|
+
.action(async () => {
|
|
55
|
+
frameworkLogger.log('cli', 'install-start', 'info', { message: 'Installing xray framework...' });
|
|
56
|
+
try {
|
|
57
|
+
const postinstallScript = join(packageRoot, "scripts", "node", "postinstall.cjs");
|
|
58
|
+
validateScriptPath(postinstallScript, "postinstall script");
|
|
59
|
+
execSync(`node "${postinstallScript}"`, { stdio: "inherit", cwd: process.cwd() });
|
|
60
|
+
frameworkLogger.log('cli', 'install-success', 'info', { message: 'xray framework installed' });
|
|
61
|
+
// UX banner kept for user visibility post-install (non-removable per exception)
|
|
62
|
+
console.log("✅ xray framework installed!");
|
|
63
|
+
console.log("💡 Run 'npx xray setup' for full configuration (hooks, Hermes, symlinks)");
|
|
64
|
+
}
|
|
65
|
+
catch (error) {
|
|
66
|
+
frameworkLogger.log('cli', 'install-error', 'error', { error: error instanceof Error ? error.message : String(error) });
|
|
67
|
+
console.error("❌ Installation failed:", error instanceof Error ? error.message : String(error));
|
|
68
|
+
process.exit(1);
|
|
69
|
+
}
|
|
70
|
+
});
|
|
71
|
+
program
|
|
72
|
+
.command("setup")
|
|
73
|
+
.description("Full framework setup: hooks, Hermes integration, symlinks, MCP paths")
|
|
74
|
+
.action(runSetup);
|
|
75
|
+
program
|
|
76
|
+
.command("init")
|
|
77
|
+
.description("Initialize xray configuration in the current project")
|
|
78
|
+
.action(async () => {
|
|
79
|
+
console.log("🚀 xray CLI: Initializing configuration...");
|
|
80
|
+
try {
|
|
81
|
+
const postinstallScript = join(packageRoot, "scripts", "node", "postinstall.cjs");
|
|
82
|
+
validateScriptPath(postinstallScript, "postinstall script");
|
|
83
|
+
execSync(`node "${postinstallScript}"`, { stdio: "inherit", cwd: process.cwd() });
|
|
84
|
+
runSetup();
|
|
85
|
+
console.log("✅ xray configuration initialized!");
|
|
86
|
+
}
|
|
87
|
+
catch (error) {
|
|
88
|
+
console.error("❌ Initialization failed:", error instanceof Error ? error.message : String(error));
|
|
89
|
+
process.exit(1);
|
|
90
|
+
}
|
|
91
|
+
});
|
|
92
|
+
program
|
|
93
|
+
.command("status")
|
|
94
|
+
.description("Show comprehensive xray framework status")
|
|
95
|
+
.action(async () => {
|
|
96
|
+
const { statusCommand } = await import("./commands/status.js");
|
|
97
|
+
await statusCommand();
|
|
98
|
+
});
|
|
99
|
+
program
|
|
100
|
+
.command("validate")
|
|
101
|
+
.description("Validate xray framework installation")
|
|
102
|
+
.action(async () => {
|
|
103
|
+
console.log("🔬 xray CLI: Validating installation...");
|
|
104
|
+
try {
|
|
105
|
+
// Run the init.sh script to validate
|
|
106
|
+
const initScript = join(packageRoot, ".opencode", "init.sh");
|
|
107
|
+
const fs = await import("fs");
|
|
108
|
+
if (!fs.existsSync(initScript)) {
|
|
109
|
+
console.error("❌ Validation failed: init script not found:", initScript);
|
|
110
|
+
process.exit(1);
|
|
111
|
+
}
|
|
112
|
+
// SECURITY: Validate script path before execution
|
|
113
|
+
validateScriptPath(initScript, "init script");
|
|
114
|
+
execSync(`bash "${initScript}"`, {
|
|
115
|
+
stdio: "inherit",
|
|
116
|
+
cwd: process.cwd(),
|
|
117
|
+
});
|
|
118
|
+
}
|
|
119
|
+
catch (error) {
|
|
120
|
+
console.error("❌ Validation failed:", error instanceof Error ? error.message : String(error));
|
|
121
|
+
process.exit(1);
|
|
122
|
+
}
|
|
123
|
+
});
|
|
124
|
+
program
|
|
125
|
+
.command("debug")
|
|
126
|
+
.description("Debug command")
|
|
127
|
+
.action(async () => {
|
|
128
|
+
console.log("📍 xray CLI Debug Info");
|
|
129
|
+
console.log(" packageRoot:", packageRoot);
|
|
130
|
+
console.log(" cwd:", process.cwd());
|
|
131
|
+
});
|
|
132
|
+
program
|
|
133
|
+
.command("capabilities")
|
|
134
|
+
.alias("caps")
|
|
135
|
+
.description("Show all available xray framework capabilities")
|
|
136
|
+
.action(async () => {
|
|
137
|
+
console.log("🚀 xray Framework Capabilities");
|
|
138
|
+
console.log("=====================================");
|
|
139
|
+
console.log("");
|
|
140
|
+
console.log("🤖 Available Agent Commands:");
|
|
141
|
+
console.log(" @security-auditor - Codex compliance & error prevention");
|
|
142
|
+
console.log(" @architect - System design & delegation decisions");
|
|
143
|
+
console.log(" @bug-triage-specialist - Error investigation & surgical fixes");
|
|
144
|
+
console.log(" @code-reviewer - Quality assessment & standards validation");
|
|
145
|
+
console.log(" @security-auditor - Vulnerability detection & compliance");
|
|
146
|
+
console.log(" @refactorer - Technical debt elimination & code consolidation");
|
|
147
|
+
console.log(" @testing-lead - Testing strategy & coverage optimization");
|
|
148
|
+
console.log(" @researcher - Codebase exploration & documentation");
|
|
149
|
+
console.log("");
|
|
150
|
+
console.log("🛠️ Framework Tools:");
|
|
151
|
+
console.log(" framework-reporting-system - Generate comprehensive activity reports");
|
|
152
|
+
console.log(" complexity-analyzer - Analyze code complexity & delegation decisions");
|
|
153
|
+
console.log(" codex-injector - Apply development standards automatically");
|
|
154
|
+
console.log("");
|
|
155
|
+
console.log("🎯 Skills System (23 lazy-loaded capabilities):");
|
|
156
|
+
console.log(" project-analysis - Codebase metrics and analysis");
|
|
157
|
+
console.log(" testing-strategy - Test planning and execution");
|
|
158
|
+
console.log(" code-review - Quality assessment");
|
|
159
|
+
console.log(" security-audit - Vulnerability scanning");
|
|
160
|
+
console.log(" performance-optimization - Performance tuning");
|
|
161
|
+
console.log(" refactoring-strategies - Code improvement techniques");
|
|
162
|
+
console.log(" ui-ux-design - User interface design");
|
|
163
|
+
console.log(" documentation-generation - Technical documentation");
|
|
164
|
+
console.log(" ... and 15 more specialized skills");
|
|
165
|
+
console.log("");
|
|
166
|
+
console.log("📚 Help & Discovery:");
|
|
167
|
+
console.log(" Use the framework-help MCP server for detailed information:");
|
|
168
|
+
console.log(" - xray_get_capabilities: Complete capabilities overview");
|
|
169
|
+
console.log(" - xray_get_commands: Command usage examples");
|
|
170
|
+
console.log(" - xray_explain_capability: Detailed feature explanations");
|
|
171
|
+
console.log("");
|
|
172
|
+
console.log("📊 Core Features:");
|
|
173
|
+
console.log(" • 99.6% error prevention through codex compliance");
|
|
174
|
+
console.log(" • 90% resource reduction (0 baseline processes)");
|
|
175
|
+
console.log(" • Multi-agent orchestration with intelligent delegation");
|
|
176
|
+
console.log(" • Systematic code quality enforcement");
|
|
177
|
+
console.log(" • Real-time activity monitoring and reporting");
|
|
178
|
+
console.log("");
|
|
179
|
+
console.log("🎯 Getting Started:");
|
|
180
|
+
console.log(" 1. Use @security-auditor for code quality validation");
|
|
181
|
+
console.log(" 2. Use @architect for complex development tasks");
|
|
182
|
+
console.log(" 3. Access skills for specialized capabilities");
|
|
183
|
+
console.log(" 4. Check framework-reporting-system for activity reports");
|
|
184
|
+
console.log(' 5. Run "npx xray capabilities" anytime for this overview');
|
|
185
|
+
});
|
|
186
|
+
program
|
|
187
|
+
.command("health")
|
|
188
|
+
.alias("check")
|
|
189
|
+
.description("Check framework health and system status")
|
|
190
|
+
.action(async () => {
|
|
191
|
+
console.log("🏥 xray Framework Health Check");
|
|
192
|
+
console.log("====================================");
|
|
193
|
+
console.log("");
|
|
194
|
+
try {
|
|
195
|
+
const fs = await import("fs");
|
|
196
|
+
const path = await import("path");
|
|
197
|
+
// Check core components
|
|
198
|
+
const checks = [
|
|
199
|
+
{
|
|
200
|
+
name: "Package Installation",
|
|
201
|
+
check: () => fs.existsSync(path.join(packageRoot, "package.json")),
|
|
202
|
+
success: "✅ Framework package found",
|
|
203
|
+
error: "❌ Framework package missing",
|
|
204
|
+
},
|
|
205
|
+
{
|
|
206
|
+
name: "Configuration Files",
|
|
207
|
+
check: () => fs.existsSync(path.join(process.cwd(), "opencode.json")) ||
|
|
208
|
+
fs.existsSync(path.join(process.cwd(), ".opencode", "enforcer-config.json")),
|
|
209
|
+
success: "✅ opencode configuration found",
|
|
210
|
+
error: "⚠️ opencode config optional for consumers",
|
|
211
|
+
},
|
|
212
|
+
{
|
|
213
|
+
name: "Agent System",
|
|
214
|
+
check: () => fs.existsSync(path.join(packageRoot, "dist", "agents")),
|
|
215
|
+
success: "✅ Agent system available",
|
|
216
|
+
error: "❌ Agent system not built",
|
|
217
|
+
},
|
|
218
|
+
{
|
|
219
|
+
name: "MCP Servers",
|
|
220
|
+
check: () => fs.existsSync(path.join(packageRoot, "dist", "mcps")),
|
|
221
|
+
success: "✅ MCP servers available",
|
|
222
|
+
error: "❌ MCP servers not built",
|
|
223
|
+
},
|
|
224
|
+
];
|
|
225
|
+
let allHealthy = true;
|
|
226
|
+
for (const check of checks) {
|
|
227
|
+
try {
|
|
228
|
+
if (check.check()) {
|
|
229
|
+
console.log(check.success);
|
|
230
|
+
}
|
|
231
|
+
else {
|
|
232
|
+
console.log(check.error);
|
|
233
|
+
allHealthy = false;
|
|
234
|
+
}
|
|
235
|
+
}
|
|
236
|
+
catch (error) {
|
|
237
|
+
console.log(`${check.name}: ❌ Error during check`);
|
|
238
|
+
allHealthy = false;
|
|
239
|
+
}
|
|
240
|
+
}
|
|
241
|
+
console.log("");
|
|
242
|
+
if (allHealthy) {
|
|
243
|
+
console.log("🎉 Framework is healthy and ready to use!");
|
|
244
|
+
console.log("");
|
|
245
|
+
console.log("💡 Quick commands:");
|
|
246
|
+
console.log(" • @security-auditor scan this project");
|
|
247
|
+
console.log(" • @architect analyze this project");
|
|
248
|
+
console.log(" • framework-reporting-system");
|
|
249
|
+
}
|
|
250
|
+
else {
|
|
251
|
+
console.log('⚠️ Some components need attention. Run "npx xray install" to fix.');
|
|
252
|
+
}
|
|
253
|
+
}
|
|
254
|
+
catch (error) {
|
|
255
|
+
console.error("❌ Health check failed:", error instanceof Error ? error.message : String(error));
|
|
256
|
+
process.exit(1);
|
|
257
|
+
}
|
|
258
|
+
});
|
|
259
|
+
program
|
|
260
|
+
.command("report")
|
|
261
|
+
.description("Generate framework activity and health reports")
|
|
262
|
+
.option("-t, --type <type>", "Report type (full-analysis, agent-usage, performance, orchestration, context-awareness)", "full-analysis")
|
|
263
|
+
.option("-o, --output <file>", "Output file path")
|
|
264
|
+
.option("--daily", "Daily report (full-analysis for last 24 hours)")
|
|
265
|
+
.option("--performance", "Performance report")
|
|
266
|
+
.option("--compliance", "Compliance report (codex violations)")
|
|
267
|
+
.option("--session", "Current session report")
|
|
268
|
+
.option("--ci", "CI-friendly JSON output for pipelines")
|
|
269
|
+
.action(async (options) => {
|
|
270
|
+
// Resolve convenience flags to report type
|
|
271
|
+
const typeMap = {
|
|
272
|
+
daily: "full-analysis",
|
|
273
|
+
performance: "performance",
|
|
274
|
+
compliance: "full-analysis",
|
|
275
|
+
session: "full-analysis",
|
|
276
|
+
ci: "full-analysis",
|
|
277
|
+
};
|
|
278
|
+
let reportType = options.type;
|
|
279
|
+
let outputFormat = "json";
|
|
280
|
+
// Convenience flags override --type
|
|
281
|
+
for (const [flag, mappedType] of Object.entries(typeMap)) {
|
|
282
|
+
if (options[flag]) {
|
|
283
|
+
reportType = mappedType;
|
|
284
|
+
break;
|
|
285
|
+
}
|
|
286
|
+
}
|
|
287
|
+
// CI mode always outputs JSON
|
|
288
|
+
if (options.ci) {
|
|
289
|
+
outputFormat = "json";
|
|
290
|
+
}
|
|
291
|
+
const label = options.ci
|
|
292
|
+
? "ci"
|
|
293
|
+
: options.daily
|
|
294
|
+
? "daily"
|
|
295
|
+
: options.performance
|
|
296
|
+
? "performance"
|
|
297
|
+
: options.compliance
|
|
298
|
+
? "compliance"
|
|
299
|
+
: options.session
|
|
300
|
+
? "session"
|
|
301
|
+
: reportType;
|
|
302
|
+
console.log(`📊 xray Framework Report: ${label}`);
|
|
303
|
+
console.log("==========================================");
|
|
304
|
+
console.log("");
|
|
305
|
+
try {
|
|
306
|
+
// Import and run the reporting system directly
|
|
307
|
+
const { FrameworkReportingSystem } = await import("../reporting/framework-reporting-system.js");
|
|
308
|
+
const reportingSystem = new FrameworkReportingSystem();
|
|
309
|
+
const report = await reportingSystem.generateReport({
|
|
310
|
+
type: reportType,
|
|
311
|
+
outputFormat,
|
|
312
|
+
});
|
|
313
|
+
if (options.output) {
|
|
314
|
+
const fs = await import("fs");
|
|
315
|
+
fs.writeFileSync(options.output, report);
|
|
316
|
+
console.log(`✅ Report saved to: ${options.output}`);
|
|
317
|
+
}
|
|
318
|
+
else {
|
|
319
|
+
console.log(report);
|
|
320
|
+
}
|
|
321
|
+
}
|
|
322
|
+
catch (error) {
|
|
323
|
+
console.error("❌ Report generation failed:", error instanceof Error ? error.message : String(error));
|
|
324
|
+
console.log("");
|
|
325
|
+
console.log("💡 Troubleshooting:");
|
|
326
|
+
console.log(" • Make sure OpenCode is running");
|
|
327
|
+
console.log(" • Check framework installation: npx xray status");
|
|
328
|
+
console.log(" • Try manual report: framework-reporting-system generate-report");
|
|
329
|
+
process.exit(1);
|
|
330
|
+
}
|
|
331
|
+
});
|
|
332
|
+
program
|
|
333
|
+
.command("fix")
|
|
334
|
+
.description("Automatically fix common framework issues by running the postinstall setup")
|
|
335
|
+
.action(async () => {
|
|
336
|
+
console.log("🔧 xray Framework Fix");
|
|
337
|
+
console.log("===========================");
|
|
338
|
+
console.log("");
|
|
339
|
+
try {
|
|
340
|
+
console.log("Running postinstall setup to restore configuration...");
|
|
341
|
+
// Run the postinstaller script (same as install command)
|
|
342
|
+
const postinstallScript = join(packageRoot, "scripts", "node", "postinstall.cjs");
|
|
343
|
+
// SECURITY: Validate script path before execution
|
|
344
|
+
validateScriptPath(postinstallScript, "postinstall script");
|
|
345
|
+
execSync(`node "${postinstallScript}"`, {
|
|
346
|
+
stdio: "inherit",
|
|
347
|
+
cwd: process.cwd(),
|
|
348
|
+
});
|
|
349
|
+
console.log("");
|
|
350
|
+
console.log("🎉 Framework configuration restored successfully!");
|
|
351
|
+
console.log("");
|
|
352
|
+
console.log("💡 Next steps:");
|
|
353
|
+
console.log(" • Restart OpenCode to load the restored configuration");
|
|
354
|
+
console.log(" • Run: npx xray health (to verify everything works)");
|
|
355
|
+
console.log(" • Try: @security-auditor scan this project");
|
|
356
|
+
}
|
|
357
|
+
catch (error) {
|
|
358
|
+
console.error("❌ Fix command failed:", error instanceof Error ? error.message : String(error));
|
|
359
|
+
console.log("");
|
|
360
|
+
console.log("💡 Manual fix options:");
|
|
361
|
+
console.log(" • Delete .opencode/ and .xray/ directories");
|
|
362
|
+
console.log(" • Run: npx xray install");
|
|
363
|
+
console.log(" • Or manually restore missing configuration files");
|
|
364
|
+
process.exit(1);
|
|
365
|
+
}
|
|
366
|
+
});
|
|
367
|
+
// Analytics command - pattern analysis, insights, and consent management
|
|
368
|
+
program
|
|
369
|
+
.command("analytics")
|
|
370
|
+
.description("xray Central Analytics - Pattern analysis, insights, and consent management\n" +
|
|
371
|
+
" In v1.7.2+: Includes consent management with granular control\n" +
|
|
372
|
+
" Use 'npx xray analytics enable' to opt-in to data sharing\n" +
|
|
373
|
+
" Core classes: ConsentManager, AnonymizationEngine available programmatically")
|
|
374
|
+
.option("-l, --limit <number>", "Limit analysis to last N task completions")
|
|
375
|
+
.option("-o, --output <file>", "Save report to file")
|
|
376
|
+
.action(async (opts) => {
|
|
377
|
+
console.log("📊 xray Pattern Analytics");
|
|
378
|
+
console.log("==============================");
|
|
379
|
+
console.log("");
|
|
380
|
+
try {
|
|
381
|
+
// Dynamic import to avoid loading analytics module unless needed
|
|
382
|
+
const { SimplePatternAnalyzer } = await import("../analytics/simple-pattern-analyzer.js");
|
|
383
|
+
// Get default limit from features.json
|
|
384
|
+
const fs = await import("fs");
|
|
385
|
+
const path = await import("path");
|
|
386
|
+
let defaultLimit = 500;
|
|
387
|
+
try {
|
|
388
|
+
const featuresPath = path.join(process.cwd(), ".opencode", "plugins", "features.json"); // plain xray primary (min compat .strray/ handled in getConfigDir per Scope Rule)
|
|
389
|
+
if (fs.existsSync(featuresPath)) {
|
|
390
|
+
const features = JSON.parse(fs.readFileSync(featuresPath, "utf-8"));
|
|
391
|
+
defaultLimit = features.analytics?.default_limit || 500;
|
|
392
|
+
}
|
|
393
|
+
}
|
|
394
|
+
catch { /* use default */ }
|
|
395
|
+
const analyzer = new SimplePatternAnalyzer();
|
|
396
|
+
const limit = parseInt(opts.limit) || defaultLimit;
|
|
397
|
+
console.log(`Analyzing last ${limit} task completions...`);
|
|
398
|
+
console.log("");
|
|
399
|
+
const insights = await analyzer.analyze(limit);
|
|
400
|
+
const insightsLines = analyzer.generateInsights(insights);
|
|
401
|
+
// Print insights
|
|
402
|
+
insightsLines.forEach((line) => {
|
|
403
|
+
console.log(line);
|
|
404
|
+
});
|
|
405
|
+
// Save to file if requested
|
|
406
|
+
if (opts.output) {
|
|
407
|
+
const fs = await import("fs");
|
|
408
|
+
const report = await analyzer.generateReport();
|
|
409
|
+
fs.writeFileSync(opts.output, report);
|
|
410
|
+
console.log("");
|
|
411
|
+
console.log(`✅ Report saved to: ${opts.output}`);
|
|
412
|
+
}
|
|
413
|
+
console.log("");
|
|
414
|
+
console.log("💡 Run regularly to track agent performance and complexity accuracy");
|
|
415
|
+
}
|
|
416
|
+
catch (error) {
|
|
417
|
+
console.error("❌ Analytics failed:", error instanceof Error ? error.message : String(error));
|
|
418
|
+
process.exit(1);
|
|
419
|
+
}
|
|
420
|
+
});
|
|
421
|
+
program
|
|
422
|
+
.command("doctor")
|
|
423
|
+
.description("Diagnose framework issues (does not fix them)")
|
|
424
|
+
.action(async () => {
|
|
425
|
+
console.log("🩺 xray Framework Doctor");
|
|
426
|
+
console.log("===============================");
|
|
427
|
+
console.log("");
|
|
428
|
+
try {
|
|
429
|
+
const fs = await import("fs");
|
|
430
|
+
const path = await import("path");
|
|
431
|
+
const issues = [];
|
|
432
|
+
const fixes = [];
|
|
433
|
+
// Check Node.js version
|
|
434
|
+
const nodeVersion = process.version;
|
|
435
|
+
const versionParts = nodeVersion.slice(1).split(".");
|
|
436
|
+
const majorVersion = parseInt(versionParts[0] || "0");
|
|
437
|
+
if (majorVersion < 18) {
|
|
438
|
+
issues.push("Node.js version too old");
|
|
439
|
+
fixes.push("Upgrade to Node.js 18+");
|
|
440
|
+
}
|
|
441
|
+
else {
|
|
442
|
+
console.log("✅ Node.js version:", nodeVersion);
|
|
443
|
+
}
|
|
444
|
+
// Check package installation
|
|
445
|
+
const packageExists = fs.existsSync(path.join(process.cwd(), "node_modules", "0xray"));
|
|
446
|
+
if (!packageExists) {
|
|
447
|
+
issues.push("xray package not installed");
|
|
448
|
+
fixes.push("Run: npm install xray");
|
|
449
|
+
}
|
|
450
|
+
else {
|
|
451
|
+
console.log("✅ xray package installed");
|
|
452
|
+
}
|
|
453
|
+
// Check configuration - check for opencode.json or .strray/ (min compat .strray/ fallback for prior StringRay consumer runtime per Scope Rule; plain xray primary)
|
|
454
|
+
const cwd = process.cwd();
|
|
455
|
+
const opencodeConfigPath = path.join(cwd, "opencode.json");
|
|
456
|
+
const strrayDir = getConfigDir(cwd);
|
|
457
|
+
const opencodeExists = fs.existsSync(opencodeConfigPath);
|
|
458
|
+
const strrayDirExists = fs.existsSync(strrayDir);
|
|
459
|
+
if (opencodeExists) {
|
|
460
|
+
console.log("✅ opencode configuration found");
|
|
461
|
+
}
|
|
462
|
+
else if (strrayDirExists) {
|
|
463
|
+
console.log(`✅ Configuration directory found: ${strrayDir}`);
|
|
464
|
+
}
|
|
465
|
+
else {
|
|
466
|
+
console.log("ℹ️ No opencode.json or config directory found (run: npx xray fix to create)");
|
|
467
|
+
}
|
|
468
|
+
// Check for common issues
|
|
469
|
+
const mcpConfigExists = fs.existsSync(path.join(process.cwd(), ".mcp.json"));
|
|
470
|
+
if (mcpConfigExists) {
|
|
471
|
+
console.log("ℹ️ Found .mcp.json - may conflict with framework");
|
|
472
|
+
fixes.push("Consider removing .mcp.json or excluding framework servers");
|
|
473
|
+
}
|
|
474
|
+
console.log("");
|
|
475
|
+
if (issues.length === 0) {
|
|
476
|
+
console.log("🎉 No issues found! Framework is healthy.");
|
|
477
|
+
console.log("");
|
|
478
|
+
console.log("💡 Pro tips:");
|
|
479
|
+
console.log(" • Use @security-auditor for code quality checks");
|
|
480
|
+
console.log(" • Run reports regularly: npx xray report");
|
|
481
|
+
console.log(" • Check health anytime: npx xray health");
|
|
482
|
+
}
|
|
483
|
+
else {
|
|
484
|
+
console.log("⚠️ Issues found:");
|
|
485
|
+
issues.forEach((issue, i) => {
|
|
486
|
+
console.log(` ${i + 1}. ${issue}`);
|
|
487
|
+
});
|
|
488
|
+
console.log("");
|
|
489
|
+
console.log('🔧 Run "npx xray fix" to automatically fix these issues');
|
|
490
|
+
}
|
|
491
|
+
}
|
|
492
|
+
catch (error) {
|
|
493
|
+
console.error("❌ Doctor check failed:", error instanceof Error ? error.message : String(error));
|
|
494
|
+
process.exit(1);
|
|
495
|
+
}
|
|
496
|
+
});
|
|
497
|
+
// Archive logs command - standalone, no framework boot required
|
|
498
|
+
program
|
|
499
|
+
.command("archive-logs")
|
|
500
|
+
.description("Archive log files without framework boot (for git hooks)")
|
|
501
|
+
.option("--dry-run", "Show what would be archived without making changes")
|
|
502
|
+
.option("-v, --verbose", "Verbose output")
|
|
503
|
+
.action(async (opts) => {
|
|
504
|
+
console.log("📦 xray Log Archive");
|
|
505
|
+
console.log("========================");
|
|
506
|
+
if (opts.dryRun) {
|
|
507
|
+
console.log("(Dry run mode - no changes will be made)");
|
|
508
|
+
}
|
|
509
|
+
try {
|
|
510
|
+
// Import and run standalone archiver
|
|
511
|
+
const archiveModule = await import("./commands/archive-logs.js");
|
|
512
|
+
const result = await archiveModule.archiveLogFiles({
|
|
513
|
+
maxFileSizeMB: 10,
|
|
514
|
+
rotationIntervalHours: 24,
|
|
515
|
+
compressionEnabled: true,
|
|
516
|
+
maxArchives: 10,
|
|
517
|
+
}, `cli-${Date.now()}`);
|
|
518
|
+
console.log(`\n📊 Results:`);
|
|
519
|
+
console.log(` Archived: ${result.archived} files`);
|
|
520
|
+
if (result.errors.length > 0) {
|
|
521
|
+
console.log(` Errors: ${result.errors.length}`);
|
|
522
|
+
result.errors.forEach((e) => console.log(` - ${e}`));
|
|
523
|
+
process.exit(1);
|
|
524
|
+
}
|
|
525
|
+
}
|
|
526
|
+
catch (error) {
|
|
527
|
+
console.error("Archive failed:", error);
|
|
528
|
+
process.exit(1);
|
|
529
|
+
}
|
|
530
|
+
});
|
|
531
|
+
// Inference improvement command
|
|
532
|
+
program
|
|
533
|
+
.command('inference:improve')
|
|
534
|
+
.description('Run autonomous inference improvement cycle')
|
|
535
|
+
.option('--dry-run', 'Show what would change without applying')
|
|
536
|
+
.option('-v, --verbose', 'Verbose output')
|
|
537
|
+
.action(async (options) => {
|
|
538
|
+
console.log('🚀 xray Inference Improvement');
|
|
539
|
+
console.log('=================================');
|
|
540
|
+
console.log('');
|
|
541
|
+
try {
|
|
542
|
+
const { LearningEngine } = await import('../delegation/analytics/learning-engine.js');
|
|
543
|
+
const { routingOutcomeTracker } = await import('../delegation/analytics/outcome-tracker.js');
|
|
544
|
+
const { patternPerformanceTracker } = await import('../analytics/pattern-performance-tracker.js');
|
|
545
|
+
const { getAdaptiveKernel } = await import('../core/adaptive-kernel.js');
|
|
546
|
+
// Reload fresh data
|
|
547
|
+
routingOutcomeTracker.reloadFromDisk();
|
|
548
|
+
patternPerformanceTracker.loadFromDisk();
|
|
549
|
+
const outcomes = routingOutcomeTracker.getOutcomes();
|
|
550
|
+
console.log(`📊 Loaded ${outcomes.length} routing outcomes`);
|
|
551
|
+
// Generate performance report
|
|
552
|
+
const perfMetrics = patternPerformanceTracker.getAllPatternMetrics();
|
|
553
|
+
console.log(` Patterns tracked: ${perfMetrics.length}`);
|
|
554
|
+
const successOutcomes = outcomes.filter(o => o.success);
|
|
555
|
+
const successRate = outcomes.length > 0 ? (successOutcomes.length / outcomes.length * 100).toFixed(1) : '100.0';
|
|
556
|
+
console.log(` Overall success rate: ${successRate}%`);
|
|
557
|
+
console.log('');
|
|
558
|
+
// Trigger learning
|
|
559
|
+
const engine = new LearningEngine(true);
|
|
560
|
+
const learningResult = await engine.triggerLearning();
|
|
561
|
+
console.log(`🧠 Learning Results:`);
|
|
562
|
+
console.log(` Patterns analyzed: ${learningResult.patternsAnalyzed}`);
|
|
563
|
+
console.log(` Adaptations: ${learningResult.adaptations}`);
|
|
564
|
+
// Get drift analysis
|
|
565
|
+
const driftAnalysis = engine.getPatternDriftAnalysis();
|
|
566
|
+
console.log(`\n📈 Pattern Drift:`);
|
|
567
|
+
console.log(` Drift detected: ${driftAnalysis.driftDetected}`);
|
|
568
|
+
console.log(` Severity: ${driftAnalysis.severity}`);
|
|
569
|
+
if (driftAnalysis.affectedPatterns.length > 0) {
|
|
570
|
+
console.log(` Affected: ${driftAnalysis.affectedPatterns.slice(0, 5).join(', ')}`);
|
|
571
|
+
}
|
|
572
|
+
// Get adaptive kernel stats
|
|
573
|
+
const kernel = getAdaptiveKernel();
|
|
574
|
+
const kernelStats = kernel.getLearningStats();
|
|
575
|
+
console.log(`\n⚙️ Kernel Stats:`);
|
|
576
|
+
console.log(` Patterns tracked: ${kernelStats.patternsTracked}`);
|
|
577
|
+
console.log(` Thresholds calibrated: ${kernelStats.thresholdsCalibrated}`);
|
|
578
|
+
// Get suggestions
|
|
579
|
+
if (!options.dryRun) {
|
|
580
|
+
const suggestions = engine.suggestImprovements();
|
|
581
|
+
if (suggestions.length > 0) {
|
|
582
|
+
console.log(`\n💡 Suggestions:`);
|
|
583
|
+
suggestions.slice(0, 5).forEach((s, i) => {
|
|
584
|
+
console.log(` ${i + 1}. [${s.type}] ${s.description} (${s.impact} impact)`);
|
|
585
|
+
});
|
|
586
|
+
}
|
|
587
|
+
console.log(`\n✅ Inference improvement cycle complete`);
|
|
588
|
+
}
|
|
589
|
+
else {
|
|
590
|
+
console.log(`\n💡 Dry run - no changes applied`);
|
|
591
|
+
}
|
|
592
|
+
console.log('');
|
|
593
|
+
}
|
|
594
|
+
catch (error) {
|
|
595
|
+
console.error('❌ Inference improvement failed:', error instanceof Error ? error.message : String(error));
|
|
596
|
+
process.exit(1);
|
|
597
|
+
}
|
|
598
|
+
});
|
|
599
|
+
// Inference tuner command
|
|
600
|
+
program
|
|
601
|
+
.command('inference:tuner')
|
|
602
|
+
.description('Start/stop the autonomous inference tuner service')
|
|
603
|
+
.option('-s, --start', 'Start the tuner service')
|
|
604
|
+
.option('-t, --stop', 'Stop the tuner service')
|
|
605
|
+
.option('-r, --run-once', 'Run a single tuning cycle')
|
|
606
|
+
.option('-S, --status', 'Show tuner status')
|
|
607
|
+
.action(async (options) => {
|
|
608
|
+
const { inferenceTuner } = await import('../services/inference-tuner.js');
|
|
609
|
+
if (options.status) {
|
|
610
|
+
const status = inferenceTuner.getStatus();
|
|
611
|
+
console.log('🎛️ Inference Tuner Status');
|
|
612
|
+
console.log('=========================');
|
|
613
|
+
console.log(` Running: ${status.running ? '✅ Yes' : '❌ No'}`);
|
|
614
|
+
console.log(` Last tuning: ${status.lastTuningTime ? new Date(status.lastTuningTime).toISOString() : 'Never'}`);
|
|
615
|
+
console.log(` Auto-update mappings: ${status.config.autoUpdateMappings}`);
|
|
616
|
+
console.log(` Auto-update thresholds: ${status.config.autoUpdateThresholds}`);
|
|
617
|
+
console.log(` Learning interval: ${status.config.learningIntervalMs}ms`);
|
|
618
|
+
return;
|
|
619
|
+
}
|
|
620
|
+
if (options.start) {
|
|
621
|
+
inferenceTuner.start();
|
|
622
|
+
console.log('✅ Inference tuner started');
|
|
623
|
+
console.log(` Interval: ${inferenceTuner.getStatus().config.learningIntervalMs}ms`);
|
|
624
|
+
console.log(' Press Ctrl+C to stop');
|
|
625
|
+
return;
|
|
626
|
+
}
|
|
627
|
+
if (options.stop) {
|
|
628
|
+
inferenceTuner.stop();
|
|
629
|
+
console.log('✅ Inference tuner stopped');
|
|
630
|
+
return;
|
|
631
|
+
}
|
|
632
|
+
if (options.runOnce) {
|
|
633
|
+
console.log('🎛️ Running single tuning cycle...');
|
|
634
|
+
await inferenceTuner.runTuningCycle();
|
|
635
|
+
console.log('✅ Tuning cycle complete');
|
|
636
|
+
return;
|
|
637
|
+
}
|
|
638
|
+
console.log('Usage: npx xray inference:tuner [options]');
|
|
639
|
+
console.log(' --start Start the tuner service');
|
|
640
|
+
console.log(' --stop Stop the tuner service');
|
|
641
|
+
console.log(' --run-once Run a single tuning cycle');
|
|
642
|
+
console.log(' --status Show tuner status');
|
|
643
|
+
});
|
|
644
|
+
// Inference cycle run command
|
|
645
|
+
program
|
|
646
|
+
.command('inference:run')
|
|
647
|
+
.description('Run a self-improvement inference cycle: collect → propose → govern → verify')
|
|
648
|
+
.option('-f, --force', 'Force cycle even if threshold not met')
|
|
649
|
+
.option('--no-verify', 'Skip deploy verification step')
|
|
650
|
+
.option('--no-apply', 'Skip applying approved proposals (create PRs)')
|
|
651
|
+
.option('--no-researcher-review', 'Skip downstream researcher review of PRs')
|
|
652
|
+
.option('--json', 'Output raw JSON result')
|
|
653
|
+
.action(async (options) => {
|
|
654
|
+
const { InferenceCycle } = await import('../inference/inference-cycle.js');
|
|
655
|
+
const { shouldTriggerCycle } = await import('../inference/inference-accumulator.js');
|
|
656
|
+
const { accumulateCorpus } = await import('../inference/inference-accumulator.js');
|
|
657
|
+
const { featuresConfigLoader } = await import('../core/features-config.js');
|
|
658
|
+
const { initializeGovernanceIntegration, shutdownGovernanceIntegration } = await import('../integrations/governance/index.js');
|
|
659
|
+
// Guard: inference:run is internal to xray development only
|
|
660
|
+
const isxrayRepo = (() => {
|
|
661
|
+
try {
|
|
662
|
+
const pkg = JSON.parse(readFileSync(join(process.cwd(), 'package.json'), 'utf-8'));
|
|
663
|
+
return pkg.name === '0xray' && process.env.NODE_ENV !== 'consumer';
|
|
664
|
+
}
|
|
665
|
+
catch {
|
|
666
|
+
return false;
|
|
667
|
+
}
|
|
668
|
+
})();
|
|
669
|
+
if (!isxrayRepo) {
|
|
670
|
+
if (options.json) {
|
|
671
|
+
console.log(JSON.stringify({ triggered: false, reason: 'inference:run is for xray development only (internal tool)' }));
|
|
672
|
+
}
|
|
673
|
+
else {
|
|
674
|
+
console.log('The inference:run command is for xray framework development only.');
|
|
675
|
+
console.log('It is not intended for consumer projects.');
|
|
676
|
+
}
|
|
677
|
+
return;
|
|
678
|
+
}
|
|
679
|
+
const features = featuresConfigLoader.loadConfig();
|
|
680
|
+
const inferenceConfig = features?.inference;
|
|
681
|
+
if (!inferenceConfig?.enabled) {
|
|
682
|
+
if (options.json) {
|
|
683
|
+
console.log(JSON.stringify({ triggered: false, reason: 'Inference feature disabled in features.json' }));
|
|
684
|
+
}
|
|
685
|
+
else {
|
|
686
|
+
console.log('Inference feature is disabled in features.json.');
|
|
687
|
+
console.log('Enable it by setting inference.enabled = true in .opencode/plugins/features.json (min compat .strray/ fallback for prior StringRay consumer runtime per Scope Rule)');
|
|
688
|
+
}
|
|
689
|
+
return;
|
|
690
|
+
}
|
|
691
|
+
const projectRoot = process.cwd();
|
|
692
|
+
const inferenceDir = `${projectRoot}/docs/inference`;
|
|
693
|
+
const stateDir = `${projectRoot}/.strray/inference`;
|
|
694
|
+
const stateFile = `${stateDir}/inference-cycle-state.json`;
|
|
695
|
+
if (!options.json) {
|
|
696
|
+
console.log('xray Inference Cycle');
|
|
697
|
+
console.log('====================');
|
|
698
|
+
}
|
|
699
|
+
if (!options.force) {
|
|
700
|
+
const threshold = shouldTriggerCycle(inferenceDir, stateFile);
|
|
701
|
+
if (!threshold.trigger) {
|
|
702
|
+
if (options.json) {
|
|
703
|
+
console.log(JSON.stringify({ triggered: false, reason: threshold.reason }));
|
|
704
|
+
}
|
|
705
|
+
else {
|
|
706
|
+
console.log(`Not triggered: ${threshold.reason}`);
|
|
707
|
+
console.log('Use --force to override.');
|
|
708
|
+
}
|
|
709
|
+
return;
|
|
710
|
+
}
|
|
711
|
+
if (!options.json) {
|
|
712
|
+
console.log(`Triggered: ${threshold.reason}`);
|
|
713
|
+
}
|
|
714
|
+
}
|
|
715
|
+
else if (!options.json) {
|
|
716
|
+
console.log('Force mode — skipping threshold check');
|
|
717
|
+
}
|
|
718
|
+
if (!options.json) {
|
|
719
|
+
const corpus = accumulateCorpus(inferenceDir);
|
|
720
|
+
console.log(`\nCorpus: ${corpus.sessions.length} sessions, ${corpus.totalCommits} commits`);
|
|
721
|
+
console.log(` Recurring problems: ${corpus.recurringProblems.length}`);
|
|
722
|
+
console.log(` Recurring patterns: ${corpus.recurringPatterns.length}`);
|
|
723
|
+
}
|
|
724
|
+
// Initialize external governance integration for two-oscillator governance
|
|
725
|
+
const govConfig = features?.inference_governance;
|
|
726
|
+
if (govConfig?.enabled) {
|
|
727
|
+
await shutdownGovernanceIntegration();
|
|
728
|
+
await initializeGovernanceIntegration();
|
|
729
|
+
}
|
|
730
|
+
const cycle = InferenceCycle.getInstance(projectRoot, { skipDeployVerify: options.noVerify ?? true, skipApply: options.noApply ?? false, skipResearcherReview: options.noResearcherReview ?? false, force: options.force ?? false });
|
|
731
|
+
const result = await cycle.maybeRunCycle();
|
|
732
|
+
if (options.json) {
|
|
733
|
+
console.log(JSON.stringify(result, null, 2));
|
|
734
|
+
return;
|
|
735
|
+
}
|
|
736
|
+
console.log(`\nCycle: ${result.cycleId}`);
|
|
737
|
+
console.log(`Phase: ${result.phase}`);
|
|
738
|
+
console.log(`Duration: ${(result.duration / 1000).toFixed(1)}s`);
|
|
739
|
+
if (result.proposals.length > 0) {
|
|
740
|
+
console.log(`\nProposals (${result.proposals.length}):`);
|
|
741
|
+
for (const p of result.proposals) {
|
|
742
|
+
const icon = p.status === 'approved' || p.status === 'applied' ? 'APPROVED' : p.status === 'rejected' ? 'REJECTED' : p.status === 'failed' ? 'FAILED' : 'PENDING';
|
|
743
|
+
console.log(` [${icon}] ${p.type}: ${p.title} (${(p.confidence * 100).toFixed(0)}%)`);
|
|
744
|
+
}
|
|
745
|
+
}
|
|
746
|
+
else {
|
|
747
|
+
console.log('\nNo proposals generated.');
|
|
748
|
+
}
|
|
749
|
+
if (result.votes.length > 0) {
|
|
750
|
+
console.log(`\nGovernance votes (${result.votes.length}):`);
|
|
751
|
+
for (const v of result.votes) {
|
|
752
|
+
console.log(` ${v.proposalId}: ${v.decision} (${(v.confidence * 100).toFixed(0)}%)`);
|
|
753
|
+
for (const d of v.details) {
|
|
754
|
+
console.log(` ${d}`);
|
|
755
|
+
}
|
|
756
|
+
}
|
|
757
|
+
}
|
|
758
|
+
if (result.deployVerification) {
|
|
759
|
+
console.log(`\nDeploy verification: ${result.deployVerification.success ? 'PASSED' : 'FAILED'}`);
|
|
760
|
+
const failedChecks = result.deployVerification.checks.filter((c) => !c.passed);
|
|
761
|
+
if (failedChecks.length > 0) {
|
|
762
|
+
for (const c of failedChecks) {
|
|
763
|
+
console.log(` Failed: ${c.name} — ${c.output?.substring(0, 200)}`);
|
|
764
|
+
}
|
|
765
|
+
}
|
|
766
|
+
}
|
|
767
|
+
});
|
|
768
|
+
// Publish agent command
|
|
769
|
+
program
|
|
770
|
+
.command('publish-agent')
|
|
771
|
+
.description('Package and publish agents to AgentStore')
|
|
772
|
+
.option('-a, --agent <name>', 'Agent name to publish')
|
|
773
|
+
.option('-v, --version <version>', 'Version to publish (default: 1.0.0)')
|
|
774
|
+
.option('-d, --dry-run', 'Show what would be published without publishing')
|
|
775
|
+
.action(async () => {
|
|
776
|
+
const { publishAgentCommand } = await import('./commands/publish-agent.js');
|
|
777
|
+
await publishAgentCommand();
|
|
778
|
+
});
|
|
779
|
+
// Antigravity status command
|
|
780
|
+
program
|
|
781
|
+
.command('antigravity status')
|
|
782
|
+
.description('Show status of all installed skills')
|
|
783
|
+
.action(async () => {
|
|
784
|
+
const { antigravityStatusCommand } = await import('./commands/antigravity-status.js');
|
|
785
|
+
await antigravityStatusCommand();
|
|
786
|
+
});
|
|
787
|
+
// Credible init command
|
|
788
|
+
program
|
|
789
|
+
.command('credible init')
|
|
790
|
+
.description('Initialize Credible Pod infrastructure')
|
|
791
|
+
.option('-n, --name <name>', 'Pod name')
|
|
792
|
+
.option('-t, --template <template>', 'Pod template to use')
|
|
793
|
+
.action(async () => {
|
|
794
|
+
const { credibleInitCommand } = await import('./commands/credible-init.js');
|
|
795
|
+
await credibleInitCommand();
|
|
796
|
+
});
|
|
797
|
+
// Skill registry command
|
|
798
|
+
program
|
|
799
|
+
.command('skill:registry [action]')
|
|
800
|
+
.description('List, add, or remove skills registry sources')
|
|
801
|
+
.option('--name <name>', 'Source name')
|
|
802
|
+
.option('--url <url>', 'Repository URL')
|
|
803
|
+
.option('--desc <desc>', 'Description')
|
|
804
|
+
.option('--license <license>', 'License type')
|
|
805
|
+
.action(async (action, options) => {
|
|
806
|
+
const { skillRegistryCommand } = await import('./commands/skill-install.js');
|
|
807
|
+
await skillRegistryCommand(action, options);
|
|
808
|
+
});
|
|
809
|
+
// Skill install command
|
|
810
|
+
program
|
|
811
|
+
.command('skill:install [source]')
|
|
812
|
+
.description('Install skills from the registry or any git repo')
|
|
813
|
+
.option('--path <dir>', 'Subdirectory in repo containing skills')
|
|
814
|
+
.option('--force', 'Reinstall even if already installed')
|
|
815
|
+
.action(async (sourceArg, options) => {
|
|
816
|
+
const { skillInstallCommand } = await import('./commands/skill-install.js');
|
|
817
|
+
await skillInstallCommand(sourceArg, options);
|
|
818
|
+
});
|
|
819
|
+
// Storyteller command
|
|
820
|
+
program
|
|
821
|
+
.command('storyteller [type]')
|
|
822
|
+
.description('Write reflections, sagas, journeys, or narratives')
|
|
823
|
+
.option('-t, --title <title>', 'Title for the story')
|
|
824
|
+
.option('-f, --framework <framework>', 'Storytelling framework (three_act_structure, hero_journey, spiral)')
|
|
825
|
+
.option('-o, --output <file>', 'Output file path')
|
|
826
|
+
.option('--dry-run', 'Show prompt without creating file')
|
|
827
|
+
.action(async (type, options) => {
|
|
828
|
+
const { storytellerCommand } = await import('./commands/storyteller.js');
|
|
829
|
+
await storytellerCommand(type, options);
|
|
830
|
+
});
|
|
831
|
+
// MCP install commands - support both hyphen and colon formats
|
|
832
|
+
program
|
|
833
|
+
.command('mcp-list')
|
|
834
|
+
.alias('mcp:list')
|
|
835
|
+
.description('List available community MCP servers')
|
|
836
|
+
.action(async () => {
|
|
837
|
+
const { listMCPsCommand } = await import('./commands/mcp-install.js');
|
|
838
|
+
listMCPsCommand();
|
|
839
|
+
});
|
|
840
|
+
program
|
|
841
|
+
.command('mcp-status')
|
|
842
|
+
.alias('mcp:status')
|
|
843
|
+
.description('Show installed MCP servers')
|
|
844
|
+
.action(async () => {
|
|
845
|
+
const { showMCPStatusCommand } = await import('./commands/mcp-install.js');
|
|
846
|
+
showMCPStatusCommand();
|
|
847
|
+
});
|
|
848
|
+
program
|
|
849
|
+
.command('mcp-install <name>')
|
|
850
|
+
.alias('mcp:install')
|
|
851
|
+
.description('Install an MCP server from the registry')
|
|
852
|
+
.action(async (name) => {
|
|
853
|
+
const { installMCPCommand } = await import('./commands/mcp-install.js');
|
|
854
|
+
await installMCPCommand(name);
|
|
855
|
+
});
|
|
856
|
+
program
|
|
857
|
+
.command('mcp-remove <name>')
|
|
858
|
+
.alias('mcp:remove')
|
|
859
|
+
.description('Remove an installed MCP server')
|
|
860
|
+
.action(async (name) => {
|
|
861
|
+
const { removeMCPCommand } = await import('./commands/mcp-install.js');
|
|
862
|
+
removeMCPCommand(name);
|
|
863
|
+
});
|
|
864
|
+
// MCP server subprocess launchers (used by Grok plugin .mcp.json via npx)
|
|
865
|
+
program
|
|
866
|
+
.command('mcp')
|
|
867
|
+
.description('Run an MCP server subprocess (used by Grok/OpenCode .mcp.json)')
|
|
868
|
+
.argument('<server>', 'Server name: governance or skills')
|
|
869
|
+
.action(async (server) => {
|
|
870
|
+
const serverMap = {
|
|
871
|
+
governance: 'dist/mcps/governance.server.js',
|
|
872
|
+
skills: 'dist/mcps/knowledge-skills/skill-invocation.server.js',
|
|
873
|
+
};
|
|
874
|
+
const relPath = serverMap[server];
|
|
875
|
+
if (!relPath) {
|
|
876
|
+
console.error(`Unknown MCP server: ${server}. Use: governance, skills`);
|
|
877
|
+
process.exit(1);
|
|
878
|
+
}
|
|
879
|
+
const serverPath = resolve(join(packageRoot, relPath));
|
|
880
|
+
if (!existsSync(serverPath)) {
|
|
881
|
+
console.error(`MCP server not found at ${serverPath}. Is xray installed correctly?`);
|
|
882
|
+
process.exit(1);
|
|
883
|
+
}
|
|
884
|
+
const env = { ...process.env };
|
|
885
|
+
if (server === 'governance') {
|
|
886
|
+
env.STRRAY_FORCE_MCP_GOVERNANCE = 'true';
|
|
887
|
+
}
|
|
888
|
+
const child = spawn(process.execPath, [serverPath], { stdio: 'inherit', env });
|
|
889
|
+
child.on('exit', (code) => process.exit(code ?? 0));
|
|
890
|
+
});
|
|
891
|
+
// Grok CLI integration
|
|
892
|
+
const grokCmd = program.command('grok').description('Grok CLI integration commands');
|
|
893
|
+
const { registerGrokCommands } = await import('./commands/grok-install.js');
|
|
894
|
+
registerGrokCommands(grokCmd);
|
|
895
|
+
// Hermes Agent integration
|
|
896
|
+
const hermesCmd = program.command('hermes').description('Hermes Agent integration commands');
|
|
897
|
+
const { registerHermesCommands } = await import('./commands/hermes-install.js');
|
|
898
|
+
registerHermesCommands(hermesCmd);
|
|
899
|
+
// OpenClaw integration
|
|
900
|
+
const openclawCmd = program.command('openclaw').description('OpenClaw integration commands');
|
|
901
|
+
const { registerOpenClawCommands } = await import('./commands/openclaw-install.js');
|
|
902
|
+
registerOpenClawCommands(openclawCmd);
|
|
903
|
+
// OpenCode integration
|
|
904
|
+
const opencodeCmd = program.command('opencode').description('OpenCode integration commands');
|
|
905
|
+
const { registerOpencodeCommands } = await import('./commands/opencode-install.js');
|
|
906
|
+
registerOpencodeCommands(opencodeCmd);
|
|
907
|
+
// Analytics enable command
|
|
908
|
+
// Plugin subcommands
|
|
909
|
+
const pluginCmd = program.command('plugin').description('Manage plugins');
|
|
910
|
+
pluginCmd
|
|
911
|
+
.command('list')
|
|
912
|
+
.description('List installed plugins')
|
|
913
|
+
.action(async () => {
|
|
914
|
+
const { pluginListCommand } = await import('./commands/plugin-commands.js');
|
|
915
|
+
await pluginListCommand();
|
|
916
|
+
});
|
|
917
|
+
pluginCmd
|
|
918
|
+
.command('install <name>')
|
|
919
|
+
.description('Install a plugin')
|
|
920
|
+
.action(async (name) => {
|
|
921
|
+
const { pluginInstallCommand } = await import('./commands/plugin-commands.js');
|
|
922
|
+
await pluginInstallCommand(name);
|
|
923
|
+
});
|
|
924
|
+
pluginCmd
|
|
925
|
+
.command('enable <name>')
|
|
926
|
+
.description('Enable a plugin')
|
|
927
|
+
.action(async (name) => {
|
|
928
|
+
const { pluginEnableCommand } = await import('./commands/plugin-commands.js');
|
|
929
|
+
await pluginEnableCommand(name);
|
|
930
|
+
});
|
|
931
|
+
pluginCmd
|
|
932
|
+
.command('disable <name>')
|
|
933
|
+
.description('Disable a plugin')
|
|
934
|
+
.action(async (name) => {
|
|
935
|
+
const { pluginDisableCommand } = await import('./commands/plugin-commands.js');
|
|
936
|
+
await pluginDisableCommand(name);
|
|
937
|
+
});
|
|
938
|
+
pluginCmd
|
|
939
|
+
.command('status <name>')
|
|
940
|
+
.description('Show plugin details')
|
|
941
|
+
.action(async (name) => {
|
|
942
|
+
const { pluginStatusCommand } = await import('./commands/plugin-commands.js');
|
|
943
|
+
await pluginStatusCommand(name);
|
|
944
|
+
});
|
|
945
|
+
pluginCmd
|
|
946
|
+
.command('uninstall <name>')
|
|
947
|
+
.description('Uninstall a plugin')
|
|
948
|
+
.action(async (name) => {
|
|
949
|
+
const { pluginUninstallCommand } = await import('./commands/plugin-commands.js');
|
|
950
|
+
await pluginUninstallCommand(name);
|
|
951
|
+
});
|
|
952
|
+
// Add help text
|
|
953
|
+
program.addHelpText("after", `
|
|
954
|
+
|
|
955
|
+
Examples:
|
|
956
|
+
$ npx 0xray install # Install xray in current project
|
|
957
|
+
$ npx 0xray init # Initialize configuration
|
|
958
|
+
$ npx 0xray status # Check installation status
|
|
959
|
+
$ npx 0xray validate # Validate framework setup
|
|
960
|
+
$ npx 0xray capabilities # Show all available capabilities
|
|
961
|
+
$ npx 0xray health # Check framework health and status
|
|
962
|
+
$ npx 0xray report # Generate activity and health reports
|
|
963
|
+
$ npx 0xray fix # Automatically restore missing config files
|
|
964
|
+
$ npx 0xray doctor # Diagnose issues (does not fix them)
|
|
965
|
+
$ npx 0xray analytics # Pattern analytics and insights
|
|
966
|
+
$ npx 0xray inference:improve # Run autonomous inference improvement
|
|
967
|
+
$ npx 0xray skill:install agency-agents # Install 170+ agency agent skills
|
|
968
|
+
$ npx 0xray skill:install superpowers # Install 14 agentic workflow skills
|
|
969
|
+
$ npx 0xray skill:install <github-url> # Install from any repo
|
|
970
|
+
$ npx 0xray storyteller saga "v1.18.0 Journey" # Write a saga
|
|
971
|
+
$ npx 0xray storyteller reflection "API Fix" # Write a reflection
|
|
972
|
+
|
|
973
|
+
Quick Start:
|
|
974
|
+
1. Install: npx 0xray install
|
|
975
|
+
2. Check health: npx 0xray health
|
|
976
|
+
3. Use agents: @security-auditor scan
|
|
977
|
+
4. Generate reports: npx 0xray report
|
|
978
|
+
5. Fix issues: npx 0xray fix
|
|
979
|
+
6. View analytics: npx 0xray analytics
|
|
980
|
+
7. Add skills: npx 0xray skill:install agency-agents
|
|
981
|
+
|
|
982
|
+
For more information, visit: https://github.com/0xRayAI/xray
|
|
983
|
+
`);
|
|
984
|
+
// Parse command line arguments
|
|
985
|
+
program.exitOverride();
|
|
986
|
+
program.parse();
|