stringray-ai 1.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/.mcp.json +68 -0
- package/LICENSE +21 -0
- package/README.md +618 -0
- package/dist/agents/architect.d.ts +3 -0
- package/dist/agents/architect.d.ts.map +1 -0
- package/dist/agents/architect.js +84 -0
- package/dist/agents/architect.js.map +1 -0
- package/dist/agents/bug-triage-specialist.d.ts +3 -0
- package/dist/agents/bug-triage-specialist.d.ts.map +1 -0
- package/dist/agents/bug-triage-specialist.js +66 -0
- package/dist/agents/bug-triage-specialist.js.map +1 -0
- package/dist/agents/code-reviewer.d.ts +3 -0
- package/dist/agents/code-reviewer.d.ts.map +1 -0
- package/dist/agents/code-reviewer.js +66 -0
- package/dist/agents/code-reviewer.js.map +1 -0
- package/dist/agents/enforcer.d.ts +3 -0
- package/dist/agents/enforcer.d.ts.map +1 -0
- package/dist/agents/enforcer.js +109 -0
- package/dist/agents/enforcer.js.map +1 -0
- package/dist/agents/index.d.ts +15 -0
- package/dist/agents/index.d.ts.map +1 -0
- package/dist/agents/index.js +26 -0
- package/dist/agents/index.js.map +1 -0
- package/dist/agents/librarian.d.ts +3 -0
- package/dist/agents/librarian.d.ts.map +1 -0
- package/dist/agents/librarian.js +70 -0
- package/dist/agents/librarian.js.map +1 -0
- package/dist/agents/log-monitor.d.ts +3 -0
- package/dist/agents/log-monitor.d.ts.map +1 -0
- package/dist/agents/log-monitor.js +102 -0
- package/dist/agents/log-monitor.js.map +1 -0
- package/dist/agents/orchestrator.d.ts +3 -0
- package/dist/agents/orchestrator.d.ts.map +1 -0
- package/dist/agents/orchestrator.js +85 -0
- package/dist/agents/orchestrator.js.map +1 -0
- package/dist/agents/refactorer.d.ts +3 -0
- package/dist/agents/refactorer.d.ts.map +1 -0
- package/dist/agents/refactorer.js +67 -0
- package/dist/agents/refactorer.js.map +1 -0
- package/dist/agents/security-auditor.d.ts +3 -0
- package/dist/agents/security-auditor.d.ts.map +1 -0
- package/dist/agents/security-auditor.js +66 -0
- package/dist/agents/security-auditor.js.map +1 -0
- package/dist/agents/sisyphus.d.ts +3 -0
- package/dist/agents/sisyphus.d.ts.map +1 -0
- package/dist/agents/sisyphus.js +53 -0
- package/dist/agents/sisyphus.js.map +1 -0
- package/dist/agents/test-architect.d.ts +3 -0
- package/dist/agents/test-architect.d.ts.map +1 -0
- package/dist/agents/test-architect.js +81 -0
- package/dist/agents/test-architect.js.map +1 -0
- package/dist/agents/types.d.ts +29 -0
- package/dist/agents/types.d.ts.map +1 -0
- package/dist/agents/types.js +2 -0
- package/dist/agents/types.js.map +1 -0
- package/dist/mcps/architect-tools.server.d.ts +40 -0
- package/dist/mcps/architect-tools.server.d.ts.map +1 -0
- package/dist/mcps/architect-tools.server.js +563 -0
- package/dist/mcps/architect-tools.server.js.map +1 -0
- package/dist/mcps/auto-format.server.d.ts +20 -0
- package/dist/mcps/auto-format.server.d.ts.map +1 -0
- package/dist/mcps/auto-format.server.js +391 -0
- package/dist/mcps/auto-format.server.js.map +1 -0
- package/dist/mcps/boot-orchestrator.server.d.ts +50 -0
- package/dist/mcps/boot-orchestrator.server.d.ts.map +1 -0
- package/dist/mcps/boot-orchestrator.server.js +871 -0
- package/dist/mcps/boot-orchestrator.server.js.map +1 -0
- package/dist/mcps/enforcer-tools.server.d.ts +26 -0
- package/dist/mcps/enforcer-tools.server.d.ts.map +1 -0
- package/dist/mcps/enforcer-tools.server.js +627 -0
- package/dist/mcps/enforcer-tools.server.js.map +1 -0
- package/dist/mcps/enhanced-orchestrator.server.d.ts +14 -0
- package/dist/mcps/enhanced-orchestrator.server.d.ts.map +1 -0
- package/dist/mcps/enhanced-orchestrator.server.js +250 -0
- package/dist/mcps/enhanced-orchestrator.server.js.map +1 -0
- package/dist/mcps/framework-compliance-audit.server.d.ts +23 -0
- package/dist/mcps/framework-compliance-audit.server.d.ts.map +1 -0
- package/dist/mcps/framework-compliance-audit.server.js +511 -0
- package/dist/mcps/framework-compliance-audit.server.js.map +1 -0
- package/dist/mcps/knowledge-skills/api-design.server.d.ts +16 -0
- package/dist/mcps/knowledge-skills/api-design.server.d.ts.map +1 -0
- package/dist/mcps/knowledge-skills/api-design.server.js +120 -0
- package/dist/mcps/knowledge-skills/api-design.server.js.map +1 -0
- package/dist/mcps/knowledge-skills/architecture-patterns.server.d.ts +16 -0
- package/dist/mcps/knowledge-skills/architecture-patterns.server.d.ts.map +1 -0
- package/dist/mcps/knowledge-skills/architecture-patterns.server.js +110 -0
- package/dist/mcps/knowledge-skills/architecture-patterns.server.js.map +1 -0
- package/dist/mcps/knowledge-skills/code-review.server.d.ts +32 -0
- package/dist/mcps/knowledge-skills/code-review.server.d.ts.map +1 -0
- package/dist/mcps/knowledge-skills/code-review.server.js +777 -0
- package/dist/mcps/knowledge-skills/code-review.server.js.map +1 -0
- package/dist/mcps/knowledge-skills/database-design.server.d.ts +44 -0
- package/dist/mcps/knowledge-skills/database-design.server.d.ts.map +1 -0
- package/dist/mcps/knowledge-skills/database-design.server.js +818 -0
- package/dist/mcps/knowledge-skills/database-design.server.js.map +1 -0
- package/dist/mcps/knowledge-skills/devops-deployment.server.d.ts +44 -0
- package/dist/mcps/knowledge-skills/devops-deployment.server.d.ts.map +1 -0
- package/dist/mcps/knowledge-skills/devops-deployment.server.js +1178 -0
- package/dist/mcps/knowledge-skills/devops-deployment.server.js.map +1 -0
- package/dist/mcps/knowledge-skills/documentation-generation.server.d.ts +48 -0
- package/dist/mcps/knowledge-skills/documentation-generation.server.d.ts.map +1 -0
- package/dist/mcps/knowledge-skills/documentation-generation.server.js +1188 -0
- package/dist/mcps/knowledge-skills/documentation-generation.server.js.map +1 -0
- package/dist/mcps/knowledge-skills/git-workflow.server.d.ts +16 -0
- package/dist/mcps/knowledge-skills/git-workflow.server.d.ts.map +1 -0
- package/dist/mcps/knowledge-skills/git-workflow.server.js +112 -0
- package/dist/mcps/knowledge-skills/git-workflow.server.js.map +1 -0
- package/dist/mcps/knowledge-skills/performance-optimization.server.d.ts +16 -0
- package/dist/mcps/knowledge-skills/performance-optimization.server.d.ts.map +1 -0
- package/dist/mcps/knowledge-skills/performance-optimization.server.js +108 -0
- package/dist/mcps/knowledge-skills/performance-optimization.server.js.map +1 -0
- package/dist/mcps/knowledge-skills/project-analysis.server.d.ts +34 -0
- package/dist/mcps/knowledge-skills/project-analysis.server.d.ts.map +1 -0
- package/dist/mcps/knowledge-skills/project-analysis.server.js +710 -0
- package/dist/mcps/knowledge-skills/project-analysis.server.js.map +1 -0
- package/dist/mcps/knowledge-skills/refactoring-strategies.server.d.ts +34 -0
- package/dist/mcps/knowledge-skills/refactoring-strategies.server.d.ts.map +1 -0
- package/dist/mcps/knowledge-skills/refactoring-strategies.server.js +794 -0
- package/dist/mcps/knowledge-skills/refactoring-strategies.server.js.map +1 -0
- package/dist/mcps/knowledge-skills/security-audit.server.d.ts +34 -0
- package/dist/mcps/knowledge-skills/security-audit.server.d.ts.map +1 -0
- package/dist/mcps/knowledge-skills/security-audit.server.js +769 -0
- package/dist/mcps/knowledge-skills/security-audit.server.js.map +1 -0
- package/dist/mcps/knowledge-skills/testing-best-practices.server.d.ts +37 -0
- package/dist/mcps/knowledge-skills/testing-best-practices.server.d.ts.map +1 -0
- package/dist/mcps/knowledge-skills/testing-best-practices.server.js +865 -0
- package/dist/mcps/knowledge-skills/testing-best-practices.server.js.map +1 -0
- package/dist/mcps/knowledge-skills/testing-strategy.server.d.ts +47 -0
- package/dist/mcps/knowledge-skills/testing-strategy.server.d.ts.map +1 -0
- package/dist/mcps/knowledge-skills/testing-strategy.server.js +672 -0
- package/dist/mcps/knowledge-skills/testing-strategy.server.js.map +1 -0
- package/dist/mcps/knowledge-skills/ui-ux-design.server.d.ts +42 -0
- package/dist/mcps/knowledge-skills/ui-ux-design.server.d.ts.map +1 -0
- package/dist/mcps/knowledge-skills/ui-ux-design.server.js +1016 -0
- package/dist/mcps/knowledge-skills/ui-ux-design.server.js.map +1 -0
- package/dist/mcps/lint.server.d.ts +18 -0
- package/dist/mcps/lint.server.d.ts.map +1 -0
- package/dist/mcps/lint.server.js +334 -0
- package/dist/mcps/lint.server.js.map +1 -0
- package/dist/mcps/model-health-check.server.d.ts +17 -0
- package/dist/mcps/model-health-check.server.d.ts.map +1 -0
- package/dist/mcps/model-health-check.server.js +226 -0
- package/dist/mcps/model-health-check.server.js.map +1 -0
- package/dist/mcps/orchestrator.server.d.ts +39 -0
- package/dist/mcps/orchestrator.server.d.ts.map +1 -0
- package/dist/mcps/orchestrator.server.js +908 -0
- package/dist/mcps/orchestrator.server.js.map +1 -0
- package/dist/mcps/performance-analysis.server.d.ts +28 -0
- package/dist/mcps/performance-analysis.server.d.ts.map +1 -0
- package/dist/mcps/performance-analysis.server.js +514 -0
- package/dist/mcps/performance-analysis.server.js.map +1 -0
- package/dist/mcps/processor-pipeline.server.d.ts +29 -0
- package/dist/mcps/processor-pipeline.server.d.ts.map +1 -0
- package/dist/mcps/processor-pipeline.server.js +520 -0
- package/dist/mcps/processor-pipeline.server.js.map +1 -0
- package/dist/mcps/security-scan.server.d.ts +20 -0
- package/dist/mcps/security-scan.server.d.ts.map +1 -0
- package/dist/mcps/security-scan.server.js +404 -0
- package/dist/mcps/security-scan.server.js.map +1 -0
- package/dist/mcps/state-manager.server.d.ts +29 -0
- package/dist/mcps/state-manager.server.d.ts.map +1 -0
- package/dist/mcps/state-manager.server.js +620 -0
- package/dist/mcps/state-manager.server.js.map +1 -0
- package/dist/orchestrator/enhanced-multi-agent-orchestrator.d.ts +109 -0
- package/dist/orchestrator/enhanced-multi-agent-orchestrator.d.ts.map +1 -0
- package/dist/orchestrator/enhanced-multi-agent-orchestrator.js +337 -0
- package/dist/orchestrator/enhanced-multi-agent-orchestrator.js.map +1 -0
- package/dist/orchestrator/intelligent-commit-batcher.d.ts +112 -0
- package/dist/orchestrator/intelligent-commit-batcher.d.ts.map +1 -0
- package/dist/orchestrator/intelligent-commit-batcher.js +330 -0
- package/dist/orchestrator/intelligent-commit-batcher.js.map +1 -0
- package/dist/plugin/agents/architect.d.ts +3 -0
- package/dist/plugin/agents/architect.d.ts.map +1 -0
- package/dist/plugin/agents/architect.js +84 -0
- package/dist/plugin/agents/architect.js.map +1 -0
- package/dist/plugin/agents/bug-triage-specialist.d.ts +3 -0
- package/dist/plugin/agents/bug-triage-specialist.d.ts.map +1 -0
- package/dist/plugin/agents/bug-triage-specialist.js +66 -0
- package/dist/plugin/agents/bug-triage-specialist.js.map +1 -0
- package/dist/plugin/agents/code-reviewer.d.ts +3 -0
- package/dist/plugin/agents/code-reviewer.d.ts.map +1 -0
- package/dist/plugin/agents/code-reviewer.js +66 -0
- package/dist/plugin/agents/code-reviewer.js.map +1 -0
- package/dist/plugin/agents/enforcer.d.ts +3 -0
- package/dist/plugin/agents/enforcer.d.ts.map +1 -0
- package/dist/plugin/agents/enforcer.js +109 -0
- package/dist/plugin/agents/enforcer.js.map +1 -0
- package/dist/plugin/agents/index.d.ts +15 -0
- package/dist/plugin/agents/index.d.ts.map +1 -0
- package/dist/plugin/agents/index.js +26 -0
- package/dist/plugin/agents/index.js.map +1 -0
- package/dist/plugin/agents/librarian.d.ts +3 -0
- package/dist/plugin/agents/librarian.d.ts.map +1 -0
- package/dist/plugin/agents/librarian.js +70 -0
- package/dist/plugin/agents/librarian.js.map +1 -0
- package/dist/plugin/agents/log-monitor.d.ts +3 -0
- package/dist/plugin/agents/log-monitor.d.ts.map +1 -0
- package/dist/plugin/agents/log-monitor.js +102 -0
- package/dist/plugin/agents/log-monitor.js.map +1 -0
- package/dist/plugin/agents/orchestrator.d.ts +3 -0
- package/dist/plugin/agents/orchestrator.d.ts.map +1 -0
- package/dist/plugin/agents/orchestrator.js +85 -0
- package/dist/plugin/agents/orchestrator.js.map +1 -0
- package/dist/plugin/agents/refactorer.d.ts +3 -0
- package/dist/plugin/agents/refactorer.d.ts.map +1 -0
- package/dist/plugin/agents/refactorer.js +67 -0
- package/dist/plugin/agents/refactorer.js.map +1 -0
- package/dist/plugin/agents/security-auditor.d.ts +3 -0
- package/dist/plugin/agents/security-auditor.d.ts.map +1 -0
- package/dist/plugin/agents/security-auditor.js +66 -0
- package/dist/plugin/agents/security-auditor.js.map +1 -0
- package/dist/plugin/agents/sisyphus.d.ts +3 -0
- package/dist/plugin/agents/sisyphus.d.ts.map +1 -0
- package/dist/plugin/agents/sisyphus.js +53 -0
- package/dist/plugin/agents/sisyphus.js.map +1 -0
- package/dist/plugin/agents/test-architect.d.ts +3 -0
- package/dist/plugin/agents/test-architect.d.ts.map +1 -0
- package/dist/plugin/agents/test-architect.js +81 -0
- package/dist/plugin/agents/test-architect.js.map +1 -0
- package/dist/plugin/agents/types.d.ts +29 -0
- package/dist/plugin/agents/types.d.ts.map +1 -0
- package/dist/plugin/agents/types.js +2 -0
- package/dist/plugin/agents/types.js.map +1 -0
- package/dist/plugin/config-loader.d.ts +67 -0
- package/dist/plugin/config-loader.d.ts.map +1 -0
- package/dist/plugin/config-loader.js +125 -0
- package/dist/plugin/config-loader.js.map +1 -0
- package/dist/plugin/context-loader.d.ts +122 -0
- package/dist/plugin/context-loader.d.ts.map +1 -0
- package/dist/plugin/context-loader.js +273 -0
- package/dist/plugin/context-loader.js.map +1 -0
- package/dist/plugin/delegation/agent-delegator.d.ts +217 -0
- package/dist/plugin/delegation/agent-delegator.d.ts.map +1 -0
- package/dist/plugin/delegation/agent-delegator.js +928 -0
- package/dist/plugin/delegation/agent-delegator.js.map +1 -0
- package/dist/plugin/delegation/codebase-context-analyzer.d.ts +157 -0
- package/dist/plugin/delegation/codebase-context-analyzer.d.ts.map +1 -0
- package/dist/plugin/delegation/codebase-context-analyzer.js +1029 -0
- package/dist/plugin/delegation/codebase-context-analyzer.js.map +1 -0
- package/dist/plugin/delegation/complexity-analyzer.d.ts +61 -0
- package/dist/plugin/delegation/complexity-analyzer.d.ts.map +1 -0
- package/dist/plugin/delegation/complexity-analyzer.js +253 -0
- package/dist/plugin/delegation/complexity-analyzer.js.map +1 -0
- package/dist/plugin/enforcement/enforcer-tools.d.ts +62 -0
- package/dist/plugin/enforcement/enforcer-tools.d.ts.map +1 -0
- package/dist/plugin/enforcement/enforcer-tools.js +407 -0
- package/dist/plugin/enforcement/enforcer-tools.js.map +1 -0
- package/dist/plugin/enforcement/rule-enforcer.d.ts +171 -0
- package/dist/plugin/enforcement/rule-enforcer.d.ts.map +1 -0
- package/dist/plugin/enforcement/rule-enforcer.js +1342 -0
- package/dist/plugin/enforcement/rule-enforcer.js.map +1 -0
- package/dist/plugin/enforcement/test-auto-healing.d.ts +78 -0
- package/dist/plugin/enforcement/test-auto-healing.d.ts.map +1 -0
- package/dist/plugin/enforcement/test-auto-healing.js +318 -0
- package/dist/plugin/enforcement/test-auto-healing.js.map +1 -0
- package/dist/plugin/framework-logger.d.ts +20 -0
- package/dist/plugin/framework-logger.d.ts.map +1 -0
- package/dist/plugin/framework-logger.js +79 -0
- package/dist/plugin/framework-logger.js.map +1 -0
- package/dist/plugin/logging-config.d.ts +11 -0
- package/dist/plugin/logging-config.d.ts.map +1 -0
- package/dist/plugin/logging-config.js +44 -0
- package/dist/plugin/logging-config.js.map +1 -0
- package/dist/plugin/mcps/architect-tools.server.d.ts +40 -0
- package/dist/plugin/mcps/architect-tools.server.d.ts.map +1 -0
- package/dist/plugin/mcps/architect-tools.server.js +563 -0
- package/dist/plugin/mcps/architect-tools.server.js.map +1 -0
- package/dist/plugin/mcps/auto-format.server.d.ts +20 -0
- package/dist/plugin/mcps/auto-format.server.d.ts.map +1 -0
- package/dist/plugin/mcps/auto-format.server.js +391 -0
- package/dist/plugin/mcps/auto-format.server.js.map +1 -0
- package/dist/plugin/mcps/boot-orchestrator.server.d.ts +50 -0
- package/dist/plugin/mcps/boot-orchestrator.server.d.ts.map +1 -0
- package/dist/plugin/mcps/boot-orchestrator.server.js +871 -0
- package/dist/plugin/mcps/boot-orchestrator.server.js.map +1 -0
- package/dist/plugin/mcps/enforcer-tools.server.d.ts +26 -0
- package/dist/plugin/mcps/enforcer-tools.server.d.ts.map +1 -0
- package/dist/plugin/mcps/enforcer-tools.server.js +627 -0
- package/dist/plugin/mcps/enforcer-tools.server.js.map +1 -0
- package/dist/plugin/mcps/enhanced-orchestrator.server.d.ts +14 -0
- package/dist/plugin/mcps/enhanced-orchestrator.server.d.ts.map +1 -0
- package/dist/plugin/mcps/enhanced-orchestrator.server.js +250 -0
- package/dist/plugin/mcps/enhanced-orchestrator.server.js.map +1 -0
- package/dist/plugin/mcps/framework-compliance-audit.server.d.ts +23 -0
- package/dist/plugin/mcps/framework-compliance-audit.server.d.ts.map +1 -0
- package/dist/plugin/mcps/framework-compliance-audit.server.js +511 -0
- package/dist/plugin/mcps/framework-compliance-audit.server.js.map +1 -0
- package/dist/plugin/mcps/knowledge-skills/api-design.server.d.ts +16 -0
- package/dist/plugin/mcps/knowledge-skills/api-design.server.d.ts.map +1 -0
- package/dist/plugin/mcps/knowledge-skills/api-design.server.js +120 -0
- package/dist/plugin/mcps/knowledge-skills/api-design.server.js.map +1 -0
- package/dist/plugin/mcps/knowledge-skills/architecture-patterns.server.d.ts +16 -0
- package/dist/plugin/mcps/knowledge-skills/architecture-patterns.server.d.ts.map +1 -0
- package/dist/plugin/mcps/knowledge-skills/architecture-patterns.server.js +110 -0
- package/dist/plugin/mcps/knowledge-skills/architecture-patterns.server.js.map +1 -0
- package/dist/plugin/mcps/knowledge-skills/code-review.server.d.ts +32 -0
- package/dist/plugin/mcps/knowledge-skills/code-review.server.d.ts.map +1 -0
- package/dist/plugin/mcps/knowledge-skills/code-review.server.js +777 -0
- package/dist/plugin/mcps/knowledge-skills/code-review.server.js.map +1 -0
- package/dist/plugin/mcps/knowledge-skills/database-design.server.d.ts +44 -0
- package/dist/plugin/mcps/knowledge-skills/database-design.server.d.ts.map +1 -0
- package/dist/plugin/mcps/knowledge-skills/database-design.server.js +818 -0
- package/dist/plugin/mcps/knowledge-skills/database-design.server.js.map +1 -0
- package/dist/plugin/mcps/knowledge-skills/devops-deployment.server.d.ts +44 -0
- package/dist/plugin/mcps/knowledge-skills/devops-deployment.server.d.ts.map +1 -0
- package/dist/plugin/mcps/knowledge-skills/devops-deployment.server.js +1178 -0
- package/dist/plugin/mcps/knowledge-skills/devops-deployment.server.js.map +1 -0
- package/dist/plugin/mcps/knowledge-skills/documentation-generation.server.d.ts +48 -0
- package/dist/plugin/mcps/knowledge-skills/documentation-generation.server.d.ts.map +1 -0
- package/dist/plugin/mcps/knowledge-skills/documentation-generation.server.js +1188 -0
- package/dist/plugin/mcps/knowledge-skills/documentation-generation.server.js.map +1 -0
- package/dist/plugin/mcps/knowledge-skills/git-workflow.server.d.ts +16 -0
- package/dist/plugin/mcps/knowledge-skills/git-workflow.server.d.ts.map +1 -0
- package/dist/plugin/mcps/knowledge-skills/git-workflow.server.js +112 -0
- package/dist/plugin/mcps/knowledge-skills/git-workflow.server.js.map +1 -0
- package/dist/plugin/mcps/knowledge-skills/performance-optimization.server.d.ts +16 -0
- package/dist/plugin/mcps/knowledge-skills/performance-optimization.server.d.ts.map +1 -0
- package/dist/plugin/mcps/knowledge-skills/performance-optimization.server.js +108 -0
- package/dist/plugin/mcps/knowledge-skills/performance-optimization.server.js.map +1 -0
- package/dist/plugin/mcps/knowledge-skills/project-analysis.server.d.ts +34 -0
- package/dist/plugin/mcps/knowledge-skills/project-analysis.server.d.ts.map +1 -0
- package/dist/plugin/mcps/knowledge-skills/project-analysis.server.js +710 -0
- package/dist/plugin/mcps/knowledge-skills/project-analysis.server.js.map +1 -0
- package/dist/plugin/mcps/knowledge-skills/refactoring-strategies.server.d.ts +34 -0
- package/dist/plugin/mcps/knowledge-skills/refactoring-strategies.server.d.ts.map +1 -0
- package/dist/plugin/mcps/knowledge-skills/refactoring-strategies.server.js +794 -0
- package/dist/plugin/mcps/knowledge-skills/refactoring-strategies.server.js.map +1 -0
- package/dist/plugin/mcps/knowledge-skills/security-audit.server.d.ts +34 -0
- package/dist/plugin/mcps/knowledge-skills/security-audit.server.d.ts.map +1 -0
- package/dist/plugin/mcps/knowledge-skills/security-audit.server.js +769 -0
- package/dist/plugin/mcps/knowledge-skills/security-audit.server.js.map +1 -0
- package/dist/plugin/mcps/knowledge-skills/testing-best-practices.server.d.ts +37 -0
- package/dist/plugin/mcps/knowledge-skills/testing-best-practices.server.d.ts.map +1 -0
- package/dist/plugin/mcps/knowledge-skills/testing-best-practices.server.js +865 -0
- package/dist/plugin/mcps/knowledge-skills/testing-best-practices.server.js.map +1 -0
- package/dist/plugin/mcps/knowledge-skills/testing-strategy.server.d.ts +47 -0
- package/dist/plugin/mcps/knowledge-skills/testing-strategy.server.d.ts.map +1 -0
- package/dist/plugin/mcps/knowledge-skills/testing-strategy.server.js +672 -0
- package/dist/plugin/mcps/knowledge-skills/testing-strategy.server.js.map +1 -0
- package/dist/plugin/mcps/knowledge-skills/ui-ux-design.server.d.ts +42 -0
- package/dist/plugin/mcps/knowledge-skills/ui-ux-design.server.d.ts.map +1 -0
- package/dist/plugin/mcps/knowledge-skills/ui-ux-design.server.js +1016 -0
- package/dist/plugin/mcps/knowledge-skills/ui-ux-design.server.js.map +1 -0
- package/dist/plugin/mcps/lint.server.d.ts +18 -0
- package/dist/plugin/mcps/lint.server.d.ts.map +1 -0
- package/dist/plugin/mcps/lint.server.js +334 -0
- package/dist/plugin/mcps/lint.server.js.map +1 -0
- package/dist/plugin/mcps/model-health-check.server.d.ts +17 -0
- package/dist/plugin/mcps/model-health-check.server.d.ts.map +1 -0
- package/dist/plugin/mcps/model-health-check.server.js +226 -0
- package/dist/plugin/mcps/model-health-check.server.js.map +1 -0
- package/dist/plugin/mcps/orchestrator.server.d.ts +39 -0
- package/dist/plugin/mcps/orchestrator.server.d.ts.map +1 -0
- package/dist/plugin/mcps/orchestrator.server.js +908 -0
- package/dist/plugin/mcps/orchestrator.server.js.map +1 -0
- package/dist/plugin/mcps/performance-analysis.server.d.ts +28 -0
- package/dist/plugin/mcps/performance-analysis.server.d.ts.map +1 -0
- package/dist/plugin/mcps/performance-analysis.server.js +514 -0
- package/dist/plugin/mcps/performance-analysis.server.js.map +1 -0
- package/dist/plugin/mcps/processor-pipeline.server.d.ts +29 -0
- package/dist/plugin/mcps/processor-pipeline.server.d.ts.map +1 -0
- package/dist/plugin/mcps/processor-pipeline.server.js +520 -0
- package/dist/plugin/mcps/processor-pipeline.server.js.map +1 -0
- package/dist/plugin/mcps/security-scan.server.d.ts +20 -0
- package/dist/plugin/mcps/security-scan.server.d.ts.map +1 -0
- package/dist/plugin/mcps/security-scan.server.js +404 -0
- package/dist/plugin/mcps/security-scan.server.js.map +1 -0
- package/dist/plugin/mcps/state-manager.server.d.ts +29 -0
- package/dist/plugin/mcps/state-manager.server.d.ts.map +1 -0
- package/dist/plugin/mcps/state-manager.server.js +620 -0
- package/dist/plugin/mcps/state-manager.server.js.map +1 -0
- package/dist/plugin/monitoring/advanced-profiler.d.ts +48 -0
- package/dist/plugin/monitoring/advanced-profiler.d.ts.map +1 -0
- package/dist/plugin/monitoring/advanced-profiler.js +216 -0
- package/dist/plugin/monitoring/advanced-profiler.js.map +1 -0
- package/dist/plugin/monitoring/enterprise-monitoring-system.d.ts +331 -0
- package/dist/plugin/monitoring/enterprise-monitoring-system.d.ts.map +1 -0
- package/dist/plugin/monitoring/enterprise-monitoring-system.js +797 -0
- package/dist/plugin/monitoring/enterprise-monitoring-system.js.map +1 -0
- package/dist/plugin/orchestrator/enhanced-multi-agent-orchestrator.d.ts +111 -0
- package/dist/plugin/orchestrator/enhanced-multi-agent-orchestrator.d.ts.map +1 -0
- package/dist/plugin/orchestrator/enhanced-multi-agent-orchestrator.js +339 -0
- package/dist/plugin/orchestrator/enhanced-multi-agent-orchestrator.js.map +1 -0
- package/dist/plugin/orchestrator/intelligent-commit-batcher.d.ts +112 -0
- package/dist/plugin/orchestrator/intelligent-commit-batcher.d.ts.map +1 -0
- package/dist/plugin/orchestrator/intelligent-commit-batcher.js +330 -0
- package/dist/plugin/orchestrator/intelligent-commit-batcher.js.map +1 -0
- package/dist/plugin/orchestrator.d.ts +91 -0
- package/dist/plugin/orchestrator.d.ts.map +1 -0
- package/dist/plugin/orchestrator.js +444 -0
- package/dist/plugin/orchestrator.js.map +1 -0
- package/dist/plugin/plugins/marketplace/marketplace-service.d.ts +108 -0
- package/dist/plugin/plugins/marketplace/marketplace-service.d.ts.map +1 -0
- package/dist/plugin/plugins/marketplace/marketplace-service.js +620 -0
- package/dist/plugin/plugins/marketplace/marketplace-service.js.map +1 -0
- package/dist/plugin/plugins/marketplace/marketplace-types.d.ts +468 -0
- package/dist/plugin/plugins/marketplace/marketplace-types.d.ts.map +1 -0
- package/dist/plugin/plugins/marketplace/marketplace-types.js +11 -0
- package/dist/plugin/plugins/marketplace/marketplace-types.js.map +1 -0
- package/dist/plugin/plugins/plugin-system.d.ts +152 -0
- package/dist/plugin/plugins/plugin-system.d.ts.map +1 -0
- package/dist/plugin/plugins/plugin-system.js +405 -0
- package/dist/plugin/plugins/plugin-system.js.map +1 -0
- package/dist/plugin/plugins/stringray-codex-injection.d.ts +68 -0
- package/dist/plugin/plugins/stringray-codex-injection.d.ts.map +1 -0
- package/dist/plugin/plugins/stringray-codex-injection.js +225 -0
- package/dist/plugin/plugins/stringray-codex-injection.js.map +1 -0
- package/dist/plugin/plugins/strray-codex-injection.d.ts +68 -0
- package/dist/plugin/plugins/strray-codex-injection.d.ts.map +1 -0
- package/dist/plugin/plugins/strray-codex-injection.js +225 -0
- package/dist/plugin/plugins/strray-codex-injection.js.map +1 -0
- package/dist/plugin/processors/index.d.ts +12 -0
- package/dist/plugin/processors/index.d.ts.map +1 -0
- package/dist/plugin/processors/index.js +12 -0
- package/dist/plugin/processors/index.js.map +1 -0
- package/dist/plugin/processors/processor-manager.d.ts +113 -0
- package/dist/plugin/processors/processor-manager.d.ts.map +1 -0
- package/dist/plugin/processors/processor-manager.js +498 -0
- package/dist/plugin/processors/processor-manager.js.map +1 -0
- package/dist/plugin/processors/processor-types.d.ts +50 -0
- package/dist/plugin/processors/processor-types.d.ts.map +1 -0
- package/dist/plugin/processors/processor-types.js +10 -0
- package/dist/plugin/processors/processor-types.js.map +1 -0
- package/dist/plugin/processors/refactoring-logging-processor.d.ts +61 -0
- package/dist/plugin/processors/refactoring-logging-processor.d.ts.map +1 -0
- package/dist/plugin/processors/refactoring-logging-processor.js +257 -0
- package/dist/plugin/processors/refactoring-logging-processor.js.map +1 -0
- package/dist/plugin/reporting/framework-reporting-system.d.ts +157 -0
- package/dist/plugin/reporting/framework-reporting-system.d.ts.map +1 -0
- package/dist/plugin/reporting/framework-reporting-system.js +783 -0
- package/dist/plugin/reporting/framework-reporting-system.js.map +1 -0
- package/dist/plugin/security/security-hardening-system.d.ts +220 -0
- package/dist/plugin/security/security-hardening-system.d.ts.map +1 -0
- package/dist/plugin/security/security-hardening-system.js +605 -0
- package/dist/plugin/security/security-hardening-system.js.map +1 -0
- package/dist/plugin/state/context-providers.d.ts +5 -0
- package/dist/plugin/state/context-providers.d.ts.map +1 -0
- package/dist/plugin/state/context-providers.js +2 -0
- package/dist/plugin/state/context-providers.js.map +1 -0
- package/dist/plugin/state/index.d.ts +5 -0
- package/dist/plugin/state/index.d.ts.map +1 -0
- package/dist/plugin/state/index.js +8 -0
- package/dist/plugin/state/index.js.map +1 -0
- package/dist/plugin/state/state-manager.d.ts +29 -0
- package/dist/plugin/state/state-manager.d.ts.map +1 -0
- package/dist/plugin/state/state-manager.js +153 -0
- package/dist/plugin/state/state-manager.js.map +1 -0
- package/dist/plugin/state/state-types.d.ts +6 -0
- package/dist/plugin/state/state-types.d.ts.map +1 -0
- package/dist/plugin/state/state-types.js +2 -0
- package/dist/plugin/state/state-types.js.map +1 -0
- package/dist/plugin/utils/codex-parser.d.ts +62 -0
- package/dist/plugin/utils/codex-parser.d.ts.map +1 -0
- package/dist/plugin/utils/codex-parser.js +396 -0
- package/dist/plugin/utils/codex-parser.js.map +1 -0
- package/dist/plugin/utils/command-runner.d.ts +24 -0
- package/dist/plugin/utils/command-runner.d.ts.map +1 -0
- package/dist/plugin/utils/command-runner.js +44 -0
- package/dist/plugin/utils/command-runner.js.map +1 -0
- package/dist/plugin/utils/import-resolver.d.ts +55 -0
- package/dist/plugin/utils/import-resolver.d.ts.map +1 -0
- package/dist/plugin/utils/import-resolver.js +198 -0
- package/dist/plugin/utils/import-resolver.js.map +1 -0
- package/dist/plugin/utils/memory-pool.d.ts +90 -0
- package/dist/plugin/utils/memory-pool.d.ts.map +1 -0
- package/dist/plugin/utils/memory-pool.js +245 -0
- package/dist/plugin/utils/memory-pool.js.map +1 -0
- package/dist/plugin/utils/path-resolver.d.ts +49 -0
- package/dist/plugin/utils/path-resolver.d.ts.map +1 -0
- package/dist/plugin/utils/path-resolver.js +126 -0
- package/dist/plugin/utils/path-resolver.js.map +1 -0
- package/dist/plugin/utils/test-template-generator.d.ts +26 -0
- package/dist/plugin/utils/test-template-generator.d.ts.map +1 -0
- package/dist/plugin/utils/test-template-generator.js +178 -0
- package/dist/plugin/utils/test-template-generator.js.map +1 -0
- package/dist/processors/index.d.ts +12 -0
- package/dist/processors/index.d.ts.map +1 -0
- package/dist/processors/index.js +12 -0
- package/dist/processors/index.js.map +1 -0
- package/dist/processors/processor-manager.d.ts +113 -0
- package/dist/processors/processor-manager.d.ts.map +1 -0
- package/dist/processors/processor-manager.js +498 -0
- package/dist/processors/processor-manager.js.map +1 -0
- package/dist/processors/processor-types.d.ts +50 -0
- package/dist/processors/processor-types.d.ts.map +1 -0
- package/dist/processors/processor-types.js +10 -0
- package/dist/processors/processor-types.js.map +1 -0
- package/dist/processors/refactoring-logging-processor.d.ts +61 -0
- package/dist/processors/refactoring-logging-processor.d.ts.map +1 -0
- package/dist/processors/refactoring-logging-processor.js +257 -0
- package/dist/processors/refactoring-logging-processor.js.map +1 -0
- package/dist/state/context-providers.d.ts +5 -0
- package/dist/state/context-providers.d.ts.map +1 -0
- package/dist/state/context-providers.js +2 -0
- package/dist/state/context-providers.js.map +1 -0
- package/dist/state/index.d.ts +5 -0
- package/dist/state/index.d.ts.map +1 -0
- package/dist/state/index.js +8 -0
- package/dist/state/index.js.map +1 -0
- package/dist/state/state-manager.d.ts +29 -0
- package/dist/state/state-manager.d.ts.map +1 -0
- package/dist/state/state-manager.js +153 -0
- package/dist/state/state-manager.js.map +1 -0
- package/dist/state/state-types.d.ts +6 -0
- package/dist/state/state-types.d.ts.map +1 -0
- package/dist/state/state-types.js +2 -0
- package/dist/state/state-types.js.map +1 -0
- package/dist/utils/codex-parser.d.ts +62 -0
- package/dist/utils/codex-parser.d.ts.map +1 -0
- package/dist/utils/codex-parser.js +396 -0
- package/dist/utils/codex-parser.js.map +1 -0
- package/dist/utils/command-runner.d.ts +24 -0
- package/dist/utils/command-runner.d.ts.map +1 -0
- package/dist/utils/command-runner.js +44 -0
- package/dist/utils/command-runner.js.map +1 -0
- package/dist/utils/import-resolver.d.ts +55 -0
- package/dist/utils/import-resolver.d.ts.map +1 -0
- package/dist/utils/import-resolver.js +198 -0
- package/dist/utils/import-resolver.js.map +1 -0
- package/dist/utils/memory-pool.d.ts +90 -0
- package/dist/utils/memory-pool.d.ts.map +1 -0
- package/dist/utils/memory-pool.js +245 -0
- package/dist/utils/memory-pool.js.map +1 -0
- package/dist/utils/path-resolver.d.ts +49 -0
- package/dist/utils/path-resolver.d.ts.map +1 -0
- package/dist/utils/path-resolver.js +126 -0
- package/dist/utils/path-resolver.js.map +1 -0
- package/dist/utils/test-template-generator.d.ts +26 -0
- package/dist/utils/test-template-generator.d.ts.map +1 -0
- package/dist/utils/test-template-generator.js +178 -0
- package/dist/utils/test-template-generator.js.map +1 -0
- package/package.json +138 -0
- package/scripts/analysis/analyze-context-awareness.ts +219 -0
- package/scripts/analysis/analyze-framework-usage.ts +208 -0
- package/scripts/analysis/analyzer-agent-runner.js +328 -0
- package/scripts/analysis/context-awareness-report.ts +250 -0
- package/scripts/analyze-imports.mjs +147 -0
- package/scripts/basic-security-audit.cjs +261 -0
- package/scripts/boot-check.cjs +188 -0
- package/scripts/build/check-syntax.sh +1 -0
- package/scripts/build/check-tsc.sh +1 -0
- package/scripts/build/check-types.sh +1 -0
- package/scripts/build/compile-single.sh +1 -0
- package/scripts/build/copy-plugin.sh +1 -0
- package/scripts/build/manual-build.sh +1 -0
- package/scripts/build/run-build-after-copy.sh +1 -0
- package/scripts/build/run-build-attempt.sh +1 -0
- package/scripts/build/run-build-errors-grep.sh +1 -0
- package/scripts/build/run-build-errors.sh +1 -0
- package/scripts/build/run-build-limited.sh +1 -0
- package/scripts/build/run-build-list.sh +1 -0
- package/scripts/build/run-build.sh +1 -0
- package/scripts/build/run-limited.sh +1 -0
- package/scripts/build/run-tsc-direct.sh +1 -0
- package/scripts/build/run-type-check.sh +1 -0
- package/scripts/build/run-typecheck.sh +1 -0
- package/scripts/build/test-build.sh +1 -0
- package/scripts/check-logs.sh +62 -0
- package/scripts/debug/debug-context-enhancement.ts +116 -0
- package/scripts/debug/debug-rules.mjs +23 -0
- package/scripts/demo/demo-clickable-monitoring.mjs +116 -0
- package/scripts/demo/profiling-demo.js +108 -0
- package/scripts/demo/profiling-demo.ts +126 -0
- package/scripts/demo/reporting-demonstration.ts +184 -0
- package/scripts/demo/reporting-examples.ts +105 -0
- package/scripts/dependency-scan.cjs +111 -0
- package/scripts/deploy-stringray-plugin.sh +323 -0
- package/scripts/disable-logging.sh +20 -0
- package/scripts/extract-framework.sh +405 -0
- package/scripts/fix-mcp-capabilities.js +83 -0
- package/scripts/framework/advanced-profiling-integration.sh +384 -0
- package/scripts/framework/check-agent-orchestration-health.sh +113 -0
- package/scripts/framework/enterprise-analysis-test.sh +174 -0
- package/scripts/framework/implement-analyzer-agent.sh +393 -0
- package/scripts/framework/merge-mcp-configs.sh +201 -0
- package/scripts/framework/validate-multi-agent-orchestration.sh +195 -0
- package/scripts/framework/validate-profiling.sh +64 -0
- package/scripts/github-actions-monitor.cjs +289 -0
- package/scripts/init.ts +121 -0
- package/scripts/monitoring/initialize-monitoring-pipeline.sh +89 -0
- package/scripts/monitoring/memory-dashboard.sh +52 -0
- package/scripts/monitoring/monitoring-daemon.mjs +67 -0
- package/scripts/monitoring/monitoring-daemon.sh +190 -0
- package/scripts/monitoring/profiling-dashboard.sh +69 -0
- package/scripts/performance-report.js +56 -0
- package/scripts/postinstall.cjs +240 -0
- package/scripts/profile-performance.sh +263 -0
- package/scripts/register-mcp-servers-fixed.sh +74 -0
- package/scripts/register-mcp-servers.sh +96 -0
- package/scripts/reporting/generate-phase1-report.js +28 -0
- package/scripts/reporting/run-postprocessor.js +59 -0
- package/scripts/reporting/trigger-report.js +15 -0
- package/scripts/run-simulations.mjs +29 -0
- package/scripts/scenario-data-processor.py +122 -0
- package/scripts/scenarios/scenario-security-check.ts +60 -0
- package/scripts/scenarios/scenario-user-management.ts +123 -0
- package/scripts/setup.cjs +128 -0
- package/scripts/simulation/run-simulations.js +84 -0
- package/scripts/simulation/simulate-full-orchestrator.ts +239 -0
- package/scripts/strray-triage.sh +349 -0
- package/scripts/test/run-memory-regression.sh +45 -0
- package/scripts/test/run-test.sh +2 -0
- package/scripts/test/test-deployment.sh +552 -0
- package/scripts/test/test-enhanced-report.ts +24 -0
- package/scripts/test/test-graceful-shutdown.sh +35 -0
- package/scripts/test/test-integration.mjs +79 -0
- package/scripts/test/test-manual-orchestration.sh +168 -0
- package/scripts/test/test-max-agents.sh +70 -0
- package/scripts/test/test-memory-monitor.sh +40 -0
- package/scripts/test/test-memory-pools.sh +58 -0
- package/scripts/test/test-module.ts +1 -0
- package/scripts/test/test-multi-agent-trigger.sh +251 -0
- package/scripts/test/test-orchestrator.txt +1 -0
- package/scripts/test/test-postinstall.js +1 -0
- package/scripts/test/test-security-module.ts +27 -0
- package/scripts/test/test-session-management.js +135 -0
- package/scripts/test/test-simulation.mjs +14 -0
- package/scripts/test/test-user-service.ts +111 -0
- package/scripts/test-comprehensive-path-resolution.mjs +62 -0
- package/scripts/test-data-processor.py +51 -0
- package/scripts/test-enforcement-e2e.mjs +127 -0
- package/scripts/test-full-plugin-no-timeout.sh +30 -0
- package/scripts/test-path-resolver.mjs +32 -0
- package/scripts/test-rules.mjs +128 -0
- package/scripts/test-stringray-plugin.mjs +66 -0
- package/scripts/test-utils/smart-test-runner.mjs +609 -0
- package/scripts/test-utils/test-quarantine.mjs +246 -0
- package/scripts/validate-codex.js +60 -0
- package/scripts/validate-phase1.mjs +189 -0
- package/scripts/validation/run-validators.js +114 -0
- package/scripts/validation/validate-external-processes.js +240 -0
- package/scripts/validation/validate-mcp-connectivity.js +165 -0
- package/scripts/validation/validate-oh-my-opencode-integration.js +200 -0
- package/scripts/validation/validate-reports.ts +114 -0
- package/scripts/verify-phase1.js +144 -0
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* StringRay Plugin Loading Test
|
|
5
|
+
*
|
|
6
|
+
* Tests that the StringRay codex injection plugin loads correctly
|
|
7
|
+
* and properly injects codex content into system prompts.
|
|
8
|
+
*
|
|
9
|
+
* @version 1.0.0
|
|
10
|
+
* @since 2026-01-13
|
|
11
|
+
*/
|
|
12
|
+
|
|
13
|
+
// Path configuration for cross-environment compatibility
|
|
14
|
+
// Check if we're running from a test environment (directory name contains 'stringray-' or 'test-')
|
|
15
|
+
const cwd = process.cwd();
|
|
16
|
+
const dirName = cwd.split('/').pop() || '';
|
|
17
|
+
const isTestEnvironment = dirName.includes('stringray-') || dirName.includes('final-stringray') || dirName.includes('test-');
|
|
18
|
+
const PLUGIN_PATH = process.env.STRINGRAY_PLUGIN_PATH ||
|
|
19
|
+
(isTestEnvironment ? 'node_modules/stringray/dist/plugin/plugins' : 'dist/plugin/plugins');
|
|
20
|
+
|
|
21
|
+
console.log('🧪 Testing StringRay Plugin Loading...');
|
|
22
|
+
console.log('=====================================\n');
|
|
23
|
+
|
|
24
|
+
(async () => {
|
|
25
|
+
try {
|
|
26
|
+
// Dynamic import for cross-environment compatibility
|
|
27
|
+
const fullPath = new URL(`${PLUGIN_PATH}/stringray-codex-injection.js`, `file://${cwd}/`).href;
|
|
28
|
+
const { default: stringrayCodexPlugin } = await import(fullPath);
|
|
29
|
+
const plugin = await stringrayCodexPlugin({});
|
|
30
|
+
console.log('✅ Plugin loaded successfully');
|
|
31
|
+
|
|
32
|
+
// Test the system transform hook
|
|
33
|
+
const testOutput = { system: [] };
|
|
34
|
+
await plugin['experimental.chat.system.transform']({}, testOutput);
|
|
35
|
+
|
|
36
|
+
console.log('✅ System transform hook executed');
|
|
37
|
+
console.log(`📝 System messages added: ${testOutput.system?.length || 0}`);
|
|
38
|
+
|
|
39
|
+
if (testOutput.system && testOutput.system.length > 0) {
|
|
40
|
+
console.log(`✨ Welcome message: ${testOutput.system[0].substring(0, 80)}...`);
|
|
41
|
+
|
|
42
|
+
// Check if codex content is included
|
|
43
|
+
const allContent = testOutput.system.join('\n');
|
|
44
|
+
const hasCodex = allContent.includes('StringRay Framework Codex v1.2.20');
|
|
45
|
+
const hasTerms = allContent.includes('Progressive Prod-Ready Code');
|
|
46
|
+
|
|
47
|
+
console.log(`📚 Codex context injected: ${hasCodex ? '✅' : '❌'}`);
|
|
48
|
+
console.log(`📋 Codex terms included: ${hasTerms ? '✅' : '❌'}`);
|
|
49
|
+
|
|
50
|
+
if (hasCodex && hasTerms) {
|
|
51
|
+
console.log('\n🎉 StringRay Framework Plugin Test: PASSED');
|
|
52
|
+
console.log('✨ Framework is ready for oh-my-opencode integration');
|
|
53
|
+
} else {
|
|
54
|
+
console.log('\n❌ StringRay Framework Plugin Test: FAILED');
|
|
55
|
+
process.exit(1);
|
|
56
|
+
}
|
|
57
|
+
} else {
|
|
58
|
+
console.log('❌ No system messages generated');
|
|
59
|
+
process.exit(1);
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
} catch (error) {
|
|
63
|
+
console.error('❌ Plugin loading failed:', error);
|
|
64
|
+
process.exit(1);
|
|
65
|
+
}
|
|
66
|
+
})();
|
|
@@ -0,0 +1,609 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* Smart Test Runner - Surgical fixes for large test suite execution
|
|
5
|
+
*
|
|
6
|
+
* Addresses key challenges:
|
|
7
|
+
* - Output truncation at 30,000 characters
|
|
8
|
+
* - Max test rule: run individually if over threshold
|
|
9
|
+
* - Intelligent batching for large test suites
|
|
10
|
+
* - Test isolation and quarantine strategies
|
|
11
|
+
*/
|
|
12
|
+
|
|
13
|
+
import { execSync, spawn } from 'child_process';
|
|
14
|
+
import fs from 'fs';
|
|
15
|
+
import path from 'path';
|
|
16
|
+
// Path configuration for cross-environment compatibility
|
|
17
|
+
const ORCHESTRATOR_PATH = process.env.STRRAY_ORCHESTRATOR_PATH || '../../dist/orchestrator';
|
|
18
|
+
|
|
19
|
+
import { StrRayOrchestrator } from `${ORCHESTRATOR_PATH}.js`;
|
|
20
|
+
|
|
21
|
+
const MAX_OUTPUT_SIZE = 100000; // Increased buffer for large test outputs
|
|
22
|
+
const MAX_FILES_THRESHOLD = 15; // Run individually if more than 15 test files (AGGRESSIVE)
|
|
23
|
+
const CHUNK_SIZE = 3; // Process tests in smaller chunks of 3 (more granular)
|
|
24
|
+
const CHUNK_TIMEOUT_MS = 8000; // 8-second timeout per chunk (AGGRESSIVE - Codex Term #45)
|
|
25
|
+
const TOTAL_TIMEOUT_MS = 45000; // 45-second total timeout (AGGRESSIVE - Codex Term #45)
|
|
26
|
+
const MAX_SUITE_SIZE = 30; // Maximum 30 files per suite (reduced - Codex Term #45)
|
|
27
|
+
const TEST_PARALLEL_WORKERS = 8; // Run tests with 8 parallel workers (increased)
|
|
28
|
+
|
|
29
|
+
class SmartTestRunner {
|
|
30
|
+
constructor() {
|
|
31
|
+
this.testResults = [];
|
|
32
|
+
this.outputChunks = [];
|
|
33
|
+
this.quarantinedTests = [];
|
|
34
|
+
this.startTime = Date.now();
|
|
35
|
+
this.testCache = new Map(); // AGGRESSIVE: Cache test results
|
|
36
|
+
this.skipUnchanged = true; // AGGRESSIVE: Skip unchanged tests
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
/**
|
|
40
|
+
* AGGRESSIVE: Check if test file has changed since last run
|
|
41
|
+
*/
|
|
42
|
+
shouldSkipTest(testFile) {
|
|
43
|
+
if (!this.skipUnchanged) return false;
|
|
44
|
+
|
|
45
|
+
try {
|
|
46
|
+
const stats = fs.statSync(testFile);
|
|
47
|
+
const cacheKey = `${testFile}:${stats.mtime.getTime()}`;
|
|
48
|
+
const cached = this.testCache.get(testFile);
|
|
49
|
+
|
|
50
|
+
if (cached && cached.key === cacheKey) {
|
|
51
|
+
console.log(`⏭️ Skipping unchanged test: ${path.basename(testFile)}`);
|
|
52
|
+
return true;
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
return false;
|
|
56
|
+
} catch {
|
|
57
|
+
return false; // If we can't check, run the test
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
/**
|
|
62
|
+
* AGGRESSIVE: Cache successful test results
|
|
63
|
+
*/
|
|
64
|
+
cacheTestResult(testFile, result) {
|
|
65
|
+
if (result.success) {
|
|
66
|
+
try {
|
|
67
|
+
const stats = fs.statSync(testFile);
|
|
68
|
+
const cacheKey = `${testFile}:${stats.mtime.getTime()}`;
|
|
69
|
+
this.testCache.set(testFile, {
|
|
70
|
+
key: cacheKey,
|
|
71
|
+
result: result,
|
|
72
|
+
timestamp: Date.now()
|
|
73
|
+
});
|
|
74
|
+
} catch {
|
|
75
|
+
// Ignore caching errors
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
/**
|
|
81
|
+
* Check if total execution time has exceeded limit (Codex Term #45)
|
|
82
|
+
*/
|
|
83
|
+
hasExceededTotalTimeout() {
|
|
84
|
+
return (Date.now() - this.startTime) > TOTAL_TIMEOUT_MS;
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
/**
|
|
88
|
+
* Main execution method
|
|
89
|
+
*/
|
|
90
|
+
async run(options = {}) {
|
|
91
|
+
const { pattern = '**/*.test.ts', quarantineMode = false, autoHeal = false } = options;
|
|
92
|
+
this.startTime = Date.now();
|
|
93
|
+
|
|
94
|
+
console.log('🚀 Smart Test Runner - AGGRESSIVE optimizations for large test suites');
|
|
95
|
+
console.log('━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━');
|
|
96
|
+
console.log(`⏱️ AGGRESSIVE: Total timeout: ${TOTAL_TIMEOUT_MS / 1000}s | Chunk timeout: ${CHUNK_TIMEOUT_MS / 1000}s`);
|
|
97
|
+
console.log(`⚡ AGGRESSIVE: ${TEST_PARALLEL_WORKERS} parallel workers | Max ${MAX_SUITE_SIZE} files | ${CHUNK_SIZE} per chunk`);
|
|
98
|
+
console.log(`🚀 AGGRESSIVE: 5s per-test timeout | Bail after 3 failures | Cache enabled`);
|
|
99
|
+
|
|
100
|
+
try {
|
|
101
|
+
// Step 1: Discover test files
|
|
102
|
+
const testFiles = this.discoverTestFiles(pattern);
|
|
103
|
+
console.log(`📋 Discovered ${testFiles.length} test files`);
|
|
104
|
+
|
|
105
|
+
if (testFiles.length === 0) {
|
|
106
|
+
console.log('❌ No test files found');
|
|
107
|
+
return { success: false, results: [] };
|
|
108
|
+
}
|
|
109
|
+
|
|
110
|
+
// Step 1.5: Apply suite size limits (Codex Term #45)
|
|
111
|
+
if (testFiles.length > MAX_SUITE_SIZE) {
|
|
112
|
+
console.log(`🚫 Test suite too large (${testFiles.length} files > ${MAX_SUITE_SIZE} max)`);
|
|
113
|
+
console.log('❌ Aborting execution - refactor test suite to comply with size limits');
|
|
114
|
+
return { success: false, results: [], error: 'SUITE_TOO_LARGE' };
|
|
115
|
+
}
|
|
116
|
+
|
|
117
|
+
// Step 2: Apply max test rule
|
|
118
|
+
if (testFiles.length > MAX_FILES_THRESHOLD) {
|
|
119
|
+
console.log(`📊 Large test suite detected (${testFiles.length} files > ${MAX_FILES_THRESHOLD})`);
|
|
120
|
+
console.log('🔄 Switching to individual execution mode');
|
|
121
|
+
return await this.runIndividualTests(testFiles);
|
|
122
|
+
}
|
|
123
|
+
|
|
124
|
+
// Step 3: Intelligent batching
|
|
125
|
+
if (testFiles.length > CHUNK_SIZE) {
|
|
126
|
+
console.log(`📦 Large test suite detected (${testFiles.length} files)`);
|
|
127
|
+
console.log(`🔄 Processing in chunks of ${CHUNK_SIZE}`);
|
|
128
|
+
return await this.runInChunks(testFiles, CHUNK_SIZE);
|
|
129
|
+
}
|
|
130
|
+
|
|
131
|
+
// Step 4: Standard execution with output management
|
|
132
|
+
console.log('⚡ Running standard test execution with output management');
|
|
133
|
+
return await this.runStandard(testFiles);
|
|
134
|
+
|
|
135
|
+
} catch (error) {
|
|
136
|
+
console.error('❌ Test execution failed:', error.message);
|
|
137
|
+
return { success: false, error: error.message };
|
|
138
|
+
}
|
|
139
|
+
}
|
|
140
|
+
|
|
141
|
+
/**
|
|
142
|
+
* Discover test files matching pattern
|
|
143
|
+
*/
|
|
144
|
+
discoverTestFiles(pattern) {
|
|
145
|
+
try {
|
|
146
|
+
// Use find command to discover test files
|
|
147
|
+
const result = execSync(`find src -name "*.test.ts" -type f`, { encoding: 'utf8' });
|
|
148
|
+
return result.trim().split('\n').filter(Boolean);
|
|
149
|
+
} catch (error) {
|
|
150
|
+
console.warn('⚠️ Could not discover test files with find, trying alternative method');
|
|
151
|
+
// Fallback: use glob pattern
|
|
152
|
+
return this.globTestFiles(pattern);
|
|
153
|
+
}
|
|
154
|
+
}
|
|
155
|
+
|
|
156
|
+
/**
|
|
157
|
+
* Fallback method to discover test files
|
|
158
|
+
*/
|
|
159
|
+
globTestFiles(pattern) {
|
|
160
|
+
// Simple glob implementation for test files
|
|
161
|
+
const testDirs = ['src/__tests__/unit', 'src/__tests__/integration', 'src/__tests__/performance'];
|
|
162
|
+
const files = [];
|
|
163
|
+
|
|
164
|
+
for (const dir of testDirs) {
|
|
165
|
+
try {
|
|
166
|
+
const dirFiles = fs.readdirSync(dir);
|
|
167
|
+
for (const file of dirFiles) {
|
|
168
|
+
if (file.endsWith('.test.ts')) {
|
|
169
|
+
files.push(path.join(dir, file));
|
|
170
|
+
}
|
|
171
|
+
}
|
|
172
|
+
} catch (error) {
|
|
173
|
+
// Directory might not exist, continue
|
|
174
|
+
}
|
|
175
|
+
}
|
|
176
|
+
|
|
177
|
+
return files;
|
|
178
|
+
}
|
|
179
|
+
|
|
180
|
+
/**
|
|
181
|
+
* Run tests individually (max test rule)
|
|
182
|
+
*/
|
|
183
|
+
async runIndividualTests(testFiles) {
|
|
184
|
+
console.log('🔄 Executing tests individually...');
|
|
185
|
+
|
|
186
|
+
const results = [];
|
|
187
|
+
let passedFiles = 0;
|
|
188
|
+
let failedFiles = 0;
|
|
189
|
+
let passedTests = 0;
|
|
190
|
+
let failedTests = 0;
|
|
191
|
+
|
|
192
|
+
for (const testFile of testFiles) {
|
|
193
|
+
// Check total timeout before each individual test (Codex Term #45)
|
|
194
|
+
if (this.hasExceededTotalTimeout()) {
|
|
195
|
+
console.log(`⏰ Total timeout exceeded (${TOTAL_TIMEOUT_MS / 1000}s) - aborting remaining tests`);
|
|
196
|
+
console.log(`📊 Partial results: ${passedFiles} passed, ${failedFiles} failed files`);
|
|
197
|
+
break;
|
|
198
|
+
}
|
|
199
|
+
|
|
200
|
+
console.log(`\n📄 Running: ${path.basename(testFile)}`);
|
|
201
|
+
|
|
202
|
+
try {
|
|
203
|
+
const result = await this.runSingleTest(testFile);
|
|
204
|
+
results.push(result);
|
|
205
|
+
|
|
206
|
+
if (result.success) {
|
|
207
|
+
passedFiles++;
|
|
208
|
+
passedTests += result.numPassedTests || 0;
|
|
209
|
+
console.log(`✅ PASSED (${result.numPassedTests || 0} tests)`);
|
|
210
|
+
} else {
|
|
211
|
+
failedFiles++;
|
|
212
|
+
failedTests += result.numFailedTests || 0;
|
|
213
|
+
console.log(`❌ FAILED (${result.numFailedTests || 0} tests)`);
|
|
214
|
+
if (result.error) {
|
|
215
|
+
console.log(` Error: ${result.error.substring(0, 100)}...`);
|
|
216
|
+
}
|
|
217
|
+
}
|
|
218
|
+
} catch (error) {
|
|
219
|
+
failedFiles++;
|
|
220
|
+
console.log(`❌ ERROR: ${error.message}`);
|
|
221
|
+
results.push({ file: testFile, success: false, error: error.message });
|
|
222
|
+
}
|
|
223
|
+
}
|
|
224
|
+
|
|
225
|
+
console.log(`\n📊 Individual Execution Results:`);
|
|
226
|
+
console.log(` Files: ${passedFiles + failedFiles}`);
|
|
227
|
+
console.log(` Tests: ${passedTests + failedTests}`);
|
|
228
|
+
console.log(` Tests Passed: ${passedTests}`);
|
|
229
|
+
console.log(` Tests Failed: ${failedTests}`);
|
|
230
|
+
console.log(` Files Passed: ${passedFiles}`);
|
|
231
|
+
console.log(` Files Failed: ${failedFiles}`);
|
|
232
|
+
|
|
233
|
+
return {
|
|
234
|
+
success: failedTests === 0,
|
|
235
|
+
results,
|
|
236
|
+
summary: {
|
|
237
|
+
totalFiles: testFiles.length,
|
|
238
|
+
totalTests: passedTests + failedTests,
|
|
239
|
+
passedTests,
|
|
240
|
+
failedTests,
|
|
241
|
+
passedFiles,
|
|
242
|
+
failedFiles
|
|
243
|
+
}
|
|
244
|
+
};
|
|
245
|
+
}
|
|
246
|
+
|
|
247
|
+
/**
|
|
248
|
+
* Run tests in chunks
|
|
249
|
+
*/
|
|
250
|
+
async runInChunks(testFiles, chunkSize) {
|
|
251
|
+
console.log(`🔄 Processing ${testFiles.length} tests in chunks of ${chunkSize}`);
|
|
252
|
+
|
|
253
|
+
const chunks = [];
|
|
254
|
+
for (let i = 0; i < testFiles.length; i += chunkSize) {
|
|
255
|
+
chunks.push(testFiles.slice(i, i + chunkSize));
|
|
256
|
+
}
|
|
257
|
+
|
|
258
|
+
console.log(`📦 Created ${chunks.length} chunks`);
|
|
259
|
+
|
|
260
|
+
const results = [];
|
|
261
|
+
let totalPassedTests = 0;
|
|
262
|
+
let totalFailedTests = 0;
|
|
263
|
+
let totalPassedFiles = 0;
|
|
264
|
+
let totalFailedFiles = 0;
|
|
265
|
+
const allFailedTests = [];
|
|
266
|
+
|
|
267
|
+
for (let i = 0; i < chunks.length; i++) {
|
|
268
|
+
// Check total timeout before processing chunk (Codex Term #45)
|
|
269
|
+
if (this.hasExceededTotalTimeout()) {
|
|
270
|
+
console.log(`⏰ Total timeout exceeded (${TOTAL_TIMEOUT_MS / 1000}s) - aborting remaining chunks`);
|
|
271
|
+
console.log(`📊 Partial results: ${totalPassedFiles} passed, ${totalFailedFiles} failed files`);
|
|
272
|
+
break;
|
|
273
|
+
}
|
|
274
|
+
|
|
275
|
+
const chunk = chunks[i];
|
|
276
|
+
|
|
277
|
+
const chunkResult = await this.runChunk(chunk, i, chunks.length);
|
|
278
|
+
results.push(chunkResult);
|
|
279
|
+
|
|
280
|
+
totalPassedFiles += chunkResult.passed;
|
|
281
|
+
totalFailedFiles += chunkResult.failed;
|
|
282
|
+
totalPassedTests += chunkResult.passedTests || 0;
|
|
283
|
+
totalFailedTests += chunkResult.failedTests || 0;
|
|
284
|
+
|
|
285
|
+
// Collect failed tests from this chunk
|
|
286
|
+
const failedTests = chunkResult.results.filter(r => !r.success);
|
|
287
|
+
allFailedTests.push(...failedTests);
|
|
288
|
+
}
|
|
289
|
+
|
|
290
|
+
console.log(`\n📊 Chunked Execution Results:`);
|
|
291
|
+
console.log(` Total Files: ${testFiles.length}`);
|
|
292
|
+
console.log(` Total Tests: ${totalPassedTests + totalFailedTests}`);
|
|
293
|
+
console.log(` Tests Passed: ${totalPassedTests}`);
|
|
294
|
+
console.log(` Tests Failed: ${totalFailedTests}`);
|
|
295
|
+
console.log(` Files Passed: ${totalPassedFiles}`);
|
|
296
|
+
console.log(` Files Failed: ${totalFailedFiles}`);
|
|
297
|
+
|
|
298
|
+
// List all failed test files
|
|
299
|
+
if (allFailedTests.length > 0) {
|
|
300
|
+
console.log(` ❌ Failed test files:`);
|
|
301
|
+
for (const failedTest of allFailedTests) {
|
|
302
|
+
console.log(` - ${path.basename(failedTest.file)}`);
|
|
303
|
+
}
|
|
304
|
+
}
|
|
305
|
+
|
|
306
|
+
const testResult = {
|
|
307
|
+
success: totalFailedTests === 0,
|
|
308
|
+
results,
|
|
309
|
+
summary: {
|
|
310
|
+
totalFiles: testFiles.length,
|
|
311
|
+
totalTests: totalPassedTests + totalFailedTests,
|
|
312
|
+
passedTests: totalPassedTests,
|
|
313
|
+
failedTests: totalFailedTests,
|
|
314
|
+
passedFiles: totalPassedFiles,
|
|
315
|
+
failedFiles: totalFailedFiles
|
|
316
|
+
}
|
|
317
|
+
};
|
|
318
|
+
|
|
319
|
+
// Auto-healing integration through orchestrator (if enabled and tests failed)
|
|
320
|
+
if (autoHeal && totalFailedTests > 0) {
|
|
321
|
+
console.log('\n🎯 ORCHESTRATED AUTO-HEALING ENGAGED - Coordinating multi-agent response...');
|
|
322
|
+
|
|
323
|
+
try {
|
|
324
|
+
// Create orchestrator instance
|
|
325
|
+
const orchestrator = new StrRayOrchestrator({
|
|
326
|
+
maxConcurrentTasks: 3,
|
|
327
|
+
taskTimeout: 300000, // 5 minutes per task
|
|
328
|
+
conflictResolutionStrategy: 'expert_priority'
|
|
329
|
+
});
|
|
330
|
+
|
|
331
|
+
// Prepare failure context for orchestration
|
|
332
|
+
const failureContext = {
|
|
333
|
+
failedTests: allFailedTests.map(t => t.file),
|
|
334
|
+
timeoutIssues: testResult.timeoutIssues || [],
|
|
335
|
+
performanceIssues: testResult.slowTests || [],
|
|
336
|
+
flakyTests: testResult.flakyTests || [],
|
|
337
|
+
errorLogs: testResult.errorLogs || [],
|
|
338
|
+
testExecutionTime: testResult.executionTime || 0
|
|
339
|
+
};
|
|
340
|
+
|
|
341
|
+
// Execute orchestrated auto-healing
|
|
342
|
+
const healingResult = await orchestrator.orchestrateTestAutoHealing(failureContext, `test-session-${Date.now()}`);
|
|
343
|
+
|
|
344
|
+
console.log(`✅ Orchestrated auto-healing complete:`);
|
|
345
|
+
console.log(` • Success: ${healingResult.success ? 'Yes' : 'No'}`);
|
|
346
|
+
console.log(` • Performance improvement: ${healingResult.performanceImprovement}%`);
|
|
347
|
+
console.log(` • Agent coordination: ${healingResult.agentCoordination.join(', ')}`);
|
|
348
|
+
|
|
349
|
+
if (healingResult.healingResult.recommendations?.length > 0) {
|
|
350
|
+
console.log(` • Recommendations: ${healingResult.healingResult.recommendations.slice(0, 3).join(', ')}`);
|
|
351
|
+
}
|
|
352
|
+
|
|
353
|
+
if (healingResult.healingResult.summary) {
|
|
354
|
+
console.log(` • Summary: ${healingResult.healingResult.summary}`);
|
|
355
|
+
}
|
|
356
|
+
|
|
357
|
+
// Update test result with healing outcomes
|
|
358
|
+
testResult.autoHealed = healingResult.success;
|
|
359
|
+
testResult.performanceImprovement = healingResult.performanceImprovement;
|
|
360
|
+
|
|
361
|
+
} catch (error) {
|
|
362
|
+
console.log(`❌ Orchestrated auto-healing failed: ${error instanceof Error ? error.message : String(error)}`);
|
|
363
|
+
console.log(' Falling back to basic error reporting...');
|
|
364
|
+
}
|
|
365
|
+
}
|
|
366
|
+
|
|
367
|
+
return testResult;
|
|
368
|
+
}
|
|
369
|
+
|
|
370
|
+
/**
|
|
371
|
+
* Run a single test file
|
|
372
|
+
*/
|
|
373
|
+
async runSingleTest(testFile, useJson = true) {
|
|
374
|
+
// AGGRESSIVE: Skip unchanged tests using cache
|
|
375
|
+
if (this.shouldSkipTest(testFile)) {
|
|
376
|
+
return Promise.resolve({
|
|
377
|
+
file: testFile,
|
|
378
|
+
success: true,
|
|
379
|
+
skipped: true,
|
|
380
|
+
numPassedTests: 1,
|
|
381
|
+
numFailedTests: 0,
|
|
382
|
+
numTotalTests: 1
|
|
383
|
+
});
|
|
384
|
+
}
|
|
385
|
+
|
|
386
|
+
return new Promise((resolve) => {
|
|
387
|
+
const reporter = useJson ? '--reporter=json' : '--reporter=dot';
|
|
388
|
+
const vitest = spawn('npx', ['vitest', 'run', testFile, reporter,
|
|
389
|
+
'--threads=' + TEST_PARALLEL_WORKERS, // AGGRESSIVE: Use multiple threads
|
|
390
|
+
'--timeout=5000', // AGGRESSIVE: 5-second timeout per test
|
|
391
|
+
'--bail=3' // AGGRESSIVE: Stop after 3 failures
|
|
392
|
+
], {
|
|
393
|
+
stdio: ['pipe', 'pipe', 'pipe'],
|
|
394
|
+
shell: true
|
|
395
|
+
});
|
|
396
|
+
|
|
397
|
+
let stdout = '';
|
|
398
|
+
let stderr = '';
|
|
399
|
+
|
|
400
|
+
vitest.stdout.on('data', (data) => {
|
|
401
|
+
stdout += data.toString();
|
|
402
|
+
});
|
|
403
|
+
|
|
404
|
+
vitest.stderr.on('data', (data) => {
|
|
405
|
+
stderr += data.toString();
|
|
406
|
+
});
|
|
407
|
+
|
|
408
|
+
vitest.on('close', (code) => {
|
|
409
|
+
try {
|
|
410
|
+
if (stdout.length > MAX_OUTPUT_SIZE) {
|
|
411
|
+
// Output too large, truncate and mark as oversized
|
|
412
|
+
resolve({
|
|
413
|
+
file: testFile,
|
|
414
|
+
success: false,
|
|
415
|
+
error: `Output too large (${stdout.length} chars > ${MAX_OUTPUT_SIZE})`,
|
|
416
|
+
oversized: true
|
|
417
|
+
});
|
|
418
|
+
return;
|
|
419
|
+
}
|
|
420
|
+
|
|
421
|
+
const result = JSON.parse(stdout);
|
|
422
|
+
|
|
423
|
+
// Check for actual test failures even if overall success is true
|
|
424
|
+
let actualFailedTests = result.numFailedTests;
|
|
425
|
+
if (result.testResults && result.testResults.length > 0) {
|
|
426
|
+
for (const testResult of result.testResults) {
|
|
427
|
+
if (testResult.assertionResults) {
|
|
428
|
+
actualFailedTests += testResult.assertionResults.filter(r => r.status === 'failed').length;
|
|
429
|
+
}
|
|
430
|
+
}
|
|
431
|
+
}
|
|
432
|
+
|
|
433
|
+
const testResult = {
|
|
434
|
+
file: testFile,
|
|
435
|
+
success: result.success && actualFailedTests === 0,
|
|
436
|
+
numPassedTests: result.numPassedTests,
|
|
437
|
+
numFailedTests: actualFailedTests,
|
|
438
|
+
output: stdout.length > 1000 ? stdout.substring(0, 1000) + '...' : stdout
|
|
439
|
+
};
|
|
440
|
+
|
|
441
|
+
// AGGRESSIVE: Cache successful results
|
|
442
|
+
if (testResult.success) {
|
|
443
|
+
this.cacheTestResult(testFile, testResult);
|
|
444
|
+
}
|
|
445
|
+
|
|
446
|
+
resolve(testResult);
|
|
447
|
+
} catch (error) {
|
|
448
|
+
const errorResult = {
|
|
449
|
+
file: testFile,
|
|
450
|
+
success: code === 0,
|
|
451
|
+
error: stderr || error.message
|
|
452
|
+
};
|
|
453
|
+
|
|
454
|
+
// AGGRESSIVE: Cache successful results even in catch block
|
|
455
|
+
if (errorResult.success) {
|
|
456
|
+
this.cacheTestResult(testFile, errorResult);
|
|
457
|
+
}
|
|
458
|
+
|
|
459
|
+
resolve(errorResult);
|
|
460
|
+
}
|
|
461
|
+
});
|
|
462
|
+
|
|
463
|
+
vitest.on('error', (error) => {
|
|
464
|
+
resolve({
|
|
465
|
+
file: testFile,
|
|
466
|
+
success: false,
|
|
467
|
+
error: error.message
|
|
468
|
+
});
|
|
469
|
+
});
|
|
470
|
+
});
|
|
471
|
+
}
|
|
472
|
+
|
|
473
|
+
/**
|
|
474
|
+
* Run a chunk of test files
|
|
475
|
+
*/
|
|
476
|
+
async runChunk(chunk, chunkIndex, totalChunks) {
|
|
477
|
+
console.log(`🔄 Processing chunk ${chunkIndex + 1}/${totalChunks} (${chunk.length} files)`);
|
|
478
|
+
|
|
479
|
+
// Use JSON reporter for large chunks to avoid output truncation
|
|
480
|
+
const useJson = chunk.length > 5;
|
|
481
|
+
const promises = chunk.map(file => this.runSingleTest(file, useJson));
|
|
482
|
+
|
|
483
|
+
// Implement chunk timeout (Codex Term #45)
|
|
484
|
+
const timeoutPromise = new Promise((_, reject) => {
|
|
485
|
+
setTimeout(() => reject(new Error(`Chunk timeout after ${CHUNK_TIMEOUT_MS}ms`)), CHUNK_TIMEOUT_MS);
|
|
486
|
+
});
|
|
487
|
+
|
|
488
|
+
let results;
|
|
489
|
+
try {
|
|
490
|
+
results = await Promise.race([Promise.all(promises), timeoutPromise]);
|
|
491
|
+
} catch (error) {
|
|
492
|
+
console.log(`⏰ Chunk ${chunkIndex + 1} timed out - ${error.message}`);
|
|
493
|
+
// Return timeout results for all tests in chunk
|
|
494
|
+
results = chunk.map(file => ({
|
|
495
|
+
file,
|
|
496
|
+
success: false,
|
|
497
|
+
timedOut: true,
|
|
498
|
+
error: 'Chunk timeout'
|
|
499
|
+
}));
|
|
500
|
+
}
|
|
501
|
+
|
|
502
|
+
const passedFiles = results.filter(r => r.success).length;
|
|
503
|
+
const failedFiles = results.filter(r => !r.success).length;
|
|
504
|
+
const passedTests = results.reduce((sum, r) => sum + (r.numPassedTests || 0), 0);
|
|
505
|
+
const failedTests = results.reduce((sum, r) => sum + (r.numFailedTests || 0), 0);
|
|
506
|
+
|
|
507
|
+
console.log(` Chunk ${chunkIndex + 1}: ${passedFiles} passed, ${failedFiles} failed (${passedTests + failedTests} tests)`);
|
|
508
|
+
|
|
509
|
+
// List failed tests
|
|
510
|
+
if (failedFiles > 0) {
|
|
511
|
+
const failedTests = results.filter(r => !r.success);
|
|
512
|
+
console.log(` ❌ Failed tests:`);
|
|
513
|
+
for (const failedTest of failedTests) {
|
|
514
|
+
console.log(` - ${path.basename(failedTest.file)}`);
|
|
515
|
+
}
|
|
516
|
+
}
|
|
517
|
+
|
|
518
|
+
return { passed: passedFiles, failed: failedFiles, passedTests, failedTests, results };
|
|
519
|
+
}
|
|
520
|
+
|
|
521
|
+
/**
|
|
522
|
+
* Run standard test execution with output management
|
|
523
|
+
*/
|
|
524
|
+
async runStandard(testFiles) {
|
|
525
|
+
console.log('⚡ Running standard test execution');
|
|
526
|
+
|
|
527
|
+
return new Promise((resolve) => {
|
|
528
|
+
const vitest = spawn('npx', ['vitest', 'run', ...testFiles, '--reporter=json'], {
|
|
529
|
+
stdio: ['pipe', 'pipe', 'pipe'],
|
|
530
|
+
shell: true
|
|
531
|
+
});
|
|
532
|
+
|
|
533
|
+
let stdout = '';
|
|
534
|
+
let stderr = '';
|
|
535
|
+
|
|
536
|
+
vitest.stdout.on('data', (data) => {
|
|
537
|
+
stdout += data.toString();
|
|
538
|
+
|
|
539
|
+
// Check for output size limit
|
|
540
|
+
if (stdout.length > MAX_OUTPUT_SIZE) {
|
|
541
|
+
console.warn(`⚠️ Output size approaching limit (${stdout.length}/${MAX_OUTPUT_SIZE})`);
|
|
542
|
+
}
|
|
543
|
+
});
|
|
544
|
+
|
|
545
|
+
vitest.stderr.on('data', (data) => {
|
|
546
|
+
stderr += data.toString();
|
|
547
|
+
});
|
|
548
|
+
|
|
549
|
+
vitest.on('close', (code) => {
|
|
550
|
+
try {
|
|
551
|
+
const result = JSON.parse(stdout);
|
|
552
|
+
console.log(`📊 Standard Execution: ${result.numPassedTests}/${result.numTotalTests} tests passed`);
|
|
553
|
+
|
|
554
|
+
resolve({
|
|
555
|
+
success: result.success,
|
|
556
|
+
results: [result],
|
|
557
|
+
summary: {
|
|
558
|
+
total: result.numTotalTests,
|
|
559
|
+
passed: result.numPassedTests,
|
|
560
|
+
failed: result.numFailedTests
|
|
561
|
+
}
|
|
562
|
+
});
|
|
563
|
+
} catch (error) {
|
|
564
|
+
console.error('❌ Failed to parse test results:', error.message);
|
|
565
|
+
resolve({
|
|
566
|
+
success: false,
|
|
567
|
+
error: `Parse error: ${error.message}`,
|
|
568
|
+
stderr
|
|
569
|
+
});
|
|
570
|
+
}
|
|
571
|
+
});
|
|
572
|
+
|
|
573
|
+
vitest.on('error', (error) => {
|
|
574
|
+
resolve({
|
|
575
|
+
success: false,
|
|
576
|
+
error: error.message
|
|
577
|
+
});
|
|
578
|
+
});
|
|
579
|
+
});
|
|
580
|
+
}
|
|
581
|
+
}
|
|
582
|
+
|
|
583
|
+
// CLI interface
|
|
584
|
+
if (import.meta.url === `file://${process.argv[1]}`) {
|
|
585
|
+
const args = process.argv.slice(2);
|
|
586
|
+
const options = {};
|
|
587
|
+
|
|
588
|
+
// Parse CLI arguments
|
|
589
|
+
if (args.includes('--quarantine')) {
|
|
590
|
+
options.quarantineMode = true;
|
|
591
|
+
}
|
|
592
|
+
|
|
593
|
+
if (args.includes('--pattern')) {
|
|
594
|
+
const patternIndex = args.indexOf('--pattern');
|
|
595
|
+
if (patternIndex + 1 < args.length) {
|
|
596
|
+
options.pattern = args[patternIndex + 1];
|
|
597
|
+
}
|
|
598
|
+
}
|
|
599
|
+
|
|
600
|
+
const runner = new SmartTestRunner();
|
|
601
|
+
runner.run(options).then(result => {
|
|
602
|
+
process.exit(result.success ? 0 : 1);
|
|
603
|
+
}).catch(error => {
|
|
604
|
+
console.error('❌ Smart Test Runner failed:', error);
|
|
605
|
+
process.exit(1);
|
|
606
|
+
});
|
|
607
|
+
}
|
|
608
|
+
|
|
609
|
+
export default SmartTestRunner;
|