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,115 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* API Trigger for Post-Processor
|
|
3
|
+
*
|
|
4
|
+
* Provides a REST API endpoint to manually trigger PostProcessor
|
|
5
|
+
* operations. Useful for CI/CD pipelines, manual test triggers,
|
|
6
|
+
* and retry mechanisms.
|
|
7
|
+
*
|
|
8
|
+
* @version 2.0.0
|
|
9
|
+
* @since 2026-03-08
|
|
10
|
+
*/
|
|
11
|
+
import express from 'express';
|
|
12
|
+
import { frameworkLogger } from '../../core/framework-logger.js';
|
|
13
|
+
export class APITrigger {
|
|
14
|
+
postProcessor;
|
|
15
|
+
initialized = false;
|
|
16
|
+
app;
|
|
17
|
+
config;
|
|
18
|
+
constructor(postProcessor, config) {
|
|
19
|
+
this.postProcessor = postProcessor;
|
|
20
|
+
this.config = {
|
|
21
|
+
enabled: true,
|
|
22
|
+
path: '/api/post-process',
|
|
23
|
+
...config
|
|
24
|
+
};
|
|
25
|
+
this.app = express();
|
|
26
|
+
}
|
|
27
|
+
async initialize() {
|
|
28
|
+
if (this.initialized)
|
|
29
|
+
return;
|
|
30
|
+
// Setup API endpoints
|
|
31
|
+
this.setupAPIEndpoints();
|
|
32
|
+
this.initialized = true;
|
|
33
|
+
frameworkLogger.log('api-trigger', 'initialized', 'info', {
|
|
34
|
+
path: this.config.path,
|
|
35
|
+
apiKeyRequired: this.config.apiKey
|
|
36
|
+
});
|
|
37
|
+
}
|
|
38
|
+
setupAPIEndpoints() {
|
|
39
|
+
const { path: apiPath, apiKey } = this.config;
|
|
40
|
+
const endpointPath = apiPath || '/api/post-process';
|
|
41
|
+
// Rate limiting
|
|
42
|
+
this.app.use(express.json({ limit: '10mb' }));
|
|
43
|
+
// Middleware: API key authentication (if configured)
|
|
44
|
+
if (apiKey) {
|
|
45
|
+
this.app.use((req, res, next) => {
|
|
46
|
+
const providedKey = req.headers['x-api-key'];
|
|
47
|
+
if (!providedKey) {
|
|
48
|
+
res.status(401).json({ error: 'API key required' });
|
|
49
|
+
return;
|
|
50
|
+
}
|
|
51
|
+
if (providedKey !== apiKey) {
|
|
52
|
+
res.status(403).json({ error: 'Invalid API key' });
|
|
53
|
+
return;
|
|
54
|
+
}
|
|
55
|
+
next();
|
|
56
|
+
});
|
|
57
|
+
}
|
|
58
|
+
// POST endpoint to trigger PostProcessor
|
|
59
|
+
this.app.post(endpointPath, async (req, res) => {
|
|
60
|
+
try {
|
|
61
|
+
const body = req.body;
|
|
62
|
+
frameworkLogger.log('api-trigger', 'trigger-request', 'info', {
|
|
63
|
+
tool: body.tool,
|
|
64
|
+
operation: body.operation,
|
|
65
|
+
reason: body.reason
|
|
66
|
+
});
|
|
67
|
+
// Create PostProcessor context
|
|
68
|
+
const context = {
|
|
69
|
+
trigger: 'api',
|
|
70
|
+
tool: body.tool || 'api',
|
|
71
|
+
operation: body.operation || 'manual',
|
|
72
|
+
commitSha: '',
|
|
73
|
+
repository: '',
|
|
74
|
+
branch: '',
|
|
75
|
+
author: '',
|
|
76
|
+
files: []
|
|
77
|
+
};
|
|
78
|
+
// Trigger PostProcessor
|
|
79
|
+
await this.triggerPostProcessor(context);
|
|
80
|
+
res.json({
|
|
81
|
+
success: true,
|
|
82
|
+
message: 'PostProcessor triggered successfully',
|
|
83
|
+
triggeredAt: new Date().toISOString()
|
|
84
|
+
});
|
|
85
|
+
}
|
|
86
|
+
catch (error) {
|
|
87
|
+
frameworkLogger.log('api-trigger', 'trigger-error', 'error', {
|
|
88
|
+
error: error instanceof Error ? error.message : String(error)
|
|
89
|
+
});
|
|
90
|
+
res.status(500).json({
|
|
91
|
+
error: 'PostProcessor trigger failed',
|
|
92
|
+
message: error instanceof Error ? error.message : 'Unknown error'
|
|
93
|
+
});
|
|
94
|
+
}
|
|
95
|
+
});
|
|
96
|
+
// GET endpoint for status
|
|
97
|
+
this.app.get(endpointPath + '/status', (req, res) => {
|
|
98
|
+
res.json({
|
|
99
|
+
status: 'operational',
|
|
100
|
+
triggerType: 'api',
|
|
101
|
+
configured: this.config.enabled,
|
|
102
|
+
timestamp: new Date().toISOString()
|
|
103
|
+
});
|
|
104
|
+
});
|
|
105
|
+
}
|
|
106
|
+
async triggerPostProcessor(context) {
|
|
107
|
+
await this.postProcessor.executePostProcessorLoop(context);
|
|
108
|
+
}
|
|
109
|
+
getApp() {
|
|
110
|
+
return this.app;
|
|
111
|
+
}
|
|
112
|
+
shutdown() {
|
|
113
|
+
this.initialized = false;
|
|
114
|
+
}
|
|
115
|
+
}
|
|
@@ -0,0 +1,551 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Git Hook Trigger for Post-Processor
|
|
3
|
+
*/
|
|
4
|
+
import * as fs from "fs";
|
|
5
|
+
import * as path from "path";
|
|
6
|
+
import { pipeline } from "stream/promises";
|
|
7
|
+
import { frameworkLogger } from "../../core/framework-logger.js";
|
|
8
|
+
// Re-export for backwards compatibility and external usage
|
|
9
|
+
export { cleanupLogFiles };
|
|
10
|
+
export { archiveLogFiles }; // Export for use in hooks
|
|
11
|
+
/**
|
|
12
|
+
* Archive and rotate log files to prevent unbounded growth
|
|
13
|
+
*/
|
|
14
|
+
async function archiveLogFiles(config) {
|
|
15
|
+
const jobId = `log-archive-${Date.now()}-${Math.random().toString(36).substring(2, 11)}`;
|
|
16
|
+
const result = {
|
|
17
|
+
archived: 0,
|
|
18
|
+
errors: [],
|
|
19
|
+
};
|
|
20
|
+
try {
|
|
21
|
+
const fs = await import("fs");
|
|
22
|
+
const path = await import("path");
|
|
23
|
+
const zlib = await import("zlib");
|
|
24
|
+
// Ensure archive directory exists
|
|
25
|
+
if (!fs.existsSync(config.archiveDirectory)) {
|
|
26
|
+
fs.mkdirSync(config.archiveDirectory, { recursive: true });
|
|
27
|
+
}
|
|
28
|
+
const activityLogPath = path.join(process.cwd(), "logs", "framework", "activity.log");
|
|
29
|
+
if (fs.existsSync(activityLogPath)) {
|
|
30
|
+
const stats = fs.statSync(activityLogPath);
|
|
31
|
+
const shouldArchive = stats.size > config.maxFileSizeMB * 1024 * 1024 || // Size-based
|
|
32
|
+
Date.now() - stats.mtime.getTime() >
|
|
33
|
+
config.rotationIntervalHours * 60 * 60 * 1000; // Time-based
|
|
34
|
+
if (shouldArchive) {
|
|
35
|
+
// Use full timestamp to prevent overwriting same-day archives
|
|
36
|
+
const timestamp = new Date().toISOString().replace(/[:.]/g, '-'); // YYYY-MM-DDTHH-MM-SS-mmm
|
|
37
|
+
const archiveName = `framework-activity-${timestamp}.log`; // Unique per run
|
|
38
|
+
const archivePath = path.join(process.cwd(), "logs", "framework", archiveName); // Archive in same directory
|
|
39
|
+
let archiveSuccess = false;
|
|
40
|
+
let finalArchivePath = archivePath;
|
|
41
|
+
try {
|
|
42
|
+
// Copy current log to archive
|
|
43
|
+
fs.copyFileSync(activityLogPath, archivePath);
|
|
44
|
+
// Compress if enabled
|
|
45
|
+
if (config.compressionEnabled) {
|
|
46
|
+
const compressedPath = `${archivePath}.gz`;
|
|
47
|
+
const gzip = zlib.createGzip();
|
|
48
|
+
const input = fs.createReadStream(archivePath);
|
|
49
|
+
const output = fs.createWriteStream(compressedPath);
|
|
50
|
+
// Use pipeline for proper error handling
|
|
51
|
+
await pipeline(input, gzip, output);
|
|
52
|
+
// Verify compression succeeded
|
|
53
|
+
if (fs.existsSync(compressedPath)) {
|
|
54
|
+
const compressedStats = fs.statSync(compressedPath);
|
|
55
|
+
if (compressedStats.size > 0) {
|
|
56
|
+
fs.unlinkSync(archivePath); // Remove uncompressed
|
|
57
|
+
archiveSuccess = true;
|
|
58
|
+
finalArchivePath = compressedPath;
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
else {
|
|
63
|
+
// Verify uncompressed archive
|
|
64
|
+
const archiveStats = fs.statSync(archivePath);
|
|
65
|
+
archiveSuccess = archiveStats.size > 0;
|
|
66
|
+
}
|
|
67
|
+
// ONLY reset if archive was created successfully
|
|
68
|
+
if (archiveSuccess) {
|
|
69
|
+
const header = `# Log rotated on ${new Date().toISOString()}\n`;
|
|
70
|
+
fs.writeFileSync(activityLogPath, header);
|
|
71
|
+
result.archived++;
|
|
72
|
+
}
|
|
73
|
+
else {
|
|
74
|
+
// Archive failed - don't reset the log, leave it intact
|
|
75
|
+
result.errors.push(`Archive creation failed for ${archivePath} - log left intact`);
|
|
76
|
+
await frameworkLogger.log("log-archiver", "archive-failed-log-intact", "error", {
|
|
77
|
+
jobId,
|
|
78
|
+
reason: "Archive creation failed, log not reset",
|
|
79
|
+
activityLogPath,
|
|
80
|
+
});
|
|
81
|
+
return result; // Exit early, log not modified
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
catch (archiveError) {
|
|
85
|
+
// Archive failed - don't reset the log, leave it intact
|
|
86
|
+
const errorMsg = archiveError instanceof Error ? archiveError.message : String(archiveError);
|
|
87
|
+
result.errors.push(`Archive failed: ${errorMsg} - log left intact`);
|
|
88
|
+
// Clean up partial archive if it exists
|
|
89
|
+
if (fs.existsSync(archivePath)) {
|
|
90
|
+
try {
|
|
91
|
+
fs.unlinkSync(archivePath);
|
|
92
|
+
}
|
|
93
|
+
catch { /* ignore cleanup error */ }
|
|
94
|
+
}
|
|
95
|
+
const compressedPath = `${archivePath}.gz`;
|
|
96
|
+
if (fs.existsSync(compressedPath)) {
|
|
97
|
+
try {
|
|
98
|
+
fs.unlinkSync(compressedPath);
|
|
99
|
+
}
|
|
100
|
+
catch { /* ignore cleanup error */ }
|
|
101
|
+
}
|
|
102
|
+
await frameworkLogger.log("log-archiver", "archive-error-log-intact", "error", {
|
|
103
|
+
jobId,
|
|
104
|
+
error: errorMsg,
|
|
105
|
+
activityLogPath,
|
|
106
|
+
});
|
|
107
|
+
return result; // Exit early, log not modified
|
|
108
|
+
}
|
|
109
|
+
await frameworkLogger.log("log-archiver", "activity-log-rotated", "success", {
|
|
110
|
+
jobId,
|
|
111
|
+
archivePath: config.compressionEnabled
|
|
112
|
+
? `${archivePath}.gz`
|
|
113
|
+
: archivePath,
|
|
114
|
+
originalSize: stats.size,
|
|
115
|
+
rotationReason: stats.size > config.maxFileSizeMB * 1024 * 1024 ? "size" : "time",
|
|
116
|
+
compatibleWithReporting: true, // Uses framework-activity-*.log.gz naming
|
|
117
|
+
});
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
// Clean up old archives beyond retention period (integrate with existing cleanup)
|
|
121
|
+
// Note: Framework reporting system already handles cleanup of framework-activity-*.log.gz files
|
|
122
|
+
// This ensures compatibility and prevents double-cleanup
|
|
123
|
+
}
|
|
124
|
+
catch (error) {
|
|
125
|
+
const errorMsg = `Log archiving failed: ${error}`;
|
|
126
|
+
result.errors.push(errorMsg);
|
|
127
|
+
await frameworkLogger.log("log-archiver", "archiving-error", "error", {
|
|
128
|
+
jobId,
|
|
129
|
+
error: error instanceof Error ? error.message : String(error),
|
|
130
|
+
});
|
|
131
|
+
}
|
|
132
|
+
return result;
|
|
133
|
+
}
|
|
134
|
+
/**
|
|
135
|
+
* Special archiving strategy for critical historical logs
|
|
136
|
+
*/
|
|
137
|
+
async function archiveCriticalHistoricalLogs() {
|
|
138
|
+
const jobId = `critical-archive-${Date.now()}-${Math.random().toString(36).substring(2, 11)}`;
|
|
139
|
+
const result = {
|
|
140
|
+
archived: 0,
|
|
141
|
+
errors: [],
|
|
142
|
+
};
|
|
143
|
+
try {
|
|
144
|
+
const fs = await import("fs");
|
|
145
|
+
const path = await import("path");
|
|
146
|
+
const historicalDir = path.join(process.cwd(), "logs", "historical");
|
|
147
|
+
if (!fs.existsSync(historicalDir)) {
|
|
148
|
+
fs.mkdirSync(historicalDir, { recursive: true });
|
|
149
|
+
}
|
|
150
|
+
const refactoringLogPath = path.join(process.cwd(), "logs", "agents", "refactoring-log.md");
|
|
151
|
+
if (fs.existsSync(refactoringLogPath)) {
|
|
152
|
+
const stats = fs.statSync(refactoringLogPath);
|
|
153
|
+
const lastModified = new Date(stats.mtime);
|
|
154
|
+
const currentMonth = `${lastModified.getFullYear()}-${String(lastModified.getMonth() + 1).padStart(2, "0")}`;
|
|
155
|
+
const monthlyArchiveName = `refactoring-log-${currentMonth}.md`;
|
|
156
|
+
const monthlyArchivePath = path.join(historicalDir, monthlyArchiveName);
|
|
157
|
+
if (!fs.existsSync(monthlyArchivePath)) {
|
|
158
|
+
fs.copyFileSync(refactoringLogPath, monthlyArchivePath);
|
|
159
|
+
result.archived++;
|
|
160
|
+
await frameworkLogger.log("log-archiver", "refactoring-log-archived", "info", {
|
|
161
|
+
jobId,
|
|
162
|
+
archivePath: monthlyArchivePath,
|
|
163
|
+
size: stats.size,
|
|
164
|
+
snapshotMonth: currentMonth,
|
|
165
|
+
});
|
|
166
|
+
}
|
|
167
|
+
}
|
|
168
|
+
}
|
|
169
|
+
catch (error) {
|
|
170
|
+
const errorMsg = `Critical log archiving failed: ${error}`;
|
|
171
|
+
result.errors.push(errorMsg);
|
|
172
|
+
await frameworkLogger.log("log-archiver", "critical-archiving-error", "error", {
|
|
173
|
+
jobId,
|
|
174
|
+
error: error instanceof Error ? error.message : String(error),
|
|
175
|
+
});
|
|
176
|
+
}
|
|
177
|
+
return result;
|
|
178
|
+
}
|
|
179
|
+
async function cleanupLogFiles(config) {
|
|
180
|
+
const jobId = `log-cleanup-${Date.now()}-${Math.random().toString(36).substring(2, 11)}`;
|
|
181
|
+
const result = {
|
|
182
|
+
cleaned: 0,
|
|
183
|
+
errors: [],
|
|
184
|
+
};
|
|
185
|
+
const maxAgeMs = config.maxAgeHours * 60 * 60 * 1000;
|
|
186
|
+
const now = Date.now();
|
|
187
|
+
for (const dir of config.directories) {
|
|
188
|
+
try {
|
|
189
|
+
if (!fs.existsSync(dir))
|
|
190
|
+
continue;
|
|
191
|
+
const files = fs.readdirSync(dir);
|
|
192
|
+
for (const file of files) {
|
|
193
|
+
const filePath = path.join(dir, file);
|
|
194
|
+
const stat = fs.statSync(filePath);
|
|
195
|
+
// Skip directories
|
|
196
|
+
if (stat.isDirectory())
|
|
197
|
+
continue;
|
|
198
|
+
// Check if file should be excluded
|
|
199
|
+
const shouldExclude = config.excludePatterns.some((pattern) => file.includes(pattern.replace("*", "")));
|
|
200
|
+
if (shouldExclude)
|
|
201
|
+
continue;
|
|
202
|
+
// Check if file is too old
|
|
203
|
+
const ageMs = now - stat.mtime.getTime();
|
|
204
|
+
if (ageMs > maxAgeMs) {
|
|
205
|
+
try {
|
|
206
|
+
fs.unlinkSync(filePath);
|
|
207
|
+
result.cleaned++;
|
|
208
|
+
await frameworkLogger.log("git-hooks", "log-file-cleaned", "info", {
|
|
209
|
+
jobId,
|
|
210
|
+
file: filePath,
|
|
211
|
+
age: Math.round(ageMs / (1000 * 60 * 60)), // hours
|
|
212
|
+
size: stat.size,
|
|
213
|
+
});
|
|
214
|
+
}
|
|
215
|
+
catch (error) {
|
|
216
|
+
const errorMsg = `Failed to clean log file ${filePath}: ${error}`;
|
|
217
|
+
result.errors.push(errorMsg);
|
|
218
|
+
await frameworkLogger.log("git-hooks", "log-cleanup-error", "error", {
|
|
219
|
+
jobId,
|
|
220
|
+
file: filePath,
|
|
221
|
+
error: error instanceof Error ? error.message : String(error),
|
|
222
|
+
});
|
|
223
|
+
}
|
|
224
|
+
}
|
|
225
|
+
}
|
|
226
|
+
}
|
|
227
|
+
catch (error) {
|
|
228
|
+
const errorMsg = `Failed to process directory ${dir}: ${error}`;
|
|
229
|
+
result.errors.push(errorMsg);
|
|
230
|
+
await frameworkLogger.log("git-hooks", "log-cleanup-directory-error", "error", {
|
|
231
|
+
jobId,
|
|
232
|
+
directory: dir,
|
|
233
|
+
error: error instanceof Error ? error.message : String(error),
|
|
234
|
+
});
|
|
235
|
+
}
|
|
236
|
+
}
|
|
237
|
+
return result;
|
|
238
|
+
}
|
|
239
|
+
export class GitHookTrigger {
|
|
240
|
+
postProcessor;
|
|
241
|
+
initialized = false;
|
|
242
|
+
constructor(postProcessor) {
|
|
243
|
+
this.postProcessor = postProcessor;
|
|
244
|
+
}
|
|
245
|
+
async initialize() {
|
|
246
|
+
if (this.initialized)
|
|
247
|
+
return;
|
|
248
|
+
const hooksDir = path.join(process.cwd(), ".opencode", "hooks");
|
|
249
|
+
const gitHooksDir = path.join(process.cwd(), ".git", "hooks");
|
|
250
|
+
const postCommitHook = path.join(hooksDir, "post-commit");
|
|
251
|
+
const postPushHook = path.join(hooksDir, "post-push");
|
|
252
|
+
// Ensure our hooks directory exists
|
|
253
|
+
if (!fs.existsSync(hooksDir)) {
|
|
254
|
+
fs.mkdirSync(hooksDir, { recursive: true });
|
|
255
|
+
}
|
|
256
|
+
// Ensure .git/hooks directory exists (should exist in git repo)
|
|
257
|
+
if (!fs.existsSync(gitHooksDir)) {
|
|
258
|
+
await frameworkLogger.log("git-hook-trigger", "git-hooks-directory-not-found", "warning", { gitHooksDir });
|
|
259
|
+
return;
|
|
260
|
+
}
|
|
261
|
+
// Install hooks in our directory first
|
|
262
|
+
this.installHook(postCommitHook, "post-commit");
|
|
263
|
+
this.installHook(postPushHook, "post-push");
|
|
264
|
+
// Create symlinks in .git/hooks to activate them
|
|
265
|
+
await this.activateGitHooks(gitHooksDir, postCommitHook, postPushHook);
|
|
266
|
+
this.initialized = true;
|
|
267
|
+
}
|
|
268
|
+
installHook(hookPath, hookType) {
|
|
269
|
+
const hookContent = this.generateHookScript(hookType);
|
|
270
|
+
// Check if hook already exists and has our content
|
|
271
|
+
if (fs.existsSync(hookPath)) {
|
|
272
|
+
const existing = fs.readFileSync(hookPath, "utf8");
|
|
273
|
+
if (existing.includes("postprocessor-trigger")) {
|
|
274
|
+
return; // Already installed
|
|
275
|
+
}
|
|
276
|
+
// Backup existing hook
|
|
277
|
+
fs.renameSync(hookPath, `${hookPath}.backup`);
|
|
278
|
+
}
|
|
279
|
+
fs.writeFileSync(hookPath, hookContent);
|
|
280
|
+
fs.chmodSync(hookPath, "755");
|
|
281
|
+
}
|
|
282
|
+
generateHookScript(hookType) {
|
|
283
|
+
const isPushHook = hookType === "post-push";
|
|
284
|
+
return `#!/bin/bash
|
|
285
|
+
# 0xRay Post-Processor ${hookType} Hook
|
|
286
|
+
# Automatically triggers post-processor after ${hookType}
|
|
287
|
+
|
|
288
|
+
# Get hook type from script name
|
|
289
|
+
HOOK_NAME=$(basename "$0")
|
|
290
|
+
COMMIT_SHA=""
|
|
291
|
+
|
|
292
|
+
if [ "$HOOK_NAME" = "post-commit" ]; then
|
|
293
|
+
# Light monitoring for local commits - just basic validation
|
|
294
|
+
COMMIT_SHA=$(git rev-parse HEAD)
|
|
295
|
+
MONITORING_LEVEL="basic"
|
|
296
|
+
elif [ "$HOOK_NAME" = "post-push" ]; then
|
|
297
|
+
# Full monitoring for pushes - comprehensive validation
|
|
298
|
+
# For push hooks, we need to parse the pushed refs from stdin
|
|
299
|
+
while read local_ref local_sha remote_ref remote_sha; do
|
|
300
|
+
if [ "$local_sha" != "0000000000000000000000000000000000000000" ]; then
|
|
301
|
+
COMMIT_SHA=$local_sha
|
|
302
|
+
break
|
|
303
|
+
fi
|
|
304
|
+
done
|
|
305
|
+
MONITORING_LEVEL="full"
|
|
306
|
+
else
|
|
307
|
+
COMMIT_SHA=$(git rev-parse HEAD)
|
|
308
|
+
MONITORING_LEVEL="basic"
|
|
309
|
+
fi
|
|
310
|
+
|
|
311
|
+
if [ -z "$COMMIT_SHA" ]; then
|
|
312
|
+
echo "Warning: Could not determine commit SHA for post-processor"
|
|
313
|
+
exit 0
|
|
314
|
+
fi
|
|
315
|
+
|
|
316
|
+
# Get repository info
|
|
317
|
+
REPO="strray-framework/stringray" # Placeholder for now
|
|
318
|
+
BRANCH=$(git rev-parse --abbrev-ref HEAD)
|
|
319
|
+
AUTHOR=$(git log -1 --pretty=format:'%an <%ae>')
|
|
320
|
+
|
|
321
|
+
# Get changed files (different logic for commit vs push)
|
|
322
|
+
if [ "$HOOK_NAME" = "post-commit" ]; then
|
|
323
|
+
FILES=$(git diff --name-only HEAD~1 2>/dev/null || git diff --name-only --cached)
|
|
324
|
+
else
|
|
325
|
+
FILES=$(git log --name-only --oneline -1 $COMMIT_SHA | tail -n +2)
|
|
326
|
+
fi
|
|
327
|
+
|
|
328
|
+
# Trigger post-processor asynchronously (don't block git operations)
|
|
329
|
+
(
|
|
330
|
+
cd "$(dirname "$0")/../.." # Navigate to project root
|
|
331
|
+
|
|
332
|
+
# Find the 0xRay plugin in node_modules or current project (development)
|
|
333
|
+
STRRAY_PLUGIN=""
|
|
334
|
+
if [ -d "node_modules/strray-framework" ]; then
|
|
335
|
+
STRRAY_PLUGIN="node_modules/strray-framework"
|
|
336
|
+
elif [ -d "node_modules/@strray/strray-framework" ]; then
|
|
337
|
+
STRRAY_PLUGIN="node_modules/@strray/strray-framework"
|
|
338
|
+
elif [ -d "node_modules/OpenCode/plugins/strray-framework" ]; then
|
|
339
|
+
STRRAY_PLUGIN="node_modules/OpenCode/plugins/strray-framework"
|
|
340
|
+
elif [ -f "dist/postprocessor/PostProcessor.js" ]; then
|
|
341
|
+
# Development mode - use current project
|
|
342
|
+
STRRAY_PLUGIN="."
|
|
343
|
+
fi
|
|
344
|
+
|
|
345
|
+
if command -v node >/dev/null 2>&1 && [ -n "$STRRAY_PLUGIN" ]; then
|
|
346
|
+
# Call a separate script to avoid bash variable issues
|
|
347
|
+
export COMMIT_SHA="$COMMIT_SHA"
|
|
348
|
+
export REPO="$REPO"
|
|
349
|
+
export BRANCH="$BRANCH"
|
|
350
|
+
export AUTHOR="$AUTHOR"
|
|
351
|
+
export STRRAY_PLUGIN="$STRRAY_PLUGIN"
|
|
352
|
+
export MONITORING_LEVEL="$MONITORING_LEVEL"
|
|
353
|
+
export IS_FULL_MONITORING="$([ "$MONITORING_LEVEL" = "full" ] && echo "true" || echo "false")"
|
|
354
|
+
|
|
355
|
+
# Run appropriate monitoring based on hook type
|
|
356
|
+
if [ "$HOOK_NAME" = "post-commit" ]; then
|
|
357
|
+
# LIGHT MONITORING: Quick validation, don't block git workflow
|
|
358
|
+
# Timeout: 2 seconds max, log metrics for monitoring
|
|
359
|
+
START_TIME=\$(date +%s)
|
|
360
|
+
timeout 2 node -e "
|
|
361
|
+
(async () => {
|
|
362
|
+
try {
|
|
363
|
+
// Use import resolver to avoid hardcoded dist paths
|
|
364
|
+
const { importResolver } = await import('./utils/import-resolver.js');
|
|
365
|
+
const { LightweightValidator } = await importResolver.importModule('postprocessor/validation/LightweightValidator');
|
|
366
|
+
|
|
367
|
+
const validator = new LightweightValidator();
|
|
368
|
+
const result = await validator.validate();
|
|
369
|
+
|
|
370
|
+
if (result.warnings.length > 0) {
|
|
371
|
+
await frameworkLogger.log('-git-hook-trigger', '-result-warnings-length-warning-s-found-', 'info', { message: '⚠️ ' + result.warnings.length + ' warning(s) found:' });
|
|
372
|
+
result.warnings.forEach(w => await frameworkLogger.log('-git-hook-trigger', '-w-', 'info', { message: ' ' + w) });
|
|
373
|
+
}
|
|
374
|
+
|
|
375
|
+
if (!result.passed) {
|
|
376
|
+
await frameworkLogger.log('-git-hook-trigger', '-result-errors-length-error-s-found-', 'error', { message: '❌ ' + result.errors.length + ' error(s) found:' });
|
|
377
|
+
result.errors.forEach(e => await frameworkLogger.log('-git-hook-trigger', '-e-', 'info', { message: ' ' + e) });
|
|
378
|
+
process.exit(1);
|
|
379
|
+
}
|
|
380
|
+
|
|
381
|
+
await frameworkLogger.log('-git-hook-trigger', '-post-commit-validation-passed-in-result-duration-', 'success', { message: '✅ Post-commit: Validation passed in ' + result.duration + 'ms' });
|
|
382
|
+
} catch (error) {
|
|
383
|
+
await frameworkLogger.log('git-hook-trigger', 'post-commit-validation-failed', 'error', { error: error instanceof Error ? error.message : String(error) });
|
|
384
|
+
process.exit(1);
|
|
385
|
+
}
|
|
386
|
+
})();
|
|
387
|
+
" 2>/dev/null
|
|
388
|
+
EXIT_CODE=\$?
|
|
389
|
+
END_TIME=\$(date +%s)
|
|
390
|
+
DURATION=\$((END_TIME - START_TIME))
|
|
391
|
+
|
|
392
|
+
# Log metrics for monitoring (convert to milliseconds)
|
|
393
|
+
DURATION_MS=\$((DURATION * 1000))
|
|
394
|
+
# LOG CLEANUP: Remove old log files after validation
|
|
395
|
+
# Use relative path from CWD - works in both dev and consumer
|
|
396
|
+
node -e "
|
|
397
|
+
(async () => {
|
|
398
|
+
try {
|
|
399
|
+
// Use dynamic import that works in both dev and consumer
|
|
400
|
+
const basePath = process.env.STRRAY_BASE_PATH || '.';
|
|
401
|
+
const distPath = process.env.STRRAY_DIST_PATH || 'dist';
|
|
402
|
+
// First archive logs (compress and rotate) before cleanup
|
|
403
|
+
const { archiveLogFiles } = await import(basePath + '/' + distPath + '/postprocessor/triggers/GitHookTrigger.js');
|
|
404
|
+
const archiveResult = await archiveLogFiles({
|
|
405
|
+
archiveDirectory: 'logs/framework',
|
|
406
|
+
maxFileSizeMB: 10, // Archive if > 10MB
|
|
407
|
+
rotationIntervalHours: 24, // Archive if > 24 hours old
|
|
408
|
+
compressionEnabled: true,
|
|
409
|
+
maxAgeHours: 168, // Keep archives for 7 days
|
|
410
|
+
directories: ['logs/framework'],
|
|
411
|
+
excludePatterns: []
|
|
412
|
+
});
|
|
413
|
+
if (archiveResult.archived > 0) {
|
|
414
|
+
await frameworkLogger.log('-git-hook-trigger', '-archived-log-files-', 'info', { message: \`📦 Archived \${archiveResult.archived} log files\` });
|
|
415
|
+
}
|
|
416
|
+
|
|
417
|
+
// Then cleanup old files
|
|
418
|
+
const { cleanupLogFiles } = await import(basePath + '/' + distPath + '/postprocessor/triggers/GitHookTrigger.js');
|
|
419
|
+
const result = await cleanupLogFiles({
|
|
420
|
+
maxAgeHours: 24,
|
|
421
|
+
excludePatterns: [
|
|
422
|
+
// Core inference/logging - NEVER DELETE
|
|
423
|
+
'activity.log',
|
|
424
|
+
'framework-activity-',
|
|
425
|
+
'strray-plugin-',
|
|
426
|
+
|
|
427
|
+
// Analysis & reflections - Contains inference data
|
|
428
|
+
'kernel-',
|
|
429
|
+
'reflection-',
|
|
430
|
+
|
|
431
|
+
// Documentation & plans - Important artifacts
|
|
432
|
+
'.md',
|
|
433
|
+
'AUTOMATED_',
|
|
434
|
+
'REFACTORING-',
|
|
435
|
+
'release-',
|
|
436
|
+
|
|
437
|
+
// Subdirectories with important data (but test-activity should be cleaned)
|
|
438
|
+
'deployment/',
|
|
439
|
+
'monitoring/',
|
|
440
|
+
'reports/',
|
|
441
|
+
'reflections/',
|
|
442
|
+
|
|
443
|
+
// Init logs can be cleaned but keep recent
|
|
444
|
+
'strray-init-2026-01-2', // Keep Jan 20s
|
|
445
|
+
'strray-init-2026-01-3', // Keep Jan 30s
|
|
446
|
+
|
|
447
|
+
// Other important files
|
|
448
|
+
'current-session.log',
|
|
449
|
+
'full-test-run.log',
|
|
450
|
+
'kernel-codex',
|
|
451
|
+
'kernel-methodology',
|
|
452
|
+
'kernel-status',
|
|
453
|
+
'kernel-update',
|
|
454
|
+
'kernel-v2',
|
|
455
|
+
],
|
|
456
|
+
directories: ['logs/'],
|
|
457
|
+
enabled: true
|
|
458
|
+
});
|
|
459
|
+
if (result.cleaned > 0) {
|
|
460
|
+
await frameworkLogger.log('-git-hook-trigger', '-cleaned-result-cleaned-old-log-files-', 'info', { message: '🧹 Cleaned ' + result.cleaned + ' old log files' });
|
|
461
|
+
}
|
|
462
|
+
if (result.errors.length > 0) {
|
|
463
|
+
await frameworkLogger.log('git-hook-trigger', 'log-cleanup-errors', 'error', { errors: result.errors });
|
|
464
|
+
}
|
|
465
|
+
} catch (error) {
|
|
466
|
+
await frameworkLogger.log('git-hook-trigger', 'log-cleanup-failed', 'error', { error: error instanceof Error ? error.message : String(error) });
|
|
467
|
+
}
|
|
468
|
+
})();
|
|
469
|
+
"
|
|
470
|
+
|
|
471
|
+
echo "HOOK_METRICS: post-commit duration=\${DURATION_MS}ms exit_code=\${EXIT_CODE}" >&2
|
|
472
|
+
collector.recordMetrics('post-commit', \${DURATION_MS}, \${EXIT_CODE});
|
|
473
|
+
" 2>/dev/null
|
|
474
|
+
EXIT_CODE=\$?
|
|
475
|
+
END_TIME=\$(date +%s)
|
|
476
|
+
DURATION=\$((END_TIME - START_TIME))
|
|
477
|
+
|
|
478
|
+
# Log comprehensive metrics for monitoring (convert to milliseconds)
|
|
479
|
+
DURATION_MS=\$((DURATION * 1000))
|
|
480
|
+
echo "HOOK_METRICS: post-push duration=\${DURATION_MS}ms exit_code=\${EXIT_CODE}" >&2
|
|
481
|
+
|
|
482
|
+
# Record metrics using metrics collector (direct import for reliability)
|
|
483
|
+
# Use environment variable for base path - works in both dev and consumer
|
|
484
|
+
node -e "
|
|
485
|
+
(async () => {
|
|
486
|
+
try {
|
|
487
|
+
const basePath = process.env.STRRAY_BASE_PATH || '.';
|
|
488
|
+
const distPath = process.env.STRRAY_DIST_PATH || 'dist';
|
|
489
|
+
const { HookMetricsCollector } = await import(basePath + '/' + distPath + '/postprocessor/validation/HookMetricsCollector.js');
|
|
490
|
+
const collector = new HookMetricsCollector();
|
|
491
|
+
collector.recordMetrics('post-push', \${DURATION_MS}, \${EXIT_CODE});
|
|
492
|
+
} catch (error) {
|
|
493
|
+
// Silently fail if metrics collection fails
|
|
494
|
+
}
|
|
495
|
+
})();
|
|
496
|
+
" 2>/dev/null || true
|
|
497
|
+
|
|
498
|
+
[ \$EXIT_CODE -eq 0 ] && exit 0 || exit 1
|
|
499
|
+
fi
|
|
500
|
+
else
|
|
501
|
+
echo "Warning: 0xRay plugin not found or Node.js not available, skipping post-processor"
|
|
502
|
+
fi
|
|
503
|
+
)
|
|
504
|
+
|
|
505
|
+
# Don't wait for background process
|
|
506
|
+
exit 0
|
|
507
|
+
`;
|
|
508
|
+
}
|
|
509
|
+
async activateGitHooks(gitHooksDir, postCommitHook, postPushHook) {
|
|
510
|
+
try {
|
|
511
|
+
// Define the target hook paths in .git/hooks
|
|
512
|
+
const gitPostCommitHook = path.join(gitHooksDir, "post-commit");
|
|
513
|
+
const gitPostPushHook = path.join(gitHooksDir, "post-push");
|
|
514
|
+
// Create relative symlinks from .git/hooks to our hooks
|
|
515
|
+
const relativePostCommit = path.relative(gitHooksDir, postCommitHook);
|
|
516
|
+
const relativePostPush = path.relative(gitHooksDir, postPushHook);
|
|
517
|
+
// Handle existing hooks by backing them up
|
|
518
|
+
this.backupExistingHook(gitPostCommitHook);
|
|
519
|
+
this.backupExistingHook(gitPostPushHook);
|
|
520
|
+
// Create symlinks to activate our hooks
|
|
521
|
+
fs.symlinkSync(relativePostCommit, gitPostCommitHook);
|
|
522
|
+
fs.symlinkSync(relativePostPush, gitPostPushHook);
|
|
523
|
+
}
|
|
524
|
+
catch (error) {
|
|
525
|
+
await frameworkLogger.log("git-hook-trigger", "git-hooks-activation-failed", "error", { error: String(error) });
|
|
526
|
+
await frameworkLogger.log("git-hook-trigger", "manual-activation-hint", "info", { message: "💡 To activate manually, run:" });
|
|
527
|
+
await frameworkLogger.log("git-hook-trigger", "manual-activation-command-1", "info", {
|
|
528
|
+
message: ` ln -s "../../.opencode/hooks/post-commit" ".git/hooks/post-commit"`,
|
|
529
|
+
});
|
|
530
|
+
await frameworkLogger.log("git-hook-trigger", "manual-activation-command-2", "info", {
|
|
531
|
+
message: ` ln -s "../../.opencode/hooks/post-push" ".git/hooks/post-push"`,
|
|
532
|
+
});
|
|
533
|
+
}
|
|
534
|
+
}
|
|
535
|
+
backupExistingHook(hookPath) {
|
|
536
|
+
if (fs.existsSync(hookPath)) {
|
|
537
|
+
const existing = fs.readFileSync(hookPath, "utf8");
|
|
538
|
+
if (!existing.includes("postprocessor-trigger")) {
|
|
539
|
+
// Backup non-postprocessor hooks
|
|
540
|
+
fs.renameSync(hookPath, `${hookPath}.backup`);
|
|
541
|
+
}
|
|
542
|
+
else {
|
|
543
|
+
// Remove our existing symlink
|
|
544
|
+
fs.unlinkSync(hookPath);
|
|
545
|
+
}
|
|
546
|
+
}
|
|
547
|
+
}
|
|
548
|
+
async triggerPostProcessor(context) {
|
|
549
|
+
await this.postProcessor.executePostProcessorLoop(context);
|
|
550
|
+
}
|
|
551
|
+
}
|