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,220 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Codex Formatter — Standalone Codex-to-Prompt Converter
|
|
3
|
+
*
|
|
4
|
+
* Converts 0xRay's Universal Development Codex terms into
|
|
5
|
+
* formatted system prompt text. No OpenCode dependency, no plugin
|
|
6
|
+
* API, no framework imports. Pure input/output.
|
|
7
|
+
*
|
|
8
|
+
* This is the decoupled replacement for the codex injection that
|
|
9
|
+
* previously lived inside the OpenCode plugin (xray-codex-injection.ts).
|
|
10
|
+
*
|
|
11
|
+
* Usage from any host (Node.js, Python via bridge, HTTP, etc.):
|
|
12
|
+
* import { formatCodexPrompt } from './codex-formatter.js';
|
|
13
|
+
* const prompt = formatCodexPrompt({ projectRoot: '/path' });
|
|
14
|
+
* // Append to system prompt
|
|
15
|
+
*
|
|
16
|
+
* @version 1.0.0
|
|
17
|
+
* @since 2026-03-28
|
|
18
|
+
*/
|
|
19
|
+
import { readFileSync, existsSync } from "fs";
|
|
20
|
+
import { join, resolve } from "path";
|
|
21
|
+
// ============================================================================
|
|
22
|
+
// Built-in Fallback Codex (when no codex.json is found)
|
|
23
|
+
// ============================================================================
|
|
24
|
+
export const BUILTIN_CODEX = {
|
|
25
|
+
version: "fallback-1.0.0",
|
|
26
|
+
terms: [
|
|
27
|
+
{
|
|
28
|
+
id: "resolve-all-errors",
|
|
29
|
+
title: "Resolve All Errors",
|
|
30
|
+
description: "Never leave unhandled errors, rejected promises, or uncaught exceptions in production code. Every error path must have explicit handling or propagation.",
|
|
31
|
+
severity: "blocking",
|
|
32
|
+
examples: ["catch (err) { logger.error('Operation failed', err); throw err; }"],
|
|
33
|
+
},
|
|
34
|
+
{
|
|
35
|
+
id: "tests-required",
|
|
36
|
+
title: "Tests Required",
|
|
37
|
+
description: "Every new function, method, or module must have corresponding test coverage. Tests should validate both happy path and error cases.",
|
|
38
|
+
severity: "blocking",
|
|
39
|
+
},
|
|
40
|
+
{
|
|
41
|
+
id: "no-console-in-production",
|
|
42
|
+
title: "No Console in Production",
|
|
43
|
+
description: "Use structured logging instead of console.log, console.warn, or console.error. Console statements leak through to agent consoles and create noise.",
|
|
44
|
+
severity: "blocking",
|
|
45
|
+
},
|
|
46
|
+
{
|
|
47
|
+
id: "type-safety",
|
|
48
|
+
title: "Type Safety",
|
|
49
|
+
description: "Prefer explicit types over 'any'. Use TypeScript strict mode features. Validate external data at boundaries.",
|
|
50
|
+
severity: "high",
|
|
51
|
+
},
|
|
52
|
+
{
|
|
53
|
+
id: "input-validation",
|
|
54
|
+
title: "Input Validation",
|
|
55
|
+
description: "Validate all external inputs at the system boundary. Never trust client-side data, environment variables, or API responses without validation.",
|
|
56
|
+
severity: "high",
|
|
57
|
+
},
|
|
58
|
+
{
|
|
59
|
+
id: "immutable-state",
|
|
60
|
+
title: "Immutable State Updates",
|
|
61
|
+
description: "Prefer immutable patterns for state updates. Avoid mutating function parameters or shared state directly.",
|
|
62
|
+
severity: "high",
|
|
63
|
+
},
|
|
64
|
+
{
|
|
65
|
+
id: "error-boundaries",
|
|
66
|
+
title: "Error Boundaries",
|
|
67
|
+
description: "Wrap operations in try/catch with meaningful error messages. Include context about what failed and why.",
|
|
68
|
+
severity: "medium",
|
|
69
|
+
},
|
|
70
|
+
{
|
|
71
|
+
id: "dead-code-elimination",
|
|
72
|
+
title: "Dead Code Elimination",
|
|
73
|
+
description: "Remove unused imports, variables, functions, and commented-out code before committing.",
|
|
74
|
+
severity: "medium",
|
|
75
|
+
},
|
|
76
|
+
],
|
|
77
|
+
};
|
|
78
|
+
// ============================================================================
|
|
79
|
+
// Config Resolution
|
|
80
|
+
// ============================================================================
|
|
81
|
+
/**
|
|
82
|
+
* Find codex.json using the standard priority chain.
|
|
83
|
+
* Mirrors config-paths.ts resolveCodexPath() but returns first match.
|
|
84
|
+
*/
|
|
85
|
+
export function findCodexPath(projectRoot) {
|
|
86
|
+
const root = projectRoot || process.cwd();
|
|
87
|
+
const envDir = process.env.STRRAY_CONFIG_DIR;
|
|
88
|
+
const candidates = [];
|
|
89
|
+
if (envDir) {
|
|
90
|
+
candidates.push(resolve(root, envDir, "codex.json"));
|
|
91
|
+
}
|
|
92
|
+
candidates.push(join(root, ".strray", "codex.json"));
|
|
93
|
+
candidates.push(join(root, ".opencode", "strray", "codex.json"));
|
|
94
|
+
// Additional fallback locations (for standalone usage)
|
|
95
|
+
candidates.push(join(root, "codex.json"));
|
|
96
|
+
candidates.push(join(root, "src", "codex.json"));
|
|
97
|
+
candidates.push(join(root, "docs", "agents", "codex.json"));
|
|
98
|
+
for (const candidate of candidates) {
|
|
99
|
+
if (existsSync(candidate)) {
|
|
100
|
+
return candidate;
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
return null;
|
|
104
|
+
}
|
|
105
|
+
/**
|
|
106
|
+
* Load and parse codex.json. Falls back to built-in codex if not found.
|
|
107
|
+
*/
|
|
108
|
+
export function loadCodex(projectRoot) {
|
|
109
|
+
const codexPath = findCodexPath(projectRoot);
|
|
110
|
+
if (codexPath) {
|
|
111
|
+
try {
|
|
112
|
+
const raw = readFileSync(codexPath, "utf-8");
|
|
113
|
+
const config = JSON.parse(raw);
|
|
114
|
+
return { config, source: codexPath };
|
|
115
|
+
}
|
|
116
|
+
catch {
|
|
117
|
+
// Fall through to built-in
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
return { config: BUILTIN_CODEX, source: null };
|
|
121
|
+
}
|
|
122
|
+
// ============================================================================
|
|
123
|
+
// Formatting
|
|
124
|
+
// ============================================================================
|
|
125
|
+
const SEVERITY_LABELS = {
|
|
126
|
+
blocking: "BLOCKING",
|
|
127
|
+
high: "HIGH PRIORITY",
|
|
128
|
+
medium: "MEDIUM",
|
|
129
|
+
};
|
|
130
|
+
const SEVERITY_EMOJI = {
|
|
131
|
+
blocking: "🔴",
|
|
132
|
+
high: "🟡",
|
|
133
|
+
medium: "🟢",
|
|
134
|
+
};
|
|
135
|
+
/**
|
|
136
|
+
* Format codex terms into a system-prompt-ready string.
|
|
137
|
+
*
|
|
138
|
+
* This is the primary export. Any host (OpenCode, Hermes, Claude Desktop,
|
|
139
|
+
* custom agent) can call this to get enforcement text for their system prompt.
|
|
140
|
+
*/
|
|
141
|
+
export function formatCodexPrompt(options = {}) {
|
|
142
|
+
const { projectRoot, severityFilter, includeExamples = false, maxTerms, header, includeConfigPath = true, compressed = false, } = options;
|
|
143
|
+
const { config, source } = loadCodex(projectRoot);
|
|
144
|
+
// Filter terms by severity
|
|
145
|
+
let terms = config.terms;
|
|
146
|
+
if (severityFilter && severityFilter.length > 0) {
|
|
147
|
+
terms = terms.filter((t) => severityFilter.includes(t.severity));
|
|
148
|
+
}
|
|
149
|
+
// Sort by severity (blocking first, then high, then medium)
|
|
150
|
+
const severityOrder = { blocking: 0, high: 1, medium: 2 };
|
|
151
|
+
terms = [...terms].sort((a, b) => (severityOrder[a.severity] ?? 3) - (severityOrder[b.severity] ?? 3));
|
|
152
|
+
// Limit term count
|
|
153
|
+
if (maxTerms && terms.length > maxTerms) {
|
|
154
|
+
terms = terms.slice(0, maxTerms);
|
|
155
|
+
}
|
|
156
|
+
// Build prompt sections
|
|
157
|
+
const parts = [];
|
|
158
|
+
// Header
|
|
159
|
+
if (header) {
|
|
160
|
+
parts.push(header);
|
|
161
|
+
}
|
|
162
|
+
else {
|
|
163
|
+
parts.push(`## 0xRay Universal Development Codex v${config.version}`);
|
|
164
|
+
parts.push("The following rules are enforced on all code operations. Violations will be caught by quality gates.");
|
|
165
|
+
}
|
|
166
|
+
// Terms
|
|
167
|
+
for (const term of terms) {
|
|
168
|
+
const emoji = SEVERITY_EMOJI[term.severity] || "⚪";
|
|
169
|
+
const label = SEVERITY_LABELS[term.severity] || term.severity.toUpperCase();
|
|
170
|
+
const line = `\n**${emoji} ${term.id}** [${label}]`;
|
|
171
|
+
parts.push(line);
|
|
172
|
+
// Always include description for blocking/high, skip for medium when compressed
|
|
173
|
+
if (term.description && !(compressed && term.severity === "medium")) {
|
|
174
|
+
parts.push(` ${term.description}`);
|
|
175
|
+
}
|
|
176
|
+
if (includeExamples && term.examples && term.examples.length > 0) {
|
|
177
|
+
parts.push(" Examples:");
|
|
178
|
+
for (const example of term.examples) {
|
|
179
|
+
parts.push(` \`${example}\``);
|
|
180
|
+
}
|
|
181
|
+
}
|
|
182
|
+
}
|
|
183
|
+
// Footer
|
|
184
|
+
if (includeConfigPath && source) {
|
|
185
|
+
parts.push(`\n_Config source: ${source}_`);
|
|
186
|
+
}
|
|
187
|
+
const prompt = parts.join("\n");
|
|
188
|
+
return {
|
|
189
|
+
prompt,
|
|
190
|
+
termCount: terms.length,
|
|
191
|
+
totalTerms: config.terms.length,
|
|
192
|
+
version: config.version,
|
|
193
|
+
configPath: source,
|
|
194
|
+
charCount: prompt.length,
|
|
195
|
+
};
|
|
196
|
+
}
|
|
197
|
+
/**
|
|
198
|
+
* Get codex as a structured JSON object (for programmatic consumers).
|
|
199
|
+
*/
|
|
200
|
+
export function getCodexConfig(options = {}) {
|
|
201
|
+
const { config, source } = loadCodex(options.projectRoot);
|
|
202
|
+
return {
|
|
203
|
+
version: config.version,
|
|
204
|
+
terms: config.terms,
|
|
205
|
+
termCount: config.terms.length,
|
|
206
|
+
source,
|
|
207
|
+
};
|
|
208
|
+
}
|
|
209
|
+
/**
|
|
210
|
+
* Get a minimal codex prompt for token-constrained environments.
|
|
211
|
+
* Only includes blocking terms, no descriptions.
|
|
212
|
+
*/
|
|
213
|
+
export function formatMinimalCodexPrompt(options = {}) {
|
|
214
|
+
return formatCodexPrompt({
|
|
215
|
+
...options,
|
|
216
|
+
severityFilter: ["blocking"],
|
|
217
|
+
compressed: true,
|
|
218
|
+
includeConfigPath: false,
|
|
219
|
+
});
|
|
220
|
+
}
|
|
@@ -0,0 +1,424 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 0xRay Codex Context Injector Hook
|
|
3
|
+
*
|
|
4
|
+
* Injects Universal Development Codex v1.2.0 context into agent operations.
|
|
5
|
+
* Follows production-tested pattern from rules-injector.
|
|
6
|
+
*
|
|
7
|
+
* @version 1.0.0
|
|
8
|
+
* @since 2026-01-06
|
|
9
|
+
*/
|
|
10
|
+
import * as fs from "fs";
|
|
11
|
+
import * as path from "path";
|
|
12
|
+
import { frameworkLogger } from "../core/framework-logger.js";
|
|
13
|
+
import { resolveCodexPath } from "./config-paths.js";
|
|
14
|
+
// Dynamic imports for cross-environment compatibility
|
|
15
|
+
let extractCodexMetadata;
|
|
16
|
+
let StringRayContextLoader;
|
|
17
|
+
let importsInitialized = false;
|
|
18
|
+
async function initializeImports() {
|
|
19
|
+
if (importsInitialized)
|
|
20
|
+
return;
|
|
21
|
+
try {
|
|
22
|
+
const codexParser = await import("../utils/codex-parser.js");
|
|
23
|
+
const contextLoaderModule = await import("./context-loader.js");
|
|
24
|
+
extractCodexMetadata = codexParser.extractCodexMetadata;
|
|
25
|
+
StringRayContextLoader = contextLoaderModule.StringRayContextLoader;
|
|
26
|
+
}
|
|
27
|
+
catch {
|
|
28
|
+
const codexParser = await import("../utils/codex-parser");
|
|
29
|
+
const contextLoaderModule = await import("./context-loader");
|
|
30
|
+
extractCodexMetadata = codexParser.extractCodexMetadata;
|
|
31
|
+
StringRayContextLoader = contextLoaderModule.StringRayContextLoader;
|
|
32
|
+
}
|
|
33
|
+
importsInitialized = true;
|
|
34
|
+
}
|
|
35
|
+
/**
|
|
36
|
+
* Session cache for codex context
|
|
37
|
+
*/
|
|
38
|
+
const codexCache = new Map();
|
|
39
|
+
/**
|
|
40
|
+
* Codex file locations resolved through the standard priority chain.
|
|
41
|
+
* Uses config-paths.ts resolver so STRRAY_CONFIG_DIR and .strray/ work.
|
|
42
|
+
*/
|
|
43
|
+
function getCodexFileLocations(projectRoot) {
|
|
44
|
+
const root = projectRoot || process.cwd();
|
|
45
|
+
return resolveCodexPath(root);
|
|
46
|
+
}
|
|
47
|
+
/**
|
|
48
|
+
* Read file content safely
|
|
49
|
+
*/
|
|
50
|
+
function readFileContent(filePath) {
|
|
51
|
+
try {
|
|
52
|
+
if (fs.existsSync(filePath)) {
|
|
53
|
+
return fs.readFileSync(filePath, "utf-8");
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
catch (error) {
|
|
57
|
+
frameworkLogger.log("codex-injector", "read-file-error", "error", { error, message: "0xRay Codex Hook Error" });
|
|
58
|
+
}
|
|
59
|
+
return null;
|
|
60
|
+
}
|
|
61
|
+
/**
|
|
62
|
+
* Create codex context entry
|
|
63
|
+
*/
|
|
64
|
+
async function createCodexContextEntry(filePath, content) {
|
|
65
|
+
await initializeImports();
|
|
66
|
+
if (!extractCodexMetadata) {
|
|
67
|
+
throw new Error("Codex metadata extractor not available");
|
|
68
|
+
}
|
|
69
|
+
const metadata = extractCodexMetadata(content);
|
|
70
|
+
return {
|
|
71
|
+
id: `strray-codex-${path.basename(filePath)}`,
|
|
72
|
+
source: filePath,
|
|
73
|
+
content,
|
|
74
|
+
priority: "critical",
|
|
75
|
+
metadata: {
|
|
76
|
+
version: metadata.version,
|
|
77
|
+
termCount: metadata.termCount,
|
|
78
|
+
loadedAt: new Date().toISOString(),
|
|
79
|
+
},
|
|
80
|
+
};
|
|
81
|
+
}
|
|
82
|
+
/**
|
|
83
|
+
* Load codex context for current session
|
|
84
|
+
*/
|
|
85
|
+
async function loadCodexContext(sessionId) {
|
|
86
|
+
if (codexCache.has(sessionId)) {
|
|
87
|
+
return codexCache.get(sessionId);
|
|
88
|
+
}
|
|
89
|
+
const codexContexts = [];
|
|
90
|
+
const locations = getCodexFileLocations();
|
|
91
|
+
for (const relativePath of locations) {
|
|
92
|
+
try {
|
|
93
|
+
const fullPath = path.isAbsolute(relativePath) ? relativePath : path.join(process.cwd(), relativePath);
|
|
94
|
+
const content = readFileContent(fullPath);
|
|
95
|
+
if (content) {
|
|
96
|
+
const entry = await createCodexContextEntry(fullPath, content);
|
|
97
|
+
codexContexts.push(entry);
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
catch (error) {
|
|
101
|
+
frameworkLogger.log("codex-injector", "load-codex-context-error", "error", { error, message: "0xRay Codex Hook Error" });
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
codexCache.set(sessionId, codexContexts);
|
|
105
|
+
return codexContexts;
|
|
106
|
+
}
|
|
107
|
+
/**
|
|
108
|
+
* Format codex context for display
|
|
109
|
+
*/
|
|
110
|
+
function formatCodexContext(contexts, sessionId) {
|
|
111
|
+
if (contexts.length === 0) {
|
|
112
|
+
return "⚠️ No codex context available";
|
|
113
|
+
}
|
|
114
|
+
const parts = ["0xRay Codex Context"];
|
|
115
|
+
for (const context of contexts) {
|
|
116
|
+
parts.push(`✅ ${context.source} (${context.metadata.termCount} terms)`);
|
|
117
|
+
}
|
|
118
|
+
const stats = getCodexStats(sessionId);
|
|
119
|
+
parts.push(`📁 ${stats.fileCount} source(s)`);
|
|
120
|
+
parts.push(`🎯 90% runtime error prevention target`);
|
|
121
|
+
return parts.join("\n");
|
|
122
|
+
}
|
|
123
|
+
/**
|
|
124
|
+
* Create strray-codex-injector hook
|
|
125
|
+
*
|
|
126
|
+
* This hook injects codex context into tool outputs and displays
|
|
127
|
+
* a welcome message on agent startup, following the production-tested
|
|
128
|
+
* pattern from OpenCode's rules-injector.
|
|
129
|
+
*/
|
|
130
|
+
export function createStringRayCodexInjectorHook() {
|
|
131
|
+
return {
|
|
132
|
+
name: "strray-codex-injector",
|
|
133
|
+
hooks: {
|
|
134
|
+
"agent.start": async (sessionId) => {
|
|
135
|
+
const jobId = `agent-start-${Date.now()}-${Math.random().toString(36).substring(2, 11)}`;
|
|
136
|
+
try {
|
|
137
|
+
await frameworkLogger.log("codex-injector", "agent.start hook triggered", "info", { jobId, sessionId });
|
|
138
|
+
// Load codex context to ensure it's available for the session
|
|
139
|
+
await loadCodexContext(sessionId);
|
|
140
|
+
const stats = getCodexStats(sessionId);
|
|
141
|
+
if (stats.loaded) {
|
|
142
|
+
await frameworkLogger.log("codex-injector", "-stringray-codex-loaded-stats-totalterms-terms-sta", "success", {
|
|
143
|
+
message: `✅ 0xRay Codex loaded: ${stats.totalTerms} terms, ${stats.fileCount} sources`,
|
|
144
|
+
});
|
|
145
|
+
await frameworkLogger.log("codex-injector", "codex context loaded successfully", "success", { jobId, ...stats });
|
|
146
|
+
}
|
|
147
|
+
else {
|
|
148
|
+
await frameworkLogger.log("codex-injector", "-no-codex-files-found-checked-strray-codex-json-co", "info", {
|
|
149
|
+
message: `⚠️ No codex files found. Checked: ${getCodexFileLocations().join(", ")}`,
|
|
150
|
+
});
|
|
151
|
+
await frameworkLogger.log("codex-injector", "no codex files found", "error", { jobId });
|
|
152
|
+
}
|
|
153
|
+
}
|
|
154
|
+
catch (error) {
|
|
155
|
+
await frameworkLogger.log("codex-injector", "agent.start hook failed", "error", { jobId, error });
|
|
156
|
+
frameworkLogger.log("codex-injector", "agent-start-hook-error", "error", { error, jobId, message: "Error in agent.start hook" });
|
|
157
|
+
throw error;
|
|
158
|
+
}
|
|
159
|
+
},
|
|
160
|
+
"tool.execute.before": async (input, sessionId) => {
|
|
161
|
+
const jobId = `tool-before-${Date.now()}-${Math.random().toString(36).substring(2, 11)}`;
|
|
162
|
+
try {
|
|
163
|
+
await frameworkLogger.log("codex-injector", "tool.execute.before hook triggered", "info", { jobId, tool: input.tool, sessionId });
|
|
164
|
+
// Log ALL tool usage for framework transparency
|
|
165
|
+
await frameworkLogger.log("framework-activity", `tool called: ${input.tool}`, "info", {
|
|
166
|
+
jobId,
|
|
167
|
+
tool: input.tool,
|
|
168
|
+
args: input.args,
|
|
169
|
+
sessionId,
|
|
170
|
+
});
|
|
171
|
+
// Skip codex enforcement during testing
|
|
172
|
+
if (process.env.NODE_ENV === "test" ||
|
|
173
|
+
process.env.STRRAY_TEST_MODE === "true") {
|
|
174
|
+
await frameworkLogger.log("codex-injector", "skipping enforcement in test mode", "info", { jobId });
|
|
175
|
+
return;
|
|
176
|
+
}
|
|
177
|
+
// Only enforce on critical tools that could violate codex terms
|
|
178
|
+
const criticalTools = ["write", "edit", "multiedit", "batch"];
|
|
179
|
+
if (!criticalTools.includes(input.tool)) {
|
|
180
|
+
await frameworkLogger.log("codex-injector", "non-critical tool allowed", "info", { jobId, tool: input.tool });
|
|
181
|
+
return; // Allow non-critical tools
|
|
182
|
+
}
|
|
183
|
+
await frameworkLogger.log("codex-injector", "enforcing codex on critical tool", "info", { jobId, tool: input.tool });
|
|
184
|
+
// Load codex context for validation
|
|
185
|
+
const codexContexts = await loadCodexContext(sessionId);
|
|
186
|
+
if (codexContexts.length === 0) {
|
|
187
|
+
await frameworkLogger.log("codex-injector", "-no-codex-loaded-allowing-action-but-enforcement-d", "info", {
|
|
188
|
+
message: "⚠️ No codex loaded - allowing action but enforcement disabled",
|
|
189
|
+
});
|
|
190
|
+
await frameworkLogger.log("codex-injector", "no codex context available", "error", { jobId, sessionId });
|
|
191
|
+
return;
|
|
192
|
+
}
|
|
193
|
+
await frameworkLogger.log("codex-injector", "codex context loaded for validation", "success", { jobId, contextCount: codexContexts.length });
|
|
194
|
+
// Use the initialized context loader
|
|
195
|
+
await initializeImports();
|
|
196
|
+
const ContextLoaderClass = StringRayContextLoader;
|
|
197
|
+
const contextLoader = new ContextLoaderClass();
|
|
198
|
+
const loadResult = await contextLoader.loadCodexContext(sessionId);
|
|
199
|
+
if (!loadResult.success || !loadResult.context) {
|
|
200
|
+
// Codex context warning - operational, keep
|
|
201
|
+
return;
|
|
202
|
+
}
|
|
203
|
+
// Validate action against codex
|
|
204
|
+
const actionDescription = `${input.tool} ${JSON.stringify(input.args || {})}`;
|
|
205
|
+
const validation = contextLoader.validateAgainstCodex(loadResult.context, actionDescription, {
|
|
206
|
+
strictMode: true,
|
|
207
|
+
blockOnViolations: true,
|
|
208
|
+
});
|
|
209
|
+
if (!validation.compliant) {
|
|
210
|
+
// Check for blocking violations
|
|
211
|
+
const blockingViolations = validation.violations.filter((v) => v.severity === "blocking");
|
|
212
|
+
if (blockingViolations.length > 0) {
|
|
213
|
+
const errorMsg = `🚫 BLOCKED: Codex violation detected\n${blockingViolations.map((v) => `• ${v.reason}`).join("\n")}`;
|
|
214
|
+
frameworkLogger.log("codex-injector", "blocking-violation", "error", { message: errorMsg, jobId });
|
|
215
|
+
frameworkLogger.log("codex-injector", "blocking codex violation detected", "error", {
|
|
216
|
+
jobId,
|
|
217
|
+
violationCount: blockingViolations.length,
|
|
218
|
+
tool: input.tool,
|
|
219
|
+
});
|
|
220
|
+
throw new Error(`Codex enforcement blocked action: ${blockingViolations[0]?.reason || "Unknown violation"}`);
|
|
221
|
+
}
|
|
222
|
+
// Log non-blocking violations but allow action
|
|
223
|
+
await frameworkLogger.log("codex-injector", "-codex-warnings-detected-", "info", { message: `⚠️ Codex warnings detected:` });
|
|
224
|
+
for (const v of validation.violations) {
|
|
225
|
+
await frameworkLogger.log("codex-injector", "-v-reason-", "info", { message: ` • ${v.reason}` });
|
|
226
|
+
}
|
|
227
|
+
await frameworkLogger.log("codex-injector", "-recommendations-validation-recommendations-join-", "info", {
|
|
228
|
+
message: `💡 Recommendations: ${validation.recommendations.join(", ")}`,
|
|
229
|
+
});
|
|
230
|
+
frameworkLogger.log("codex-injector", "non-blocking codex warnings", "info", {
|
|
231
|
+
jobId,
|
|
232
|
+
warningCount: validation.violations.length,
|
|
233
|
+
tool: input.tool,
|
|
234
|
+
});
|
|
235
|
+
}
|
|
236
|
+
else {
|
|
237
|
+
frameworkLogger.log("codex-injector", "codex validation passed", "success", { jobId, tool: input.tool });
|
|
238
|
+
}
|
|
239
|
+
}
|
|
240
|
+
catch (error) {
|
|
241
|
+
frameworkLogger.log("codex-injector", "tool.execute.before hook error", "error", {
|
|
242
|
+
jobId,
|
|
243
|
+
error: error instanceof Error ? error.message : String(error),
|
|
244
|
+
tool: input.tool,
|
|
245
|
+
});
|
|
246
|
+
frameworkLogger.log("codex-injector", "tool-execute-before-hook-error", "error", {
|
|
247
|
+
error,
|
|
248
|
+
message: "Error in tool.execute.before hook",
|
|
249
|
+
jobId,
|
|
250
|
+
tool: input.tool,
|
|
251
|
+
});
|
|
252
|
+
// For blocking violations, re-throw to prevent action
|
|
253
|
+
if (error instanceof Error &&
|
|
254
|
+
error.message.includes("Codex enforcement blocked action")) {
|
|
255
|
+
throw error;
|
|
256
|
+
}
|
|
257
|
+
// For other errors, log but allow action to prevent breaking workflow
|
|
258
|
+
}
|
|
259
|
+
},
|
|
260
|
+
"tool.execute.after": async (input, output, sessionId) => {
|
|
261
|
+
const jobId = `tool-after-${Date.now()}-${Math.random().toString(36).substring(2, 11)}`;
|
|
262
|
+
try {
|
|
263
|
+
frameworkLogger.log("codex-injector", "tool.execute.after hook triggered", "info", { jobId, tool: input.tool, sessionId });
|
|
264
|
+
// Skip codex enforcement during testing
|
|
265
|
+
if (process.env.NODE_ENV === "test" ||
|
|
266
|
+
process.env.STRRAY_TEST_MODE === "true") {
|
|
267
|
+
frameworkLogger.log("codex-injector", "skipping injection in test mode", "info", { jobId });
|
|
268
|
+
return output;
|
|
269
|
+
}
|
|
270
|
+
if (!["read", "write", "edit", "multiedit", "batch"].includes(input.tool)) {
|
|
271
|
+
frameworkLogger.log("codex-injector", "non-critical tool - no injection", "info", { jobId, tool: input.tool });
|
|
272
|
+
return output;
|
|
273
|
+
}
|
|
274
|
+
await frameworkLogger.log("codex-injector", "-stringray-tool-execution-hook-triggered-for-input", "info", {
|
|
275
|
+
message: `🔧 0xRay: Tool execution hook triggered for ${input.tool}`,
|
|
276
|
+
});
|
|
277
|
+
const codexContexts = await loadCodexContext(sessionId);
|
|
278
|
+
await frameworkLogger.log("codex-injector", "-stringray-loaded-codexcontexts-length-codex-conte", "info", {
|
|
279
|
+
message: `📚 0xRay: Loaded ${codexContexts.length} codex contexts`,
|
|
280
|
+
});
|
|
281
|
+
frameworkLogger.log("codex-injector", "codex contexts loaded for injection", "success", {
|
|
282
|
+
jobId,
|
|
283
|
+
contextCount: codexContexts.length,
|
|
284
|
+
tool: input.tool,
|
|
285
|
+
});
|
|
286
|
+
if (codexContexts.length === 0) {
|
|
287
|
+
return output;
|
|
288
|
+
}
|
|
289
|
+
const formattedCodex = formatCodexContext(codexContexts, sessionId);
|
|
290
|
+
const injectedOutput = {
|
|
291
|
+
...output,
|
|
292
|
+
output: `${formattedCodex}\n${output.output || ""}`,
|
|
293
|
+
};
|
|
294
|
+
frameworkLogger.log("codex-injector", "codex context injected into output", "success", {
|
|
295
|
+
jobId,
|
|
296
|
+
tool: input.tool,
|
|
297
|
+
outputLength: injectedOutput.output?.length,
|
|
298
|
+
});
|
|
299
|
+
return injectedOutput;
|
|
300
|
+
}
|
|
301
|
+
catch (error) {
|
|
302
|
+
frameworkLogger.log("codex-injector", "tool.execute.after hook error", "error", {
|
|
303
|
+
jobId,
|
|
304
|
+
error: error instanceof Error ? error.message : String(error),
|
|
305
|
+
tool: input.tool,
|
|
306
|
+
});
|
|
307
|
+
frameworkLogger.log("codex-injector", "tool-execute-after-hook-error", "error", {
|
|
308
|
+
error,
|
|
309
|
+
message: "Error in tool.execute.after hook",
|
|
310
|
+
jobId,
|
|
311
|
+
tool: input.tool,
|
|
312
|
+
});
|
|
313
|
+
// Return original output on error to not break the session
|
|
314
|
+
return output;
|
|
315
|
+
}
|
|
316
|
+
},
|
|
317
|
+
},
|
|
318
|
+
};
|
|
319
|
+
}
|
|
320
|
+
/**
|
|
321
|
+
* Get codex statistics for debugging
|
|
322
|
+
*/
|
|
323
|
+
export function getCodexStats(sessionId) {
|
|
324
|
+
const contexts = codexCache.get(sessionId);
|
|
325
|
+
if (!contexts || contexts.length === 0) {
|
|
326
|
+
return {
|
|
327
|
+
loaded: false,
|
|
328
|
+
fileCount: 0,
|
|
329
|
+
totalTerms: 0,
|
|
330
|
+
version: "unknown",
|
|
331
|
+
};
|
|
332
|
+
}
|
|
333
|
+
const totalTerms = contexts.reduce((sum, ctx) => sum + ctx.metadata.termCount, 0);
|
|
334
|
+
return {
|
|
335
|
+
loaded: true,
|
|
336
|
+
fileCount: contexts.length,
|
|
337
|
+
totalTerms,
|
|
338
|
+
version: contexts[0].metadata.version,
|
|
339
|
+
};
|
|
340
|
+
}
|
|
341
|
+
/**
|
|
342
|
+
* Clear codex cache (useful for testing or forced reload)
|
|
343
|
+
*/
|
|
344
|
+
export function clearCodexCache(sessionId) {
|
|
345
|
+
if (sessionId) {
|
|
346
|
+
codexCache.delete(sessionId);
|
|
347
|
+
}
|
|
348
|
+
else {
|
|
349
|
+
codexCache.clear();
|
|
350
|
+
}
|
|
351
|
+
}
|
|
352
|
+
/**
|
|
353
|
+
* CodexInjector class for plugin compatibility
|
|
354
|
+
*/
|
|
355
|
+
export class CodexInjector {
|
|
356
|
+
injectCodexRules(context, options) {
|
|
357
|
+
// Implementation for plugin compatibility
|
|
358
|
+
return context;
|
|
359
|
+
}
|
|
360
|
+
getCodexStats() {
|
|
361
|
+
// Return aggregated stats for plugin
|
|
362
|
+
const allContexts = [];
|
|
363
|
+
for (const contexts of Array.from(codexCache.values())) {
|
|
364
|
+
allContexts.push(...contexts);
|
|
365
|
+
}
|
|
366
|
+
const totalTerms = allContexts.reduce((sum, ctx) => sum + ctx.metadata.termCount, 0);
|
|
367
|
+
return {
|
|
368
|
+
loaded: allContexts.length > 0,
|
|
369
|
+
fileCount: allContexts.length,
|
|
370
|
+
totalTerms,
|
|
371
|
+
version: allContexts.length > 0 ? allContexts[0].metadata.version : "unknown",
|
|
372
|
+
};
|
|
373
|
+
}
|
|
374
|
+
/**
|
|
375
|
+
* Permissive comment validation - recognizes that comments are beneficial
|
|
376
|
+
* Only flags truly problematic patterns, provides guidance not requirements
|
|
377
|
+
*/
|
|
378
|
+
validateCommentsPermissively(content) {
|
|
379
|
+
const guidance = [];
|
|
380
|
+
const concerns = [];
|
|
381
|
+
const lines = content.split("\n");
|
|
382
|
+
let commentLines = 0;
|
|
383
|
+
let codeLines = 0;
|
|
384
|
+
let todoCount = 0;
|
|
385
|
+
for (const line of lines) {
|
|
386
|
+
const trimmed = line.trim();
|
|
387
|
+
// Skip empty lines
|
|
388
|
+
if (!trimmed)
|
|
389
|
+
continue;
|
|
390
|
+
// Count code vs comments
|
|
391
|
+
if (trimmed.startsWith("//") ||
|
|
392
|
+
trimmed.startsWith("/*") ||
|
|
393
|
+
trimmed.startsWith("*") ||
|
|
394
|
+
trimmed.startsWith("*/")) {
|
|
395
|
+
commentLines++;
|
|
396
|
+
}
|
|
397
|
+
else {
|
|
398
|
+
codeLines++;
|
|
399
|
+
}
|
|
400
|
+
// Check for problematic patterns
|
|
401
|
+
if (trimmed.includes("TODO") ||
|
|
402
|
+
trimmed.includes("FIXME") ||
|
|
403
|
+
trimmed.includes("XXX")) {
|
|
404
|
+
todoCount++;
|
|
405
|
+
}
|
|
406
|
+
}
|
|
407
|
+
// Provide helpful guidance (not requirements)
|
|
408
|
+
const commentRatio = commentLines / (commentLines + codeLines);
|
|
409
|
+
if (commentLines === 0 && codeLines > 30) {
|
|
410
|
+
guidance.push("💡 Consider adding comments for complex logic - they improve maintainability");
|
|
411
|
+
}
|
|
412
|
+
if (commentRatio > 0.4) {
|
|
413
|
+
guidance.push("💡 High comment ratio detected - consider if code can be made more self-explanatory");
|
|
414
|
+
}
|
|
415
|
+
if (todoCount > 3) {
|
|
416
|
+
concerns.push("⚠️ Multiple unresolved tasks detected - consider addressing or documenting timelines");
|
|
417
|
+
}
|
|
418
|
+
// Recognize good commenting practices
|
|
419
|
+
if (commentRatio > 0.1 && commentRatio < 0.3) {
|
|
420
|
+
guidance.push("✅ Good balance of code and comments detected");
|
|
421
|
+
}
|
|
422
|
+
return { guidance, concerns };
|
|
423
|
+
}
|
|
424
|
+
}
|