0xray 2.0.1 → 2.1.1
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/codex.codex +1 -1
- package/.opencode/commands/dependency-audit.md +3 -3
- package/.opencode/enforcer-config.json +2 -2
- package/.opencode/hooks/post-commit +1 -1
- package/.opencode/init.sh +2 -2
- package/AGENTS.md +1 -1
- package/README.md +2 -2
- package/dist/AGENTS.md +1 -1
- package/dist/CHANGELOG.md +10 -0
- package/dist/README.md +2 -2
- package/dist/analytics/routing-refiner.js +1 -1
- package/dist/benchmark/performance-benchmark.d.ts +2 -2
- package/dist/benchmark/performance-benchmark.js +3 -3
- package/dist/cli/commands/hermes-install.js +4 -4
- package/dist/cli/commands/mcp-install.js +1 -1
- package/dist/cli/commands/openclaw-install.js +1 -1
- package/dist/cli/commands/plugin-commands.js +2 -2
- package/dist/cli/commands/publish-agent.js +5 -5
- package/dist/cli/commands/skill-install.js +1 -1
- package/dist/cli/commands/status.js +3 -3
- package/dist/cli/commands/storyteller.js +2 -2
- package/dist/cli/index.js +8 -8
- package/dist/cli/server.js +1 -1
- package/dist/core/agent-spawn-gate.d.ts +1 -1
- package/dist/core/agent-spawn-gate.js +1 -1
- package/dist/core/boot-orchestrator.d.ts +4 -4
- package/dist/core/boot-orchestrator.js +27 -27
- package/dist/core/bridge.mjs +22 -22
- package/dist/core/codex-formatter.js +2 -2
- package/dist/core/codex-injector.d.ts +4 -3
- package/dist/core/codex-injector.js +11 -10
- package/dist/core/config-loader.d.ts +5 -4
- package/dist/core/config-loader.js +4 -2
- package/dist/core/config-paths.d.ts +9 -8
- package/dist/core/config-paths.js +24 -23
- package/dist/core/context-loader.d.ts +4 -3
- package/dist/core/context-loader.js +7 -5
- package/dist/core/features-config.js +1 -1
- package/dist/core/index.d.ts +1 -1
- package/dist/core/index.js +1 -1
- package/dist/core/orchestrator.d.ts +1 -0
- package/dist/core/orchestrator.js +3 -2
- package/dist/core/system-prompt-generator.js +2 -2
- package/dist/core/xray-activation.d.ts +4 -4
- package/dist/core/xray-activation.js +29 -24
- package/dist/delegation/agent-delegator.d.ts +3 -3
- package/dist/delegation/agent-delegator.js +3 -3
- package/dist/delegation/metrics-aggregator.d.ts +11 -11
- package/dist/delegation/session-coordinator.d.ts +3 -3
- package/dist/delegation/voting-coordinator.d.ts +3 -3
- package/dist/enforcement/enforcer-tools.js +2 -2
- package/dist/enforcement/loaders/codex-loader.d.ts +1 -1
- package/dist/enforcement/loaders/codex-loader.js +2 -2
- package/dist/index.d.ts +5 -5
- package/dist/index.js +6 -6
- package/dist/inference/deploy-verifier.js +1 -1
- package/dist/inference/inference-cycle.js +7 -7
- package/dist/integrations/base/README.md +2 -2
- package/dist/integrations/governance/index.js +1 -1
- package/dist/integrations/grok/grok-cli.d.ts +1 -1
- package/dist/integrations/grok/grok-cli.js +6 -6
- package/dist/integrations/grok/hooks/pre-tool-use.js +1 -1
- package/dist/integrations/grok/plugin/0xray/.mcp.json +3 -3
- package/dist/integrations/grok/plugin/0xray/hooks/hooks.json +2 -2
- package/dist/integrations/hermes-agent/__init__.py +77 -71
- package/dist/integrations/hermes-agent/__pycache__/__init__.cpython-313.pyc +0 -0
- package/dist/integrations/hermes-agent/__pycache__/conftest.cpython-313-pytest-9.0.2.pyc +0 -0
- package/dist/integrations/hermes-agent/__pycache__/schemas.cpython-313.pyc +0 -0
- package/dist/integrations/hermes-agent/__pycache__/test_plugin.cpython-313-pytest-9.0.2.pyc +0 -0
- package/dist/integrations/hermes-agent/__pycache__/test_plugin.cpython-313.pyc +0 -0
- package/dist/integrations/hermes-agent/__pycache__/tools.cpython-313.pyc +0 -0
- package/dist/integrations/hermes-agent/after-install.md +14 -14
- package/dist/integrations/hermes-agent/bridge.mjs +14 -14
- package/dist/integrations/hermes-agent/logs/framework/routing-outcomes.json +1 -0
- package/dist/integrations/hermes-agent/plugin.yaml +5 -5
- package/dist/integrations/hermes-agent/schemas.py +12 -12
- package/dist/integrations/hermes-agent/test_plugin.py +128 -125
- package/dist/integrations/hermes-agent/tools.py +85 -23
- package/dist/integrations/openclaw/README.md +16 -16
- package/dist/integrations/openclaw/api-server.d.ts +4 -4
- package/dist/integrations/openclaw/api-server.js +9 -9
- package/dist/integrations/openclaw/config.js +1 -1
- package/dist/integrations/openclaw/hooks/{strray-hooks.d.ts → xray-hooks.d.ts} +4 -4
- package/dist/integrations/openclaw/index.d.ts +4 -4
- package/dist/integrations/openclaw/index.js +4 -4
- package/dist/integrations/openclaw/types.d.ts +1 -1
- package/dist/integrations/plugins/plugin-registry.js +2 -2
- package/dist/mcps/architect-tools.server.d.ts +2 -2
- package/dist/mcps/architect-tools.server.js +4 -4
- package/dist/mcps/auto-format.server.d.ts +2 -2
- package/dist/mcps/auto-format.server.js +4 -4
- package/dist/mcps/boot-orchestrator.server.d.ts +2 -2
- package/dist/mcps/boot-orchestrator.server.js +4 -4
- package/dist/mcps/config/server-config-registry.d.ts +1 -1
- package/dist/mcps/config/server-config-registry.js +7 -7
- package/dist/mcps/connection/mcp-connection.js +1 -1
- package/dist/mcps/enforcer-tools.server.d.ts +2 -2
- package/dist/mcps/enforcer-tools.server.js +4 -4
- package/dist/mcps/estimation.server.js +1 -1
- package/dist/mcps/framework-compliance-audit.server.d.ts +2 -2
- package/dist/mcps/framework-compliance-audit.server.js +4 -4
- package/dist/mcps/framework-help.server.js +7 -7
- package/dist/mcps/governance.server.js +1 -1
- package/dist/mcps/in-process-skill-registry.js +6 -6
- package/dist/mcps/knowledge-skills/api-design.server.d.ts +2 -2
- package/dist/mcps/knowledge-skills/api-design.server.js +4 -4
- package/dist/mcps/knowledge-skills/architecture-patterns.server.d.ts +2 -2
- package/dist/mcps/knowledge-skills/architecture-patterns.server.js +4 -4
- package/dist/mcps/knowledge-skills/bug-triage-specialist.server.js +1 -1
- package/dist/mcps/knowledge-skills/code-analyzer.server.js +1 -1
- package/dist/mcps/knowledge-skills/code-review.server.d.ts +2 -2
- package/dist/mcps/knowledge-skills/code-review.server.js +4 -4
- package/dist/mcps/knowledge-skills/content-creator.server.js +1 -1
- package/dist/mcps/knowledge-skills/database-design.server.d.ts +2 -2
- package/dist/mcps/knowledge-skills/database-design.server.js +4 -4
- package/dist/mcps/knowledge-skills/devops-deployment.server.d.ts +2 -2
- package/dist/mcps/knowledge-skills/devops-deployment.server.js +4 -4
- package/dist/mcps/knowledge-skills/git-workflow.server.d.ts +2 -2
- package/dist/mcps/knowledge-skills/git-workflow.server.js +4 -4
- package/dist/mcps/knowledge-skills/growth-strategist.server.js +1 -1
- package/dist/mcps/knowledge-skills/log-monitor.server.js +1 -1
- package/dist/mcps/knowledge-skills/mobile-development.server.d.ts +2 -2
- package/dist/mcps/knowledge-skills/mobile-development.server.js +4 -4
- package/dist/mcps/knowledge-skills/multimodal-looker.server.js +1 -1
- package/dist/mcps/knowledge-skills/performance-optimization.server.d.ts +2 -2
- package/dist/mcps/knowledge-skills/performance-optimization.server.js +4 -4
- package/dist/mcps/knowledge-skills/project-analysis.server.js +1 -1
- package/dist/mcps/knowledge-skills/refactoring-strategies.server.d.ts +2 -2
- package/dist/mcps/knowledge-skills/refactoring-strategies.server.js +4 -4
- package/dist/mcps/knowledge-skills/security-audit.server.d.ts +2 -2
- package/dist/mcps/knowledge-skills/security-audit.server.js +4 -4
- package/dist/mcps/knowledge-skills/seo-consultant.server.js +1 -1
- package/dist/mcps/knowledge-skills/session-management.server.js +1 -1
- package/dist/mcps/knowledge-skills/skill-invocation.server.js +1 -1
- package/dist/mcps/knowledge-skills/strategist.server.js +1 -1
- package/dist/mcps/knowledge-skills/tech-writer.server.d.ts +2 -2
- package/dist/mcps/knowledge-skills/tech-writer.server.js +5 -5
- package/dist/mcps/knowledge-skills/testing-best-practices.server.d.ts +2 -2
- package/dist/mcps/knowledge-skills/testing-best-practices.server.js +4 -4
- package/dist/mcps/knowledge-skills/testing-strategy.server.d.ts +2 -2
- package/dist/mcps/knowledge-skills/testing-strategy.server.js +4 -4
- package/dist/mcps/knowledge-skills/ui-ux-design.server.d.ts +2 -2
- package/dist/mcps/knowledge-skills/ui-ux-design.server.js +6 -6
- package/dist/mcps/lint.server.d.ts +2 -2
- package/dist/mcps/lint.server.js +6 -6
- package/dist/mcps/mcp-client.js +3 -3
- package/dist/mcps/model-health-check.server.d.ts +2 -2
- package/dist/mcps/model-health-check.server.js +4 -4
- package/dist/mcps/orchestrator/server.js +2 -2
- package/dist/mcps/performance-analysis.server.d.ts +2 -2
- package/dist/mcps/performance-analysis.server.js +4 -4
- package/dist/mcps/processor-pipeline.server.d.ts +2 -2
- package/dist/mcps/processor-pipeline.server.js +4 -4
- package/dist/mcps/registry.json +1 -1
- package/dist/mcps/researcher.server.d.ts +3 -3
- package/dist/mcps/researcher.server.js +5 -5
- package/dist/mcps/security-scan.server.d.ts +2 -2
- package/dist/mcps/security-scan.server.js +4 -4
- package/dist/mcps/simulation/server-simulations.js +3 -3
- package/dist/mcps/state-manager.server.js +1 -1
- package/dist/metrics/agent-metrics.d.ts +4 -4
- package/dist/metrics/agent-metrics.js +1 -1
- package/dist/orchestrator/enhanced-multi-agent-orchestrator.d.ts +2 -2
- package/dist/orchestrator/enhanced-multi-agent-orchestrator.js +2 -2
- package/dist/orchestrator/intelligent-commit-batcher.d.ts +1 -1
- package/dist/orchestrator/intelligent-commit-batcher.js +3 -3
- package/dist/orchestrator/multi-agent-orchestration-coordinator.d.ts +3 -3
- package/dist/orchestrator/multi-agent-orchestration-coordinator.js +9 -9
- package/dist/orchestrator/orchestrator.d.ts +3 -2
- package/dist/orchestrator/orchestrator.js +8 -6
- package/dist/orchestrator/universal-registry-bridge.js +1 -1
- package/dist/plugin/xray-codex-injection.d.ts +1 -1
- package/dist/plugin/xray-codex-injection.js +8 -7
- package/dist/postprocessor/PostProcessor.d.ts +2 -2
- package/dist/postprocessor/PostProcessor.js +1 -1
- package/dist/postprocessor/monitoring/MonitoringEngine.d.ts +2 -2
- package/dist/postprocessor/services/RegressionAnalysisService.js +2 -2
- package/dist/postprocessor/triggers/GitHookTrigger.js +14 -14
- package/dist/processors/implementations/agents-md-validation-processor.js +2 -2
- package/dist/processors/implementations/inference-improvement-processor.js +2 -2
- package/dist/processors/implementations/log-protection-processor.d.ts +1 -1
- package/dist/processors/implementations/log-protection-processor.js +2 -2
- package/dist/processors/implementations/publish-preflight-processor.d.ts +1 -1
- package/dist/processors/implementations/publish-preflight-processor.js +3 -3
- package/dist/processors/implementations/regression-testing-processor.js +2 -2
- package/dist/processors/implementations/session-summary-processor.js +2 -2
- package/dist/processors/implementations/storytelling-trigger-processor.js +2 -2
- package/dist/processors/processor-manager.d.ts +2 -2
- package/dist/public/about.html +6 -6
- package/dist/public/enterprise.html +1 -1
- package/dist/public/features.html +2 -2
- package/dist/public/index.html +4 -4
- package/dist/reporting/report-formatter.js +1 -1
- package/dist/scripts/activate-kernel-pipeline.js +2 -2
- package/dist/scripts/pre-command +1 -1
- package/dist/services/inference-tuner.js +2 -2
- package/dist/session/session-cleanup-manager.d.ts +3 -3
- package/dist/session/session-monitor.d.ts +3 -3
- package/dist/session/session-state-manager.d.ts +3 -3
- package/dist/skills/hermes-agent/SKILL.md +12 -12
- package/dist/skills/registry.json +1 -1
- package/dist/skills/storyteller/SKILL.md +1 -1
- package/dist/skills/xray-orchestrator/SKILL.md +141 -0
- package/dist/skills/xray-orchestrator/index.d.ts +13 -0
- package/dist/skills/xray-orchestrator/index.js +224 -0
- package/dist/state/index.d.ts +2 -1
- package/dist/state/index.js +2 -1
- package/dist/state/state-manager.d.ts +2 -2
- package/dist/state/state-manager.js +5 -4
- package/dist/utils/import-resolver.js +1 -1
- package/dist/utils/path-resolver.js +2 -2
- package/dist/utils/token-manager.js +1 -1
- package/dist/validation/estimation-validator.js +1 -1
- package/package.json +2 -2
- package/scripts/hooks/pre-command +1 -1
- package/scripts/hooks/run-hook.js +2 -2
- package/scripts/node/auto-reflection-generator.mjs +2 -2
- package/scripts/node/postinstall.cjs +1 -1
- package/scripts/node/pre-publish-guard.js +16 -10
- package/scripts/node/release.js +6 -6
- package/scripts/node/release.mjs +11 -11
- package/scripts/node/universal-version-manager.js +2 -2
- package/scripts/node/version-manager.mjs +1 -1
- package/src/integrations/grok/plugin/0xray/.mcp.json +3 -3
- package/src/integrations/grok/plugin/0xray/hooks/hooks.json +2 -2
- package/src/mcps/architect-tools.server.ts +4 -4
- package/src/mcps/auto-format.server.ts +4 -4
- package/src/mcps/boot-orchestrator.server.ts +4 -4
- package/src/mcps/config/server-config-registry.ts +7 -7
- package/src/mcps/connection/mcp-connection.ts +1 -1
- package/src/mcps/enforcer-tools.server.ts +4 -4
- package/src/mcps/estimation.server.ts +1 -1
- package/src/mcps/framework-compliance-audit.server.ts +4 -4
- package/src/mcps/framework-help.server.ts +7 -7
- package/src/mcps/governance.server.ts +1 -1
- package/src/mcps/in-process-skill-registry.ts +6 -6
- package/src/mcps/knowledge-skills/api-design.server.test.ts +8 -8
- package/src/mcps/knowledge-skills/api-design.server.ts +4 -4
- package/src/mcps/knowledge-skills/architecture-patterns.server.ts +4 -4
- package/src/mcps/knowledge-skills/bug-triage-specialist.server.ts +1 -1
- package/src/mcps/knowledge-skills/code-analyzer.server.ts +1 -1
- package/src/mcps/knowledge-skills/code-review.server.ts +4 -4
- package/src/mcps/knowledge-skills/content-creator.server.ts +1 -1
- package/src/mcps/knowledge-skills/database-design.server.ts +4 -4
- package/src/mcps/knowledge-skills/devops-deployment.server.ts +4 -4
- package/src/mcps/knowledge-skills/git-workflow.server.ts +4 -4
- package/src/mcps/knowledge-skills/growth-strategist.server.ts +1 -1
- package/src/mcps/knowledge-skills/log-monitor.server.ts +1 -1
- package/src/mcps/knowledge-skills/mobile-development.server.ts +4 -4
- package/src/mcps/knowledge-skills/multimodal-looker.server.ts +1 -1
- package/src/mcps/knowledge-skills/performance-optimization.server.ts +4 -4
- package/src/mcps/knowledge-skills/project-analysis.server.ts +1 -1
- package/src/mcps/knowledge-skills/refactoring-strategies.server.ts +4 -4
- package/src/mcps/knowledge-skills/security-audit.server.test.ts +23 -23
- package/src/mcps/knowledge-skills/security-audit.server.ts +4 -4
- package/src/mcps/knowledge-skills/seo-consultant.server.ts +1 -1
- package/src/mcps/knowledge-skills/session-management.server.ts +1 -1
- package/src/mcps/knowledge-skills/skill-invocation.server.ts +1 -1
- package/src/mcps/knowledge-skills/strategist.server.ts +1 -1
- package/src/mcps/knowledge-skills/tech-writer.server.ts +5 -5
- package/src/mcps/knowledge-skills/testing-best-practices.server.test.ts +28 -28
- package/src/mcps/knowledge-skills/testing-best-practices.server.ts +4 -4
- package/src/mcps/knowledge-skills/testing-strategy.server.test.ts +19 -19
- package/src/mcps/knowledge-skills/testing-strategy.server.ts +4 -4
- package/src/mcps/knowledge-skills/ui-ux-design.server.ts +6 -6
- package/src/mcps/lint.server.ts +6 -6
- package/src/mcps/mcp-client.ts +3 -3
- package/src/mcps/model-health-check.server.ts +4 -4
- package/src/mcps/orchestrator/server.ts +2 -2
- package/src/mcps/performance-analysis.server.ts +4 -4
- package/src/mcps/processor-pipeline.server.ts +4 -4
- package/src/mcps/registry.json +1 -1
- package/src/mcps/researcher.server.ts +5 -5
- package/src/mcps/security-scan.server.ts +4 -4
- package/src/mcps/simulation/server-simulations.ts +3 -3
- package/src/mcps/state-manager.server.ts +1 -1
- package/src/opencode/codex.codex +1 -1
- package/src/opencode/commands/dependency-audit.md +3 -3
- package/src/opencode/enforcer-config.json +2 -2
- package/src/skills/hermes-agent/SKILL.md +12 -12
- package/src/skills/registry.json +1 -1
- package/src/skills/storyteller/SKILL.md +1 -1
- package/src/skills/xray-orchestrator/SKILL.md +141 -0
- package/src/skills/xray-orchestrator/index.ts +268 -0
- package/scripts/validate-stringray-comprehensive.js +0 -636
- /package/dist/integrations/openclaw/hooks/{strray-hooks.js → xray-hooks.js} +0 -0
|
@@ -1,636 +0,0 @@
|
|
|
1
|
-
#!/usr/bin/env node
|
|
2
|
-
|
|
3
|
-
/**
|
|
4
|
-
* StringRay Framework - Comprehensive Validation Script
|
|
5
|
-
*
|
|
6
|
-
* This script replicates the successful validation patterns from working examples
|
|
7
|
-
* Provides comprehensive framework validation with proper error handling
|
|
8
|
-
* Compatible with both CommonJS and ES module environments
|
|
9
|
-
*/
|
|
10
|
-
|
|
11
|
-
import { spawn, execSync } from 'child_process';
|
|
12
|
-
import fs from 'fs';
|
|
13
|
-
import path from 'path';
|
|
14
|
-
import { fileURLToPath } from 'url';
|
|
15
|
-
|
|
16
|
-
const __filename = fileURLToPath(import.meta.url);
|
|
17
|
-
const __dirname = path.dirname(__filename);
|
|
18
|
-
|
|
19
|
-
// Configuration
|
|
20
|
-
const PROJECT_DIR = process.cwd();
|
|
21
|
-
const PACKAGE_JSON_PATH = path.join(PROJECT_DIR, 'package.json');
|
|
22
|
-
const DIST_DIR = path.join(PROJECT_DIR, 'dist');
|
|
23
|
-
|
|
24
|
-
class StringRayValidator {
|
|
25
|
-
constructor() {
|
|
26
|
-
this.results = {
|
|
27
|
-
passed: [],
|
|
28
|
-
failed: [],
|
|
29
|
-
warnings: []
|
|
30
|
-
};
|
|
31
|
-
this.startTime = Date.now();
|
|
32
|
-
}
|
|
33
|
-
|
|
34
|
-
log(message, type = 'info') {
|
|
35
|
-
const timestamp = new Date().toISOString();
|
|
36
|
-
const prefix = {
|
|
37
|
-
'info': '📋',
|
|
38
|
-
'success': '✅',
|
|
39
|
-
'error': '❌',
|
|
40
|
-
'warning': '⚠️',
|
|
41
|
-
'step': '🔧'
|
|
42
|
-
}[type] || '📋';
|
|
43
|
-
|
|
44
|
-
console.log(`${prefix} [${timestamp}] ${message}`);
|
|
45
|
-
}
|
|
46
|
-
|
|
47
|
-
async runCommand(command, description, timeout = 30000) {
|
|
48
|
-
this.log(`Running: ${description}`, 'step');
|
|
49
|
-
|
|
50
|
-
return new Promise((resolve, reject) => {
|
|
51
|
-
const child = spawn(command, {
|
|
52
|
-
shell: true,
|
|
53
|
-
stdio: 'pipe',
|
|
54
|
-
cwd: PROJECT_DIR
|
|
55
|
-
});
|
|
56
|
-
|
|
57
|
-
let stdout = '';
|
|
58
|
-
let stderr = '';
|
|
59
|
-
|
|
60
|
-
child.stdout.on('data', (data) => {
|
|
61
|
-
stdout += data.toString();
|
|
62
|
-
});
|
|
63
|
-
|
|
64
|
-
child.stderr.on('data', (data) => {
|
|
65
|
-
stderr += data.toString();
|
|
66
|
-
});
|
|
67
|
-
|
|
68
|
-
const timer = setTimeout(() => {
|
|
69
|
-
child.kill('SIGTERM');
|
|
70
|
-
reject(new Error(`Command timed out after ${timeout}ms: ${command}`));
|
|
71
|
-
}, timeout);
|
|
72
|
-
|
|
73
|
-
child.on('close', (code) => {
|
|
74
|
-
clearTimeout(timer);
|
|
75
|
-
|
|
76
|
-
if (code === 0) {
|
|
77
|
-
this.log(`Completed: ${description}`, 'success');
|
|
78
|
-
resolve({ stdout, stderr, code });
|
|
79
|
-
} else {
|
|
80
|
-
const error = `Failed: ${description} (exit code: ${code})`;
|
|
81
|
-
this.log(error, 'error');
|
|
82
|
-
if (stderr) {
|
|
83
|
-
this.log(`Error output: ${stderr.slice(0, 200)}...`, 'error');
|
|
84
|
-
}
|
|
85
|
-
reject(new Error(error));
|
|
86
|
-
}
|
|
87
|
-
});
|
|
88
|
-
|
|
89
|
-
child.on('error', (error) => {
|
|
90
|
-
clearTimeout(timer);
|
|
91
|
-
this.log(`Process error: ${error.message}`, 'error');
|
|
92
|
-
reject(error);
|
|
93
|
-
});
|
|
94
|
-
});
|
|
95
|
-
}
|
|
96
|
-
|
|
97
|
-
checkFile(filePath, description) {
|
|
98
|
-
if (fs.existsSync(filePath)) {
|
|
99
|
-
this.log(`Found: ${description}`, 'success');
|
|
100
|
-
this.results.passed.push(description);
|
|
101
|
-
return true;
|
|
102
|
-
} else {
|
|
103
|
-
this.log(`Missing: ${description}`, 'error');
|
|
104
|
-
this.results.failed.push(description);
|
|
105
|
-
return false;
|
|
106
|
-
}
|
|
107
|
-
}
|
|
108
|
-
|
|
109
|
-
checkDirectory(dirPath, description) {
|
|
110
|
-
if (fs.existsSync(dirPath) && fs.statSync(dirPath).isDirectory()) {
|
|
111
|
-
this.log(`Found: ${description}`, 'success');
|
|
112
|
-
this.results.passed.push(description);
|
|
113
|
-
return true;
|
|
114
|
-
} else {
|
|
115
|
-
this.log(`Missing: ${description}`, 'error');
|
|
116
|
-
this.results.failed.push(description);
|
|
117
|
-
return false;
|
|
118
|
-
}
|
|
119
|
-
}
|
|
120
|
-
|
|
121
|
-
async validateBuildSystem() {
|
|
122
|
-
this.log('Phase 1: Build System Validation', 'step');
|
|
123
|
-
this.log('================================', 'step');
|
|
124
|
-
|
|
125
|
-
this.checkFile(PACKAGE_JSON_PATH, 'package.json');
|
|
126
|
-
|
|
127
|
-
this.checkDirectory(DIST_DIR, 'dist directory');
|
|
128
|
-
this.checkDirectory(path.join(DIST_DIR, 'cli'), 'CLI binaries');
|
|
129
|
-
this.checkDirectory(path.join(DIST_DIR, 'mcps'), 'MCP servers');
|
|
130
|
-
this.checkDirectory(path.join(DIST_DIR, 'processors'), 'Processors');
|
|
131
|
-
this.checkDirectory(path.join(DIST_DIR, 'state'), 'State management');
|
|
132
|
-
this.checkDirectory(path.join(DIST_DIR, 'enforcement'), 'Rule enforcement');
|
|
133
|
-
this.checkDirectory(path.join(DIST_DIR, 'integrations'), 'Integrations');
|
|
134
|
-
this.checkDirectory(path.join(DIST_DIR, 'skills'), 'Skills');
|
|
135
|
-
this.checkDirectory(path.join(DIST_DIR, 'agents'), 'Agents');
|
|
136
|
-
this.checkDirectory(path.join(DIST_DIR, 'core'), 'Core framework');
|
|
137
|
-
this.checkDirectory(path.join(DIST_DIR, 'analytics'), 'Analytics');
|
|
138
|
-
this.checkDirectory(path.join(DIST_DIR, 'orchestrator'), 'Orchestrator');
|
|
139
|
-
this.checkDirectory(path.join(DIST_DIR, 'session'), 'Session management');
|
|
140
|
-
this.checkDirectory(path.join(DIST_DIR, 'validation'), 'Validation');
|
|
141
|
-
this.checkDirectory(path.join(DIST_DIR, 'utils'), 'Utils');
|
|
142
|
-
this.checkDirectory(path.join(DIST_DIR, 'security'), 'Security');
|
|
143
|
-
this.checkDirectory(path.join(DIST_DIR, 'performance'), 'Performance');
|
|
144
|
-
this.checkDirectory(path.join(DIST_DIR, 'monitoring'), 'Monitoring');
|
|
145
|
-
this.checkDirectory(path.join(DIST_DIR, 'reporting'), 'Reporting');
|
|
146
|
-
this.checkDirectory(path.join(DIST_DIR, 'postprocessor'), 'Postprocessor');
|
|
147
|
-
this.checkDirectory(path.join(DIST_DIR, 'delegation'), 'Delegation');
|
|
148
|
-
this.checkDirectory(path.join(DIST_DIR, 'config'), 'Config');
|
|
149
|
-
this.checkDirectory(path.join(DIST_DIR, 'testing'), 'Testing');
|
|
150
|
-
this.checkDirectory(path.join(DIST_DIR, 'services'), 'Services');
|
|
151
|
-
this.checkDirectory(path.join(PROJECT_DIR, 'src/infrastructure'), 'Infrastructure');
|
|
152
|
-
this.checkDirectory(path.join(DIST_DIR, 'dashboard'), 'Dashboard');
|
|
153
|
-
this.checkDirectory(path.join(DIST_DIR, 'public'), 'Public assets');
|
|
154
|
-
|
|
155
|
-
this.checkDirectory(path.join(DIST_DIR, 'cli'), 'CLI help');
|
|
156
|
-
|
|
157
|
-
// Check critical files (MCP + Plugin architecture)
|
|
158
|
-
const criticalFiles = [
|
|
159
|
-
['dist/cli/index.js', 'CLI entry point'],
|
|
160
|
-
['.opencode/plugin/strray-codex-injection.js', 'OpenCode plugin'],
|
|
161
|
-
['dist/mcps/framework-help.server.js', 'Framework help MCP'],
|
|
162
|
-
['dist/processors/processor-manager.js', 'Processor manager'],
|
|
163
|
-
['dist/state/state-manager.js', 'State manager'],
|
|
164
|
-
['dist/enforcement/rule-enforcer.js', 'Rule enforcer']
|
|
165
|
-
];
|
|
166
|
-
|
|
167
|
-
// OpenClaw integration - validated via test
|
|
168
|
-
try {
|
|
169
|
-
await this.runCommand('npm run test -- --run src/integrations/openclaw/openclaw-integration.test.ts', 'OpenClaw integration', 60000);
|
|
170
|
-
this.results.passed.push('OpenClaw integration');
|
|
171
|
-
} catch (error) {
|
|
172
|
-
this.results.failed.push('OpenClaw integration');
|
|
173
|
-
}
|
|
174
|
-
|
|
175
|
-
for (const [filePath, description] of criticalFiles) {
|
|
176
|
-
this.checkFile(path.join(PROJECT_DIR, filePath), description);
|
|
177
|
-
}
|
|
178
|
-
|
|
179
|
-
// Test TypeScript compilation
|
|
180
|
-
try {
|
|
181
|
-
await this.runCommand('npm run typecheck', 'TypeScript type checking', 60000);
|
|
182
|
-
this.results.passed.push('TypeScript compilation');
|
|
183
|
-
} catch (error) {
|
|
184
|
-
this.results.failed.push('TypeScript compilation');
|
|
185
|
-
}
|
|
186
|
-
|
|
187
|
-
// Test build process
|
|
188
|
-
try {
|
|
189
|
-
await this.runCommand('npm run build', 'Build process', 60000);
|
|
190
|
-
this.results.passed.push('Build process');
|
|
191
|
-
} catch (error) {
|
|
192
|
-
this.results.failed.push('Build process');
|
|
193
|
-
}
|
|
194
|
-
}
|
|
195
|
-
|
|
196
|
-
async validateCoreComponents() {
|
|
197
|
-
this.log('Phase 2: Core Components Validation', 'step');
|
|
198
|
-
this.log('=====================================', 'step');
|
|
199
|
-
|
|
200
|
-
// Test rule enforcer
|
|
201
|
-
try {
|
|
202
|
-
const ruleEnforcerPath = path.join(DIST_DIR, 'enforcement', 'rule-enforcer.js');
|
|
203
|
-
if (this.checkFile(ruleEnforcerPath, 'Rule enforcer')) {
|
|
204
|
-
// Skip rule enforcer test for now - ES module compatibility issue
|
|
205
|
-
this.log('Skipping rule enforcer test (ES module compatibility)', 'warning');
|
|
206
|
-
this.results.passed.push('Rule enforcer test skipped');
|
|
207
|
-
}
|
|
208
|
-
} catch (error) {
|
|
209
|
-
this.results.failed.push('Rule enforcer functionality');
|
|
210
|
-
}
|
|
211
|
-
|
|
212
|
-
// Test processor manager
|
|
213
|
-
try {
|
|
214
|
-
const processorPath = path.join(DIST_DIR, 'processors', 'processor-manager.js');
|
|
215
|
-
if (this.checkFile(processorPath, 'Processor manager')) {
|
|
216
|
-
this.results.passed.push('Processor manager loaded');
|
|
217
|
-
}
|
|
218
|
-
} catch (error) {
|
|
219
|
-
this.results.failed.push('Processor manager loaded');
|
|
220
|
-
}
|
|
221
|
-
|
|
222
|
-
// Test state manager
|
|
223
|
-
try {
|
|
224
|
-
const statePath = path.join(DIST_DIR, 'state', 'state-manager.js');
|
|
225
|
-
if (this.checkFile(statePath, 'State manager')) {
|
|
226
|
-
this.results.passed.push('State manager loaded');
|
|
227
|
-
}
|
|
228
|
-
} catch (error) {
|
|
229
|
-
this.results.failed.push('State manager loaded');
|
|
230
|
-
}
|
|
231
|
-
}
|
|
232
|
-
|
|
233
|
-
async validateMCPConnectivity() {
|
|
234
|
-
this.log('Phase 3: MCP Server Connectivity', 'step');
|
|
235
|
-
this.log('=================================', 'step');
|
|
236
|
-
|
|
237
|
-
const mcpServers = [
|
|
238
|
-
'dist/mcps/enforcer-tools.server.js',
|
|
239
|
-
'dist/mcps/orchestrator.server.js',
|
|
240
|
-
'dist/mcps/framework-help.server.js',
|
|
241
|
-
'dist/mcps/boot-orchestrator.server.js',
|
|
242
|
-
'dist/mcps/auto-format.server.js',
|
|
243
|
-
'dist/mcps/lint.server.js',
|
|
244
|
-
'dist/mcps/estimation.server.js',
|
|
245
|
-
'dist/mcps/framework-compliance-audit.server.js',
|
|
246
|
-
'dist/mcps/model-health-check.server.js',
|
|
247
|
-
'dist/mcps/performance-analysis.server.js',
|
|
248
|
-
'dist/mcps/processor-pipeline.server.js',
|
|
249
|
-
'dist/mcps/researcher.server.js',
|
|
250
|
-
'dist/mcps/security-scan.server.js',
|
|
251
|
-
'dist/mcps/state-manager.server.js',
|
|
252
|
-
'dist/mcps/architect-tools.server.js',
|
|
253
|
-
'dist/mcps/agent-resolver.js',
|
|
254
|
-
'dist/mcps/knowledge-skills/project-analysis.server.js',
|
|
255
|
-
'dist/mcps/knowledge-skills/api-design.server.js',
|
|
256
|
-
'dist/mcps/knowledge-skills/architecture-patterns.server.js',
|
|
257
|
-
'dist/mcps/knowledge-skills/git-workflow.server.js',
|
|
258
|
-
'dist/mcps/knowledge-skills/performance-optimization.server.js',
|
|
259
|
-
'dist/mcps/knowledge-skills/testing-strategy.server.js',
|
|
260
|
-
'dist/mcps/knowledge-skills/code-review.server.js',
|
|
261
|
-
'dist/mcps/knowledge-skills/security-audit.server.js',
|
|
262
|
-
'dist/mcps/knowledge-skills/ui-ux-design.server.js',
|
|
263
|
-
'dist/mcps/knowledge-skills/refactoring-strategies.server.js',
|
|
264
|
-
'dist/mcps/knowledge-skills/testing-best-practices.server.js',
|
|
265
|
-
'dist/mcps/knowledge-skills/bug-triage-specialist.server.js',
|
|
266
|
-
'dist/mcps/knowledge-skills/code-analyzer.server.js',
|
|
267
|
-
'dist/mcps/knowledge-skills/content-creator.server.js',
|
|
268
|
-
'dist/mcps/knowledge-skills/database-design.server.js',
|
|
269
|
-
'dist/mcps/knowledge-skills/devops-deployment.server.js',
|
|
270
|
-
'dist/mcps/knowledge-skills/mobile-development.server.js',
|
|
271
|
-
'dist/mcps/knowledge-skills/strategist.server.js',
|
|
272
|
-
'dist/mcps/knowledge-skills/growth-strategist.server.js',
|
|
273
|
-
'dist/mcps/knowledge-skills/seo-consultant.server.js',
|
|
274
|
-
'dist/mcps/knowledge-skills/session-management.server.js',
|
|
275
|
-
'dist/mcps/knowledge-skills/log-monitor.server.js',
|
|
276
|
-
'dist/mcps/knowledge-skills/multimodal-looker.server.js',
|
|
277
|
-
'dist/mcps/knowledge-skills/tech-writer.server.js',
|
|
278
|
-
'dist/mcps/knowledge-skills/skill-invocation.server.js'
|
|
279
|
-
];
|
|
280
|
-
|
|
281
|
-
let mcpSuccessCount = 0;
|
|
282
|
-
for (const serverPath of mcpServers) {
|
|
283
|
-
const fullPath = path.join(PROJECT_DIR, serverPath);
|
|
284
|
-
const serverName = path.basename(serverPath, '.server.js');
|
|
285
|
-
|
|
286
|
-
if (this.checkFile(fullPath, `MCP Server: ${serverName}`)) {
|
|
287
|
-
// For now, just check file existence - MCP servers are ES modules and need special handling
|
|
288
|
-
this.log(`MCP Server file exists: ${serverName}`, 'success');
|
|
289
|
-
mcpSuccessCount++;
|
|
290
|
-
this.results.passed.push(`MCP Server file exists: ${serverName}`);
|
|
291
|
-
}
|
|
292
|
-
}
|
|
293
|
-
|
|
294
|
-
this.log(`MCP Servers: ${mcpSuccessCount}/${mcpServers.length} functional`, 'info');
|
|
295
|
-
}
|
|
296
|
-
|
|
297
|
-
async validateTestSuite() {
|
|
298
|
-
this.log('Phase 4: Test Suite Validation', 'step');
|
|
299
|
-
this.log('===============================', 'step');
|
|
300
|
-
|
|
301
|
-
// Check test directories
|
|
302
|
-
this.checkDirectory(path.join(PROJECT_DIR, 'src', '__tests__'), 'Test directory');
|
|
303
|
-
this.checkDirectory(path.join(PROJECT_DIR, 'src', '__tests__', 'unit'), 'Unit tests');
|
|
304
|
-
this.checkDirectory(path.join(PROJECT_DIR, 'src', '__tests__', 'integration'), 'Integration tests');
|
|
305
|
-
|
|
306
|
-
// Run critical unit tests
|
|
307
|
-
const criticalTests = [
|
|
308
|
-
'test:unit',
|
|
309
|
-
'test:core-framework',
|
|
310
|
-
'test:security'
|
|
311
|
-
];
|
|
312
|
-
|
|
313
|
-
for (const testCommand of criticalTests) {
|
|
314
|
-
try {
|
|
315
|
-
await this.runCommand(`npm run ${testCommand}`, `Test suite: ${testCommand}`, 120000);
|
|
316
|
-
this.results.passed.push(`Test suite: ${testCommand}`);
|
|
317
|
-
} catch (error) {
|
|
318
|
-
this.results.failed.push(`Test suite: ${testCommand}`);
|
|
319
|
-
}
|
|
320
|
-
}
|
|
321
|
-
}
|
|
322
|
-
|
|
323
|
-
async validateCLICommands() {
|
|
324
|
-
this.log('Phase 5: CLI Commands Validation', 'step');
|
|
325
|
-
this.log('================================', 'step');
|
|
326
|
-
|
|
327
|
-
const cliCommands = [
|
|
328
|
-
{ cmd: 'node dist/cli/index.js --help', desc: 'CLI help command' },
|
|
329
|
-
{ cmd: 'node dist/cli/index.js status', desc: 'CLI status command' },
|
|
330
|
-
{ cmd: 'node dist/cli/index.js --version', desc: 'CLI version command' }
|
|
331
|
-
];
|
|
332
|
-
|
|
333
|
-
for (const { cmd, desc } of cliCommands) {
|
|
334
|
-
try {
|
|
335
|
-
await this.runCommand(cmd, desc, 30000);
|
|
336
|
-
this.results.passed.push(desc);
|
|
337
|
-
} catch (error) {
|
|
338
|
-
this.results.failed.push(desc);
|
|
339
|
-
}
|
|
340
|
-
}
|
|
341
|
-
}
|
|
342
|
-
|
|
343
|
-
async validateIntegrationPoints() {
|
|
344
|
-
this.log('Phase 6: Integration Points Validation', 'step');
|
|
345
|
-
this.log('======================================', 'step');
|
|
346
|
-
|
|
347
|
-
this.checkFile(path.join(PROJECT_DIR, 'scripts', 'node', 'postinstall.cjs'), 'Postinstall script');
|
|
348
|
-
this.checkFile(path.join(PROJECT_DIR, 'opencode.json'), 'OpenCode configuration');
|
|
349
|
-
this.checkDirectory(path.join(PROJECT_DIR, 'src', 'opencode'), 'OpenCode source directory');
|
|
350
|
-
this.checkDirectory(path.join(PROJECT_DIR, '.opencode'), 'OpenCode generated directory');
|
|
351
|
-
// Source-of-truth configs (in src/opencode/)
|
|
352
|
-
this.checkFile(path.join(PROJECT_DIR, 'src', 'opencode', 'strray', 'codex.json'), 'Codex configuration (source)');
|
|
353
|
-
this.checkFile(path.join(PROJECT_DIR, 'src', 'opencode', 'strray', 'features.json'), 'Features configuration (source)');
|
|
354
|
-
this.checkFile(path.join(PROJECT_DIR, 'src', 'opencode', 'strray', 'config.json'), 'Strray config (source)');
|
|
355
|
-
this.checkFile(path.join(PROJECT_DIR, 'src', 'opencode', 'strray', 'routing-mappings.json'), 'Routing mappings (source)');
|
|
356
|
-
this.checkFile(path.join(PROJECT_DIR, 'src', 'opencode', 'strray', 'integrations.json'), 'Integrations config (source)');
|
|
357
|
-
this.checkFile(path.join(PROJECT_DIR, 'src', 'opencode', 'strray', 'agents_template.md'), 'Agents template (source)');
|
|
358
|
-
this.checkFile(path.join(PROJECT_DIR, 'src', 'opencode', 'codex.codex'), 'Codex file (source)');
|
|
359
|
-
this.checkFile(path.join(PROJECT_DIR, 'src', 'opencode', 'enforcer-config.json'), 'Enforcer config (source)');
|
|
360
|
-
this.checkFile(path.join(PROJECT_DIR, 'src', 'opencode', '.strrayrc.json'), 'Strray RC config (source)');
|
|
361
|
-
// Generated/runtime configs (in .opencode/)
|
|
362
|
-
this.checkDirectory(path.join(PROJECT_DIR, '.opencode', 'strray'), 'Strray config directory (generated)');
|
|
363
|
-
this.checkDirectory(path.join(PROJECT_DIR, '.opencode', 'commands'), 'OpenCode commands (generated)');
|
|
364
|
-
this.checkDirectory(path.join(PROJECT_DIR, '.opencode', 'hooks'), 'OpenCode hooks');
|
|
365
|
-
this.checkDirectory(path.join(PROJECT_DIR, '.opencode', 'workflows'), 'OpenCode workflows (generated)');
|
|
366
|
-
this.checkDirectory(path.join(PROJECT_DIR, '.opencode', 'agents'), 'OpenCode agents (generated)');
|
|
367
|
-
this.checkDirectory(path.join(PROJECT_DIR, '.opencode', 'skills'), 'OpenCode skills');
|
|
368
|
-
this.checkDirectory(path.join(PROJECT_DIR, '.opencode', 'core'), 'OpenCode core (compiled)');
|
|
369
|
-
this.checkDirectory(path.join(PROJECT_DIR, '.opencode', 'enforcement'), 'OpenCode enforcement (compiled)');
|
|
370
|
-
this.checkFile(path.join(PROJECT_DIR, '.opencode', 'init.sh'), 'Init script');
|
|
371
|
-
|
|
372
|
-
const consumerTestPath = path.join(PROJECT_DIR, 'scripts', 'mjs', 'test-consumer-readiness.mjs');
|
|
373
|
-
if (this.checkFile(consumerTestPath, 'Consumer readiness test')) {
|
|
374
|
-
try {
|
|
375
|
-
await this.runCommand(`node "${consumerTestPath}"`, 'Consumer readiness validation', 30000);
|
|
376
|
-
this.results.passed.push('Consumer readiness validation');
|
|
377
|
-
} catch (error) {
|
|
378
|
-
this.results.failed.push('Consumer readiness validation');
|
|
379
|
-
}
|
|
380
|
-
}
|
|
381
|
-
}
|
|
382
|
-
|
|
383
|
-
async validateSkillsAndAgents() {
|
|
384
|
-
this.log('Phase 7: Skills and Agents Validation', 'step');
|
|
385
|
-
this.log('======================================', 'step');
|
|
386
|
-
|
|
387
|
-
const skills = [
|
|
388
|
-
'dist/skills/api-design',
|
|
389
|
-
'dist/skills/architect-tools',
|
|
390
|
-
'dist/skills/architecture-patterns',
|
|
391
|
-
'dist/skills/auto-format',
|
|
392
|
-
'dist/skills/backend-engineer',
|
|
393
|
-
'dist/skills/boot-orchestrator',
|
|
394
|
-
'dist/skills/bug-triage',
|
|
395
|
-
'dist/skills/code-analyzer',
|
|
396
|
-
'dist/skills/code-review',
|
|
397
|
-
'dist/skills/content-creator',
|
|
398
|
-
'dist/skills/database-engineer',
|
|
399
|
-
'dist/skills/devops-engineer',
|
|
400
|
-
'dist/skills/enforcer',
|
|
401
|
-
'dist/skills/frontend-engineer',
|
|
402
|
-
'dist/skills/frontend-ui-ux-engineer',
|
|
403
|
-
'dist/skills/git-workflow',
|
|
404
|
-
'dist/skills/growth-strategist',
|
|
405
|
-
'dist/skills/hermes-agent',
|
|
406
|
-
'dist/skills/inference-improve',
|
|
407
|
-
'dist/skills/lint',
|
|
408
|
-
'dist/skills/log-monitor',
|
|
409
|
-
'dist/skills/mobile-developer',
|
|
410
|
-
'dist/skills/model-health-check',
|
|
411
|
-
'dist/skills/multimodal-looker',
|
|
412
|
-
'dist/skills/orchestrator',
|
|
413
|
-
'dist/skills/performance-analysis',
|
|
414
|
-
'dist/skills/performance-engineer',
|
|
415
|
-
'dist/skills/performance-optimization',
|
|
416
|
-
'dist/skills/processor-pipeline',
|
|
417
|
-
'dist/skills/project-analysis',
|
|
418
|
-
'dist/skills/refactoring-strategies',
|
|
419
|
-
'dist/skills/researcher',
|
|
420
|
-
'dist/skills/security-audit',
|
|
421
|
-
'dist/skills/security-scan',
|
|
422
|
-
'dist/skills/seo-consultant',
|
|
423
|
-
'dist/skills/session-management',
|
|
424
|
-
'dist/skills/state-manager',
|
|
425
|
-
'dist/skills/storyteller',
|
|
426
|
-
'dist/skills/strategist',
|
|
427
|
-
'dist/skills/tech-writer',
|
|
428
|
-
'dist/skills/testing-best-practices',
|
|
429
|
-
'dist/skills/testing-strategy',
|
|
430
|
-
'dist/skills/ui-ux-design'
|
|
431
|
-
];
|
|
432
|
-
|
|
433
|
-
let skillCount = 0;
|
|
434
|
-
for (const skillPath of skills) {
|
|
435
|
-
const fullPath = path.join(PROJECT_DIR, skillPath);
|
|
436
|
-
if (fs.existsSync(fullPath)) {
|
|
437
|
-
skillCount++;
|
|
438
|
-
this.results.passed.push(`Skill: ${path.basename(skillPath)}`);
|
|
439
|
-
}
|
|
440
|
-
}
|
|
441
|
-
this.log(`Skills: ${skillCount}/${skills.length} found`, 'info');
|
|
442
|
-
|
|
443
|
-
const agents = [
|
|
444
|
-
'dist/agents/architect.js',
|
|
445
|
-
'dist/agents/backend-engineer.js',
|
|
446
|
-
'dist/agents/bug-triage-specialist.js',
|
|
447
|
-
'dist/agents/code-analyzer.js',
|
|
448
|
-
'dist/agents/code-reviewer.js',
|
|
449
|
-
'dist/agents/content-creator.js',
|
|
450
|
-
'dist/agents/database-engineer.js',
|
|
451
|
-
'dist/agents/devops-engineer.js',
|
|
452
|
-
'dist/agents/enforcer.js',
|
|
453
|
-
'dist/agents/frontend-engineer.js',
|
|
454
|
-
'dist/agents/frontend-ui-ux-engineer.js',
|
|
455
|
-
'dist/agents/growth-strategist.js',
|
|
456
|
-
'dist/agents/index.js',
|
|
457
|
-
'dist/agents/librarian-agents-updater.js',
|
|
458
|
-
'dist/agents/log-monitor.js',
|
|
459
|
-
'dist/agents/mobile-developer.js',
|
|
460
|
-
'dist/agents/multimodal-looker.js',
|
|
461
|
-
'dist/agents/orchestrator.js',
|
|
462
|
-
'dist/agents/performance-engineer.js',
|
|
463
|
-
'dist/agents/refactorer.js',
|
|
464
|
-
'dist/agents/registry.js',
|
|
465
|
-
'dist/agents/researcher.js',
|
|
466
|
-
'dist/agents/security-auditor.js',
|
|
467
|
-
'dist/agents/seo-consultant.js',
|
|
468
|
-
'dist/agents/strategist.js',
|
|
469
|
-
'dist/agents/tech-writer.js',
|
|
470
|
-
'dist/agents/testing-lead.js',
|
|
471
|
-
'dist/agents/types.js'
|
|
472
|
-
];
|
|
473
|
-
|
|
474
|
-
let agentCount = 0;
|
|
475
|
-
for (const agentPath of agents) {
|
|
476
|
-
const fullPath = path.join(PROJECT_DIR, agentPath);
|
|
477
|
-
if (this.checkFile(fullPath, `Agent: ${path.basename(agentPath)}`)) {
|
|
478
|
-
agentCount++;
|
|
479
|
-
}
|
|
480
|
-
}
|
|
481
|
-
this.log(`Agents: ${agentCount}/${agents.length} found`, 'info');
|
|
482
|
-
}
|
|
483
|
-
|
|
484
|
-
async validateCoreAndInfrastructure() {
|
|
485
|
-
this.log('Phase 8: Core and Infrastructure Validation', 'step');
|
|
486
|
-
this.log('============================================', 'step');
|
|
487
|
-
|
|
488
|
-
const coreFiles = [
|
|
489
|
-
['dist/core/kernel-patterns.js', 'Kernel patterns'],
|
|
490
|
-
['dist/core/index.js', 'Core index'],
|
|
491
|
-
['dist/index.js', 'Main index']
|
|
492
|
-
];
|
|
493
|
-
|
|
494
|
-
for (const [filePath, description] of coreFiles) {
|
|
495
|
-
this.checkFile(path.join(PROJECT_DIR, filePath), description);
|
|
496
|
-
}
|
|
497
|
-
|
|
498
|
-
const infrastructureDirs = [
|
|
499
|
-
['src/infrastructure', 'Infrastructure'],
|
|
500
|
-
['dist/config', 'Config'],
|
|
501
|
-
['dist/dashboard', 'Dashboard'],
|
|
502
|
-
['dist/benchmark', 'Benchmark']
|
|
503
|
-
];
|
|
504
|
-
|
|
505
|
-
for (const [dirPath, description] of infrastructureDirs) {
|
|
506
|
-
const fullPath = path.join(PROJECT_DIR, dirPath);
|
|
507
|
-
if (this.checkDirectory(fullPath, description)) {
|
|
508
|
-
this.results.passed.push(description);
|
|
509
|
-
}
|
|
510
|
-
}
|
|
511
|
-
|
|
512
|
-
const criticalDistFiles = [
|
|
513
|
-
'.opencode/plugin/strray-codex-injection.js',
|
|
514
|
-
'dist/scripts/integration.js',
|
|
515
|
-
'dist/public/',
|
|
516
|
-
'dist/cli/index.js'
|
|
517
|
-
];
|
|
518
|
-
|
|
519
|
-
for (const filePath of criticalDistFiles) {
|
|
520
|
-
const fullPath = path.join(PROJECT_DIR, filePath);
|
|
521
|
-
if (filePath.endsWith('/')) {
|
|
522
|
-
this.checkDirectory(fullPath, `Directory: ${path.basename(filePath)}`);
|
|
523
|
-
} else {
|
|
524
|
-
this.checkFile(fullPath, `File: ${path.basename(filePath)}`);
|
|
525
|
-
}
|
|
526
|
-
}
|
|
527
|
-
}
|
|
528
|
-
|
|
529
|
-
async validateTestSuiteCoverage() {
|
|
530
|
-
this.log('Phase 9: Extended Test Suite Validation', 'step');
|
|
531
|
-
this.log('========================================', 'step');
|
|
532
|
-
|
|
533
|
-
const additionalTestCommands = [
|
|
534
|
-
'test:session-management',
|
|
535
|
-
'test:code-analysis',
|
|
536
|
-
'test:processors',
|
|
537
|
-
'test:performance-all',
|
|
538
|
-
'test:agents-all',
|
|
539
|
-
'test:infrastructure'
|
|
540
|
-
];
|
|
541
|
-
|
|
542
|
-
for (const testCommand of additionalTestCommands) {
|
|
543
|
-
try {
|
|
544
|
-
await this.runCommand(`npm run ${testCommand}`, `Test suite: ${testCommand}`, 120000);
|
|
545
|
-
this.results.passed.push(`Test suite: ${testCommand}`);
|
|
546
|
-
} catch (error) {
|
|
547
|
-
this.results.failed.push(`Test suite: ${testCommand}`);
|
|
548
|
-
}
|
|
549
|
-
}
|
|
550
|
-
}
|
|
551
|
-
|
|
552
|
-
printSummary() {
|
|
553
|
-
const duration = Date.now() - this.startTime;
|
|
554
|
-
const totalTests = this.results.passed.length + this.results.failed.length;
|
|
555
|
-
const successRate = totalTests > 0 ? Math.round((this.results.passed.length / totalTests) * 100) : 0;
|
|
556
|
-
|
|
557
|
-
this.log('Validation Summary', 'step');
|
|
558
|
-
this.log('==================', 'step');
|
|
559
|
-
this.log(`Duration: ${Math.round(duration / 1000)}s`, 'info');
|
|
560
|
-
this.log(`Total Checks: ${totalTests}`, 'info');
|
|
561
|
-
this.log(`Passed: ${this.results.passed.length}`, 'success');
|
|
562
|
-
this.log(`Failed: ${this.results.failed.length}`, 'error');
|
|
563
|
-
this.log(`Success Rate: ${successRate}%`, successRate >= 80 ? 'success' : 'error');
|
|
564
|
-
|
|
565
|
-
if (this.results.failed.length > 0) {
|
|
566
|
-
this.log('Failed Items:', 'error');
|
|
567
|
-
this.results.failed.forEach(item => {
|
|
568
|
-
this.log(` • ${item}`, 'error');
|
|
569
|
-
});
|
|
570
|
-
}
|
|
571
|
-
|
|
572
|
-
if (this.results.warnings.length > 0) {
|
|
573
|
-
this.log('Warnings:', 'warning');
|
|
574
|
-
this.results.warnings.forEach(item => {
|
|
575
|
-
this.log(` • ${item}`, 'warning');
|
|
576
|
-
});
|
|
577
|
-
}
|
|
578
|
-
|
|
579
|
-
// Overall assessment
|
|
580
|
-
this.log('Overall Assessment:', 'step');
|
|
581
|
-
if (successRate >= 90) {
|
|
582
|
-
this.log('🎉 EXCELLENT: Framework is production-ready', 'success');
|
|
583
|
-
} else if (successRate >= 80) {
|
|
584
|
-
this.log('✅ GOOD: Framework is mostly ready with minor issues', 'success');
|
|
585
|
-
} else if (successRate >= 70) {
|
|
586
|
-
this.log('⚠️ FAIR: Framework needs attention before production', 'warning');
|
|
587
|
-
} else {
|
|
588
|
-
this.log('❌ POOR: Framework requires significant fixes', 'error');
|
|
589
|
-
}
|
|
590
|
-
|
|
591
|
-
return successRate >= 80;
|
|
592
|
-
}
|
|
593
|
-
|
|
594
|
-
async runFullValidation() {
|
|
595
|
-
this.log('🚀 StringRay Framework - Comprehensive Validation', 'info');
|
|
596
|
-
this.log('================================================', 'info');
|
|
597
|
-
this.log(`Project Directory: ${PROJECT_DIR}`, 'info');
|
|
598
|
-
this.log(`Node Version: ${process.version}`, 'info');
|
|
599
|
-
this.log(`Platform: ${process.platform}`, 'info');
|
|
600
|
-
this.log('', 'info');
|
|
601
|
-
|
|
602
|
-
try {
|
|
603
|
-
await this.validateBuildSystem();
|
|
604
|
-
await this.validateCoreComponents();
|
|
605
|
-
await this.validateMCPConnectivity();
|
|
606
|
-
await this.validateTestSuite();
|
|
607
|
-
await this.validateCLICommands();
|
|
608
|
-
await this.validateIntegrationPoints();
|
|
609
|
-
await this.validateSkillsAndAgents();
|
|
610
|
-
await this.validateCoreAndInfrastructure();
|
|
611
|
-
|
|
612
|
-
const success = this.printSummary();
|
|
613
|
-
return success;
|
|
614
|
-
} catch (error) {
|
|
615
|
-
this.log(`Validation failed with error: ${error.message}`, 'error');
|
|
616
|
-
this.results.failed.push('Validation process error');
|
|
617
|
-
this.printSummary();
|
|
618
|
-
return false;
|
|
619
|
-
}
|
|
620
|
-
}
|
|
621
|
-
}
|
|
622
|
-
|
|
623
|
-
// Run validation if called directly
|
|
624
|
-
if (import.meta.url === `file://${process.argv[1]}`) {
|
|
625
|
-
const validator = new StringRayValidator();
|
|
626
|
-
validator.runFullValidation()
|
|
627
|
-
.then(success => {
|
|
628
|
-
process.exit(success ? 0 : 1);
|
|
629
|
-
})
|
|
630
|
-
.catch(error => {
|
|
631
|
-
console.error('Validation failed:', error);
|
|
632
|
-
process.exit(1);
|
|
633
|
-
});
|
|
634
|
-
}
|
|
635
|
-
|
|
636
|
-
export default StringRayValidator;
|
|
File without changes
|