claude-flow-novice 2.2.4 → 2.2.5
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/package.json +9 -8
- package/scripts/.claude-flow/metrics/agent-metrics.json +1 -0
- package/scripts/.claude-flow/metrics/performance.json +9 -0
- package/scripts/.claude-flow/metrics/task-metrics.json +10 -0
- package/scripts/CLEANUP_OPTIMIZATION_REPORT.json +312 -0
- package/scripts/CLEANUP_PERFORMANCE_OPTIMIZATION.md +387 -0
- package/scripts/CLEANUP_QUICK_START.md +268 -0
- package/scripts/CLEANUP_TEST_RESULTS.md +205 -0
- package/scripts/README.md +339 -0
- package/scripts/ace-query.sh +384 -0
- package/scripts/agent-token-analysis.js +430 -0
- package/scripts/auto-setup.js +332 -0
- package/scripts/build/README.md +167 -0
- package/scripts/build/build-config.js +27 -0
- package/scripts/build/build-prompt-copier.sh +30 -0
- package/scripts/build/performance-monitor.js +869 -0
- package/scripts/build/prepare-publish.js +150 -0
- package/scripts/build/typescript-fixer.js +621 -0
- package/scripts/build/unified-builder.sh +428 -0
- package/scripts/build/update-bin-version.js +32 -0
- package/scripts/build/validate-agents.js +238 -0
- package/scripts/build-index.js +43 -0
- package/scripts/build-orchestrator.js +320 -0
- package/scripts/check-routing-stats.cjs +122 -0
- package/scripts/ci-validation.js +375 -0
- package/scripts/cleanup-blocking-coordination.sh +420 -0
- package/scripts/cleanup-idle-sessions.sh +59 -0
- package/scripts/collect-build-metrics.js +65 -0
- package/scripts/demo/README.md +79 -0
- package/scripts/demo/autoscaling-demo-simplified.js +963 -0
- package/scripts/demo/comprehensive-dashboard-test.js +693 -0
- package/scripts/demo/confidence-log.js +87 -0
- package/scripts/demo/confidence-report.js +82 -0
- package/scripts/demo/demo-multi-swarm-coordination.js +325 -0
- package/scripts/demo/demo-production-deployment.js +399 -0
- package/scripts/demo/demo-visualization-system.js +149 -0
- package/scripts/demo/performance-analysis.cjs +71 -0
- package/scripts/demo/performance-analysis.js +71 -0
- package/scripts/demo/test-autoscaling-demo.js +314 -0
- package/scripts/dependency-optimizer.js +349 -0
- package/scripts/dependency-security-assessment.js +331 -0
- package/scripts/deploy-sdk.sh +176 -0
- package/scripts/deployment-readiness-report.json +179 -0
- package/scripts/dev/README.md +264 -0
- package/scripts/dev/claude-flow-wrapper.sh +35 -0
- package/scripts/dev/claude-monitor.py +419 -0
- package/scripts/dev/claude-sparc.sh +562 -0
- package/scripts/dev/claude-wrapper.sh +17 -0
- package/scripts/dev/demo-phase3-compliance.js +172 -0
- package/scripts/dev/demo-task-system.ts +224 -0
- package/scripts/dev/deployment-validator.js +315 -0
- package/scripts/dev/spawn-claude-terminal.sh +32 -0
- package/scripts/dev/start-portal.sh +506 -0
- package/scripts/dev/start-web-ui.js +15 -0
- package/scripts/dev/stop-portal.sh +311 -0
- package/scripts/dev/validate-examples.ts +288 -0
- package/scripts/dev/validate-phase2.cjs +451 -0
- package/scripts/dev/validate-phase2.js +785 -0
- package/scripts/dev/validate-phase3.cjs +208 -0
- package/scripts/dev/validate-security-remediation.js +1 -0
- package/scripts/ecosystem.config.cjs +90 -0
- package/scripts/fix-js-extensions.js +167 -0
- package/scripts/generate-basic-types.js +73 -0
- package/scripts/generate-changelog.js +318 -0
- package/scripts/git-hooks/pre-commit.sh +143 -0
- package/scripts/health-checks.js +634 -0
- package/scripts/hook-wrapper.sh +54 -0
- package/scripts/install/README.md +375 -0
- package/scripts/install/REDIS_SETUP_VALIDATION.json +245 -0
- package/scripts/install/check-prerequisites.js +303 -0
- package/scripts/install/config-wizard.js +606 -0
- package/scripts/install/dependency-checker.js +385 -0
- package/scripts/install/health-check.js +765 -0
- package/scripts/install/install.js +256 -0
- package/scripts/install/installation-benchmark.js +461 -0
- package/scripts/install/quick-install.js +720 -0
- package/scripts/install/quick-start-wizard.js +295 -0
- package/scripts/install/redis-cli.js +289 -0
- package/scripts/install/redis-install-guides.md +407 -0
- package/scripts/install/redis-setup.js +559 -0
- package/scripts/install/redis-test.js +278 -0
- package/scripts/install/service-manager.js +672 -0
- package/scripts/install/setup.js +832 -0
- package/scripts/install/uninstall.js +526 -0
- package/scripts/install/update.js +461 -0
- package/scripts/install-pre-commit-hook.sh +127 -0
- package/scripts/legacy/README.md +272 -0
- package/scripts/legacy/batch-fix-ts.sh +54 -0
- package/scripts/legacy/build-migration.sh +105 -0
- package/scripts/legacy/build-monitor.js +209 -0
- package/scripts/legacy/build-with-filter.sh +84 -0
- package/scripts/legacy/build-workaround.sh +71 -0
- package/scripts/legacy/fix-ts-advanced.js +358 -0
- package/scripts/legacy/fix-ts-final.sh +50 -0
- package/scripts/legacy/fix-ts-targeted.sh +49 -0
- package/scripts/legacy/fix-typescript-errors.js +305 -0
- package/scripts/legacy/force-build.sh +63 -0
- package/scripts/legacy/optimize-performance.js +400 -0
- package/scripts/legacy/performance-monitor.js +263 -0
- package/scripts/legacy/performance-monitoring.js +532 -0
- package/scripts/legacy/performance-test-runner.js +645 -0
- package/scripts/legacy/quick-fix-ts.js +281 -0
- package/scripts/legacy/safe-build.sh +63 -0
- package/scripts/memory-monitor-coordinator.js +322 -0
- package/scripts/migrate-to-sdk.sh +520 -0
- package/scripts/migration/QUICK-START.md +189 -0
- package/scripts/migration/QUICK-START.md.backup-1760135091363 +189 -0
- package/scripts/migration/README.md +464 -0
- package/scripts/migration/TASK-1.3.2-COMPLETION-REPORT.md +500 -0
- package/scripts/migration/TASK-1.3.2-COMPLETION-REPORT.md.backup-1760135091348 +500 -0
- package/scripts/migration/UPDATE-PATHS-README.md +464 -0
- package/scripts/migration/UPDATE-PATHS-README.md.backup-1760135091337 +464 -0
- package/scripts/migration/example-patterns.json +19 -0
- package/scripts/migration/install-arm64.js +78 -0
- package/scripts/migration/install.js +83 -0
- package/scripts/migration/migrate-hooks.js +173 -0
- package/scripts/migration/migration-examples.ts +318 -0
- package/scripts/migration/reorganize-workspace.js +504 -0
- package/scripts/migration/test-update-paths.js +359 -0
- package/scripts/migration/update-paths.js +664 -0
- package/scripts/migration/validate-migration.js +647 -0
- package/scripts/monitor-loop.sh +65 -0
- package/scripts/monitor-memory.sh +47 -0
- package/scripts/monitor-migration.js +339 -0
- package/scripts/monitor.py +43 -0
- package/scripts/monitoring/README.md +178 -0
- package/scripts/monitoring/alert-monitor.sh +220 -0
- package/scripts/monitoring/analyze-resources.sh +199 -0
- package/scripts/monitoring/dashboards/rate-limiting-dashboard.json +211 -0
- package/scripts/monitoring/dynamic-monitor.sh +85 -0
- package/scripts/monitoring/launch-stability-test.sh +184 -0
- package/scripts/monitoring/monitor-test.sh +93 -0
- package/scripts/monitoring/pre-test-validation.sh +208 -0
- package/scripts/monitoring/quick-test-alerting.sh +118 -0
- package/scripts/monitoring/quick-test-rate-limiting.sh +206 -0
- package/scripts/monitoring/rate-limiting-monitor.sh +380 -0
- package/scripts/monitoring/resource-monitor.sh +126 -0
- package/scripts/monitoring/stability-monitor.js +429 -0
- package/scripts/monitoring/test-monitor-quick.sh +54 -0
- package/scripts/monitoring/view-alerts.sh +307 -0
- package/scripts/npm-metrics-collector.js +482 -0
- package/scripts/npm-package-validation.cjs +299 -0
- package/scripts/optimization/build-optimizer.js +438 -0
- package/scripts/optimization/config-validator.js +761 -0
- package/scripts/optimization/test-optimization.js +432 -0
- package/scripts/optimization/unified-activation.js +839 -0
- package/scripts/optimize-package-swarm.js +54 -0
- package/scripts/performance/ACTIVATION_COMMANDS.md +292 -0
- package/scripts/performance/sqlite-enhanced-activation.sh +583 -0
- package/scripts/performance/test-enhanced-backend.sh +504 -0
- package/scripts/performance-monitor.js +644 -0
- package/scripts/performance-test-runner.js +698 -0
- package/scripts/post-deployment-monitoring.js +350 -0
- package/scripts/post-edit-pipeline.js +2091 -0
- package/scripts/post-install-claude-md.js +78 -0
- package/scripts/postinstall.js +79 -0
- package/scripts/pre-publish-validation.cjs +212 -0
- package/scripts/pre-publish-validation.js +429 -0
- package/scripts/redis-lua/cleanup-blocking-coordination.lua +198 -0
- package/scripts/release-announcement.js +425 -0
- package/scripts/release-notification.js +248 -0
- package/scripts/release-rollback.js +376 -0
- package/scripts/release-validation.js +460 -0
- package/scripts/rollback-sdk.sh +66 -0
- package/scripts/run-production-validation.ts +590 -0
- package/scripts/run-stability-validation.sh +687 -0
- package/scripts/security/README.md +339 -0
- package/scripts/security/deployment-validation.cjs +279 -0
- package/scripts/security/envelope-encryption-confidence-report.cjs +422 -0
- package/scripts/security/install-git-hooks.sh +132 -0
- package/scripts/security/install-git-secrets.sh +295 -0
- package/scripts/security/rotate-api-keys.js +469 -0
- package/scripts/security/ruv-swarm-safe.js +74 -0
- package/scripts/security/security-audit.cjs +538 -0
- package/scripts/security/setup-redis-auth.sh +397 -0
- package/scripts/security/validate-envelope-encryption.cjs +340 -0
- package/scripts/security-scan.js +492 -0
- package/scripts/src/web/frontend/.claude-flow/metrics/agent-metrics.json +1 -0
- package/scripts/src/web/frontend/.claude-flow/metrics/performance.json +9 -0
- package/scripts/src/web/frontend/.claude-flow/metrics/task-metrics.json +10 -0
- package/scripts/switch-api.sh +158 -0
- package/scripts/sync-agents.js +290 -0
- package/scripts/test/50-agent-test.js +625 -0
- package/scripts/test/NEW_STABILITY_TEST_GUIDE.md +407 -0
- package/scripts/test/README.md +236 -0
- package/scripts/test/STABILITY_TEST_EXAMPLE.md +347 -0
- package/scripts/test/STABILITY_TEST_README.md +480 -0
- package/scripts/test/agent-worker.js +309 -0
- package/scripts/test/ai-coordination-test.js +650 -0
- package/scripts/test/ai-mesh-coordination-test.js +416 -0
- package/scripts/test/check-links.ts +274 -0
- package/scripts/test/check-performance-regression.ts +168 -0
- package/scripts/test/cli-agent-coordination-test.js +313 -0
- package/scripts/test/coordinator-multilingual-test.js +396 -0
- package/scripts/test/coordinator-transparency-demo.js +585 -0
- package/scripts/test/coverage-report.ts +692 -0
- package/scripts/test/generate-swarm-tests.js +633 -0
- package/scripts/test/integration-test-validation.cjs +253 -0
- package/scripts/test/load-test-swarm.js +576 -0
- package/scripts/test/mesh-coordination-zero-overlap-test.js +740 -0
- package/scripts/test/multilingual-hello-world-test.js +390 -0
- package/scripts/test/quick-multilingual-demo.js +464 -0
- package/scripts/test/real-agent-test.js +312 -0
- package/scripts/test/run-phase3-compliance-tests.js +427 -0
- package/scripts/test/run-stability-test-examples.sh +292 -0
- package/scripts/test/stability-results/stability-metrics.jsonl +83 -0
- package/scripts/test/stability-results/stability-test-report.json +128 -0
- package/scripts/test/stability-results/stability-test.log +1827 -0
- package/scripts/test/stability-test-50-agents.js +734 -0
- package/scripts/test/test-batch-tasks.ts +29 -0
- package/scripts/test/test-byzantine-resolution.js +246 -0
- package/scripts/test/test-claude-spawn-options.sh +63 -0
- package/scripts/test/test-cli-wizard.js +331 -0
- package/scripts/test/test-comprehensive.js +401 -0
- package/scripts/test/test-coordination-features.ts +238 -0
- package/scripts/test/test-fallback-systems.js +276 -0
- package/scripts/test/test-init-command.ts +302 -0
- package/scripts/test/test-mcp.ts +251 -0
- package/scripts/test/test-runner.ts +568 -0
- package/scripts/test/test-swarm-integration.sh +92 -0
- package/scripts/test/test-swarm.ts +142 -0
- package/scripts/test/validation-summary.ts +408 -0
- package/scripts/test-cleanup-performance.sh +416 -0
- package/scripts/test-dashboard-auth.cjs +203 -0
- package/scripts/test-docker-deployment.sh +207 -0
- package/scripts/test-npm-package.cjs +167 -0
- package/scripts/test-provider-routing.cjs +226 -0
- package/scripts/test-routing-telemetry.cjs +147 -0
- package/scripts/test-runner.cjs +154 -0
- package/scripts/test-zai-10k.cjs +81 -0
- package/scripts/test-zai-api.cjs +191 -0
- package/scripts/test-zai-diagnostic.cjs +151 -0
- package/scripts/test-zai-final.cjs +128 -0
- package/scripts/test-zai-with-env.cjs +85 -0
- package/scripts/utils/README.md +261 -0
- package/scripts/utils/clean-build-artifacts.sh +94 -0
- package/scripts/utils/cleanup-root.sh +69 -0
- package/scripts/utils/fix-cliffy-imports.js +307 -0
- package/scripts/utils/fix-duplicate-imports.js +114 -0
- package/scripts/utils/fix-error-handling.cjs +70 -0
- package/scripts/utils/fix-import-paths.js +104 -0
- package/scripts/utils/fix-imports.js +116 -0
- package/scripts/utils/fix-shebang.js +78 -0
- package/scripts/utils/fix-test-modules.js +27 -0
- package/scripts/utils/fix-timezone-issue-246.js +200 -0
- package/scripts/utils/fix-ts-comprehensive.py +182 -0
- package/scripts/utils/fix-ts-targeted-batch.js +250 -0
- package/scripts/utils/remove-benchmark-conflicts.sh +140 -0
- package/scripts/utils/simple-test-fixer.js +190 -0
- package/scripts/utils/validate-metrics-structure.cjs +144 -0
- package/scripts/validate-agent-hooks.js +506 -0
- package/scripts/validate-changelog.js +241 -0
- package/scripts/validate-coordination-cli.js +69 -0
- package/scripts/validate-coordination-toggle-integration.cjs +501 -0
- package/scripts/validate-docker-infrastructure.sh +502 -0
- package/scripts/validate-entry-points.js +300 -0
- package/scripts/validate-stage3-performance.ts +377 -0
- package/scripts/validate-template-bundling.js +180 -0
- package/scripts/validation/README.md +33 -0
- package/scripts/validation/acl-security-validation.cjs +214 -0
- package/scripts/validation/acl-security-validation.js +402 -0
- package/scripts/validation/byzantine-verification.js +407 -0
- package/scripts/validation/final-phase-2-consensus.cjs +219 -0
- package/scripts/validation/final-security-validation.js +791 -0
- package/scripts/validation/final-wasm-validation.cjs +840 -0
- package/scripts/validation/integration-test-analysis.js +105 -0
- package/scripts/validation/phase-0-comprehensive-validation.js +474 -0
- package/scripts/validation/phase-0-consensus-report.js +139 -0
- package/scripts/validation/phase-0-final-report.js +112 -0
- package/scripts/validation/phase-0-redis-consensus-report.js +129 -0
- package/scripts/validation/phase-0-validation-improved.js +490 -0
- package/scripts/validation/phase-0-validation-test.js +65 -0
- package/scripts/validation/phase-1-consensus-report.cjs +342 -0
- package/scripts/validation/phase-1-consensus-validation.cjs +551 -0
- package/scripts/validation/phase-1-consensus-validation.js +551 -0
- package/scripts/validation/phase-2-consensus-report.cjs +186 -0
- package/scripts/validation/phase-2-validation.cjs +171 -0
- package/scripts/validation/phase-2-validation.js +171 -0
- package/scripts/validation/phase-4-consensus-report.js +181 -0
- package/scripts/validation/phase-4-final-validation.js +351 -0
- package/scripts/validation/phase-5-consensus-report.cjs +113 -0
- package/scripts/validation/phase-5-consensus-report.js +113 -0
- package/scripts/validation/security-analysis.js +49 -0
- package/scripts/validation/security-validation.js +492 -0
- package/scripts/validation/simple-security-validation.js +464 -0
- package/scripts/verify-installation.js +112 -0
- package/scripts/verify-mcp-server.js +86 -0
- package/scripts/verify-sdk-phase1.cjs +293 -0
|
@@ -0,0 +1,538 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* Security Audit Script
|
|
5
|
+
* Comprehensive security assessment for Claude Flow Novice
|
|
6
|
+
*
|
|
7
|
+
* Checks:
|
|
8
|
+
* - Secrets management and file permissions
|
|
9
|
+
* - API key validity and rotation status
|
|
10
|
+
* - Redis authentication configuration
|
|
11
|
+
* - Git-secrets installation
|
|
12
|
+
* - Environment configuration
|
|
13
|
+
*
|
|
14
|
+
* Usage: node scripts/security/security-audit.js [--json] [--detailed]
|
|
15
|
+
*
|
|
16
|
+
* @security Phase 0 Debt Resolution
|
|
17
|
+
*/
|
|
18
|
+
|
|
19
|
+
const fs = require('fs');
|
|
20
|
+
const path = require('path');
|
|
21
|
+
const { execSync } = require('child_process');
|
|
22
|
+
|
|
23
|
+
// Load SecretsManager
|
|
24
|
+
const { getSecretsManager } = require('../../src/security/SecretsManager.cjs');
|
|
25
|
+
|
|
26
|
+
/**
|
|
27
|
+
* Audit Report Structure
|
|
28
|
+
*/
|
|
29
|
+
const auditReport = {
|
|
30
|
+
timestamp: new Date().toISOString(),
|
|
31
|
+
overallScore: 0,
|
|
32
|
+
status: 'UNKNOWN',
|
|
33
|
+
categories: {
|
|
34
|
+
secretsManagement: { score: 0, issues: [], recommendations: [] },
|
|
35
|
+
authentication: { score: 0, issues: [], recommendations: [] },
|
|
36
|
+
filePermissions: { score: 0, issues: [], recommendations: [] },
|
|
37
|
+
gitSecurity: { score: 0, issues: [], recommendations: [] },
|
|
38
|
+
apiKeys: { score: 0, issues: [], recommendations: [] },
|
|
39
|
+
redisAuth: { score: 0, issues: [], recommendations: [] }
|
|
40
|
+
},
|
|
41
|
+
summary: {
|
|
42
|
+
critical: 0,
|
|
43
|
+
high: 0,
|
|
44
|
+
medium: 0,
|
|
45
|
+
low: 0,
|
|
46
|
+
informational: 0
|
|
47
|
+
}
|
|
48
|
+
};
|
|
49
|
+
|
|
50
|
+
/**
|
|
51
|
+
* Add issue to report
|
|
52
|
+
*/
|
|
53
|
+
function addIssue(category, severity, message, recommendation = null) {
|
|
54
|
+
auditReport.categories[category].issues.push({
|
|
55
|
+
severity,
|
|
56
|
+
message,
|
|
57
|
+
timestamp: new Date().toISOString()
|
|
58
|
+
});
|
|
59
|
+
|
|
60
|
+
if (recommendation) {
|
|
61
|
+
auditReport.categories[category].recommendations.push(recommendation);
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
// Update summary
|
|
65
|
+
auditReport.summary[severity.toLowerCase()]++;
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
/**
|
|
69
|
+
* Calculate category score (0-100)
|
|
70
|
+
*/
|
|
71
|
+
function calculateCategoryScore(category) {
|
|
72
|
+
const weights = {
|
|
73
|
+
critical: 40,
|
|
74
|
+
high: 30,
|
|
75
|
+
medium: 20,
|
|
76
|
+
low: 10,
|
|
77
|
+
informational: 0
|
|
78
|
+
};
|
|
79
|
+
|
|
80
|
+
let deductions = 0;
|
|
81
|
+
auditReport.categories[category].issues.forEach(issue => {
|
|
82
|
+
deductions += weights[issue.severity.toLowerCase()] || 0;
|
|
83
|
+
});
|
|
84
|
+
|
|
85
|
+
const score = Math.max(0, 100 - deductions);
|
|
86
|
+
auditReport.categories[category].score = score;
|
|
87
|
+
return score;
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
/**
|
|
91
|
+
* Check secrets management
|
|
92
|
+
*/
|
|
93
|
+
async function auditSecretsManagement() {
|
|
94
|
+
console.log('🔍 Auditing secrets management...');
|
|
95
|
+
|
|
96
|
+
try {
|
|
97
|
+
const secretsManager = getSecretsManager();
|
|
98
|
+
await secretsManager.initialize();
|
|
99
|
+
|
|
100
|
+
// Check required secrets
|
|
101
|
+
const required = secretsManager.config.validation.required;
|
|
102
|
+
const missing = [];
|
|
103
|
+
|
|
104
|
+
for (const key of required) {
|
|
105
|
+
if (!secretsManager.getSecret(key)) {
|
|
106
|
+
missing.push(key);
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
|
|
110
|
+
if (missing.length > 0) {
|
|
111
|
+
addIssue(
|
|
112
|
+
'secretsManagement',
|
|
113
|
+
'HIGH',
|
|
114
|
+
`Missing required secrets: ${missing.join(', ')}`,
|
|
115
|
+
'Set all required API keys in .env file'
|
|
116
|
+
);
|
|
117
|
+
}
|
|
118
|
+
|
|
119
|
+
// Check API key validity
|
|
120
|
+
for (const key of required) {
|
|
121
|
+
const value = secretsManager.getSecret(key);
|
|
122
|
+
if (value && !secretsManager.validateApiKey(key, value)) {
|
|
123
|
+
addIssue(
|
|
124
|
+
'apiKeys',
|
|
125
|
+
'HIGH',
|
|
126
|
+
`Invalid format for ${key}`,
|
|
127
|
+
`Verify ${key} format matches expected pattern`
|
|
128
|
+
);
|
|
129
|
+
}
|
|
130
|
+
}
|
|
131
|
+
|
|
132
|
+
// Check rotation status
|
|
133
|
+
const needRotation = await secretsManager.checkRotationRequired();
|
|
134
|
+
if (needRotation.length > 0) {
|
|
135
|
+
addIssue(
|
|
136
|
+
'apiKeys',
|
|
137
|
+
'MEDIUM',
|
|
138
|
+
`Keys need rotation (90+ days): ${needRotation.join(', ')}`,
|
|
139
|
+
'Run: node scripts/security/rotate-api-keys.js'
|
|
140
|
+
);
|
|
141
|
+
}
|
|
142
|
+
|
|
143
|
+
console.log('✅ Secrets management audit complete');
|
|
144
|
+
} catch (error) {
|
|
145
|
+
addIssue(
|
|
146
|
+
'secretsManagement',
|
|
147
|
+
'CRITICAL',
|
|
148
|
+
`Secrets manager initialization failed: ${error.message}`,
|
|
149
|
+
'Fix secrets manager configuration'
|
|
150
|
+
);
|
|
151
|
+
}
|
|
152
|
+
}
|
|
153
|
+
|
|
154
|
+
/**
|
|
155
|
+
* Check file permissions
|
|
156
|
+
*/
|
|
157
|
+
function auditFilePermissions() {
|
|
158
|
+
console.log('🔍 Auditing file permissions...');
|
|
159
|
+
|
|
160
|
+
const sensitiveFiles = [
|
|
161
|
+
{ path: '.env', expectedMode: '600' },
|
|
162
|
+
{ path: '.env.keys', expectedMode: '600' },
|
|
163
|
+
{ path: 'memory/security', expectedMode: '700', isDir: true }
|
|
164
|
+
];
|
|
165
|
+
|
|
166
|
+
for (const file of sensitiveFiles) {
|
|
167
|
+
const fullPath = path.join(process.cwd(), file.path);
|
|
168
|
+
|
|
169
|
+
if (!fs.existsSync(fullPath)) {
|
|
170
|
+
if (file.path === '.env') {
|
|
171
|
+
addIssue(
|
|
172
|
+
'filePermissions',
|
|
173
|
+
'CRITICAL',
|
|
174
|
+
'.env file not found',
|
|
175
|
+
'Create .env file from .env.secure.template'
|
|
176
|
+
);
|
|
177
|
+
}
|
|
178
|
+
continue;
|
|
179
|
+
}
|
|
180
|
+
|
|
181
|
+
const stats = fs.statSync(fullPath);
|
|
182
|
+
const mode = (stats.mode & 0o777).toString(8);
|
|
183
|
+
|
|
184
|
+
if (mode !== file.expectedMode) {
|
|
185
|
+
const severity = file.path === '.env' ? 'HIGH' : 'MEDIUM';
|
|
186
|
+
addIssue(
|
|
187
|
+
'filePermissions',
|
|
188
|
+
severity,
|
|
189
|
+
`${file.path} has insecure permissions: ${mode} (expected ${file.expectedMode})`,
|
|
190
|
+
`chmod ${file.expectedMode} ${file.path}`
|
|
191
|
+
);
|
|
192
|
+
}
|
|
193
|
+
}
|
|
194
|
+
|
|
195
|
+
console.log('✅ File permissions audit complete');
|
|
196
|
+
}
|
|
197
|
+
|
|
198
|
+
/**
|
|
199
|
+
* Check Git security
|
|
200
|
+
*/
|
|
201
|
+
function auditGitSecurity() {
|
|
202
|
+
console.log('🔍 Auditing Git security...');
|
|
203
|
+
|
|
204
|
+
// Check if git-secrets is installed
|
|
205
|
+
try {
|
|
206
|
+
execSync('git secrets --list', { stdio: 'pipe' });
|
|
207
|
+
console.log(' ✅ git-secrets is installed');
|
|
208
|
+
} catch (error) {
|
|
209
|
+
addIssue(
|
|
210
|
+
'gitSecurity',
|
|
211
|
+
'HIGH',
|
|
212
|
+
'git-secrets is not installed',
|
|
213
|
+
'Run: bash scripts/security/install-git-secrets.sh'
|
|
214
|
+
);
|
|
215
|
+
}
|
|
216
|
+
|
|
217
|
+
// Check if pre-commit hook exists
|
|
218
|
+
const preCommitHook = path.join(process.cwd(), '.git', 'hooks', 'pre-commit');
|
|
219
|
+
if (!fs.existsSync(preCommitHook)) {
|
|
220
|
+
addIssue(
|
|
221
|
+
'gitSecurity',
|
|
222
|
+
'MEDIUM',
|
|
223
|
+
'Pre-commit hook not found',
|
|
224
|
+
'Install git-secrets to enable pre-commit hooks'
|
|
225
|
+
);
|
|
226
|
+
} else {
|
|
227
|
+
// Check if hook is executable
|
|
228
|
+
const stats = fs.statSync(preCommitHook);
|
|
229
|
+
if (!(stats.mode & 0o111)) {
|
|
230
|
+
addIssue(
|
|
231
|
+
'gitSecurity',
|
|
232
|
+
'MEDIUM',
|
|
233
|
+
'Pre-commit hook is not executable',
|
|
234
|
+
`chmod +x ${preCommitHook}`
|
|
235
|
+
);
|
|
236
|
+
}
|
|
237
|
+
}
|
|
238
|
+
|
|
239
|
+
// Check .gitignore includes .env
|
|
240
|
+
const gitignorePath = path.join(process.cwd(), '.gitignore');
|
|
241
|
+
if (fs.existsSync(gitignorePath)) {
|
|
242
|
+
const gitignore = fs.readFileSync(gitignorePath, 'utf8');
|
|
243
|
+
if (!gitignore.includes('.env')) {
|
|
244
|
+
addIssue(
|
|
245
|
+
'gitSecurity',
|
|
246
|
+
'CRITICAL',
|
|
247
|
+
'.env is not in .gitignore',
|
|
248
|
+
'Add .env to .gitignore immediately'
|
|
249
|
+
);
|
|
250
|
+
}
|
|
251
|
+
}
|
|
252
|
+
|
|
253
|
+
console.log('✅ Git security audit complete');
|
|
254
|
+
}
|
|
255
|
+
|
|
256
|
+
/**
|
|
257
|
+
* Check Redis authentication
|
|
258
|
+
*/
|
|
259
|
+
function auditRedisAuth() {
|
|
260
|
+
console.log('🔍 Auditing Redis authentication...');
|
|
261
|
+
|
|
262
|
+
// Check if REDIS_PASSWORD is set
|
|
263
|
+
const redisPassword = process.env.REDIS_PASSWORD;
|
|
264
|
+
|
|
265
|
+
if (!redisPassword) {
|
|
266
|
+
addIssue(
|
|
267
|
+
'redisAuth',
|
|
268
|
+
'CRITICAL',
|
|
269
|
+
'REDIS_PASSWORD not configured',
|
|
270
|
+
'Run: bash scripts/security/setup-redis-auth.sh'
|
|
271
|
+
);
|
|
272
|
+
return;
|
|
273
|
+
}
|
|
274
|
+
|
|
275
|
+
// Check password strength
|
|
276
|
+
if (redisPassword.length < 32) {
|
|
277
|
+
addIssue(
|
|
278
|
+
'redisAuth',
|
|
279
|
+
'HIGH',
|
|
280
|
+
`Redis password too short: ${redisPassword.length} characters (minimum 32)`,
|
|
281
|
+
'Generate stronger password with rotate-api-keys.js'
|
|
282
|
+
);
|
|
283
|
+
}
|
|
284
|
+
|
|
285
|
+
// Test Redis connection (if Redis is available)
|
|
286
|
+
try {
|
|
287
|
+
const redis = require('redis');
|
|
288
|
+
const client = redis.createClient({
|
|
289
|
+
host: 'localhost',
|
|
290
|
+
port: 6379,
|
|
291
|
+
password: redisPassword
|
|
292
|
+
});
|
|
293
|
+
|
|
294
|
+
client.on('connect', () => {
|
|
295
|
+
console.log(' ✅ Redis authentication successful');
|
|
296
|
+
client.quit();
|
|
297
|
+
});
|
|
298
|
+
|
|
299
|
+
client.on('error', (err) => {
|
|
300
|
+
if (err.message.includes('NOAUTH') || err.message.includes('invalid password')) {
|
|
301
|
+
addIssue(
|
|
302
|
+
'redisAuth',
|
|
303
|
+
'CRITICAL',
|
|
304
|
+
'Redis authentication failed - password mismatch',
|
|
305
|
+
'Verify REDIS_PASSWORD matches redis.conf requirepass'
|
|
306
|
+
);
|
|
307
|
+
}
|
|
308
|
+
});
|
|
309
|
+
} catch (error) {
|
|
310
|
+
addIssue(
|
|
311
|
+
'redisAuth',
|
|
312
|
+
'LOW',
|
|
313
|
+
'Could not test Redis connection (Redis may not be installed)',
|
|
314
|
+
null
|
|
315
|
+
);
|
|
316
|
+
}
|
|
317
|
+
|
|
318
|
+
console.log('✅ Redis authentication audit complete');
|
|
319
|
+
}
|
|
320
|
+
|
|
321
|
+
/**
|
|
322
|
+
* Check authentication configuration
|
|
323
|
+
*/
|
|
324
|
+
function auditAuthentication() {
|
|
325
|
+
console.log('🔍 Auditing authentication configuration...');
|
|
326
|
+
|
|
327
|
+
const nodeEnv = process.env.NODE_ENV || 'development';
|
|
328
|
+
|
|
329
|
+
if (nodeEnv === 'production') {
|
|
330
|
+
// Check production security settings
|
|
331
|
+
const securitySettings = [
|
|
332
|
+
{ key: 'CFN_ENABLE_AGENT_AUTH', expected: 'true' },
|
|
333
|
+
{ key: 'CFN_ENABLE_TLS', expected: 'true' },
|
|
334
|
+
{ key: 'CFN_ENABLE_RATE_LIMITING', expected: 'true' }
|
|
335
|
+
];
|
|
336
|
+
|
|
337
|
+
for (const setting of securitySettings) {
|
|
338
|
+
if (process.env[setting.key] !== setting.expected) {
|
|
339
|
+
addIssue(
|
|
340
|
+
'authentication',
|
|
341
|
+
'HIGH',
|
|
342
|
+
`${setting.key} should be '${setting.expected}' in production`,
|
|
343
|
+
`Set ${setting.key}=${setting.expected} in .env`
|
|
344
|
+
);
|
|
345
|
+
}
|
|
346
|
+
}
|
|
347
|
+
}
|
|
348
|
+
|
|
349
|
+
// Check for default/weak tokens
|
|
350
|
+
const dangerousDefaults = [
|
|
351
|
+
{ key: 'CFN_AGENT_AUTH_TOKEN', value: 'your-secret-token-here' },
|
|
352
|
+
{ key: 'JWT_SECRET', value: 'secret' },
|
|
353
|
+
{ key: 'SESSION_SECRET', value: 'secret' }
|
|
354
|
+
];
|
|
355
|
+
|
|
356
|
+
for (const check of dangerousDefaults) {
|
|
357
|
+
if (process.env[check.key] === check.value) {
|
|
358
|
+
addIssue(
|
|
359
|
+
'authentication',
|
|
360
|
+
'CRITICAL',
|
|
361
|
+
`${check.key} is using default/weak value`,
|
|
362
|
+
`Generate strong secret for ${check.key}`
|
|
363
|
+
);
|
|
364
|
+
}
|
|
365
|
+
}
|
|
366
|
+
|
|
367
|
+
console.log('✅ Authentication audit complete');
|
|
368
|
+
}
|
|
369
|
+
|
|
370
|
+
/**
|
|
371
|
+
* Generate audit report
|
|
372
|
+
*/
|
|
373
|
+
function generateReport(args) {
|
|
374
|
+
console.log('\n');
|
|
375
|
+
console.log('═══════════════════════════════════════════════════════════');
|
|
376
|
+
console.log(' SECURITY AUDIT REPORT');
|
|
377
|
+
console.log('═══════════════════════════════════════════════════════════');
|
|
378
|
+
console.log(`Generated: ${auditReport.timestamp}`);
|
|
379
|
+
console.log('');
|
|
380
|
+
|
|
381
|
+
// Calculate scores
|
|
382
|
+
const categories = Object.keys(auditReport.categories);
|
|
383
|
+
const scores = categories.map(cat => calculateCategoryScore(cat));
|
|
384
|
+
auditReport.overallScore = Math.round(scores.reduce((a, b) => a + b, 0) / scores.length);
|
|
385
|
+
|
|
386
|
+
// Determine status
|
|
387
|
+
if (auditReport.summary.critical > 0) {
|
|
388
|
+
auditReport.status = 'CRITICAL';
|
|
389
|
+
} else if (auditReport.summary.high > 0) {
|
|
390
|
+
auditReport.status = 'WARNING';
|
|
391
|
+
} else if (auditReport.summary.medium > 0) {
|
|
392
|
+
auditReport.status = 'ATTENTION';
|
|
393
|
+
} else {
|
|
394
|
+
auditReport.status = 'GOOD';
|
|
395
|
+
}
|
|
396
|
+
|
|
397
|
+
// Overall status
|
|
398
|
+
const statusColors = {
|
|
399
|
+
CRITICAL: '\x1b[31m', // Red
|
|
400
|
+
WARNING: '\x1b[33m', // Yellow
|
|
401
|
+
ATTENTION: '\x1b[36m', // Cyan
|
|
402
|
+
GOOD: '\x1b[32m' // Green
|
|
403
|
+
};
|
|
404
|
+
|
|
405
|
+
const statusColor = statusColors[auditReport.status] || '\x1b[37m';
|
|
406
|
+
console.log(`Status: ${statusColor}${auditReport.status}\x1b[0m`);
|
|
407
|
+
console.log(`Overall Score: ${auditReport.overallScore}/100`);
|
|
408
|
+
console.log('');
|
|
409
|
+
|
|
410
|
+
// Issue summary
|
|
411
|
+
console.log('ISSUE SUMMARY:');
|
|
412
|
+
console.log(` Critical: ${auditReport.summary.critical}`);
|
|
413
|
+
console.log(` High: ${auditReport.summary.high}`);
|
|
414
|
+
console.log(` Medium: ${auditReport.summary.medium}`);
|
|
415
|
+
console.log(` Low: ${auditReport.summary.low}`);
|
|
416
|
+
console.log('');
|
|
417
|
+
|
|
418
|
+
// Category scores
|
|
419
|
+
if (args.detailed) {
|
|
420
|
+
console.log('CATEGORY SCORES:');
|
|
421
|
+
for (const category of categories) {
|
|
422
|
+
const score = auditReport.categories[category].score;
|
|
423
|
+
const scoreColor = score >= 80 ? '\x1b[32m' : score >= 60 ? '\x1b[33m' : '\x1b[31m';
|
|
424
|
+
console.log(` ${category.padEnd(20)}: ${scoreColor}${score}/100\x1b[0m`);
|
|
425
|
+
}
|
|
426
|
+
console.log('');
|
|
427
|
+
}
|
|
428
|
+
|
|
429
|
+
// Issues by category
|
|
430
|
+
for (const category of categories) {
|
|
431
|
+
const cat = auditReport.categories[category];
|
|
432
|
+
if (cat.issues.length === 0) continue;
|
|
433
|
+
|
|
434
|
+
console.log(`\n${category.toUpperCase()}:`);
|
|
435
|
+
cat.issues.forEach((issue, i) => {
|
|
436
|
+
const severityColor = issue.severity === 'CRITICAL' ? '\x1b[31m' :
|
|
437
|
+
issue.severity === 'HIGH' ? '\x1b[33m' :
|
|
438
|
+
issue.severity === 'MEDIUM' ? '\x1b[36m' : '\x1b[37m';
|
|
439
|
+
|
|
440
|
+
console.log(` ${i + 1}. [${severityColor}${issue.severity}\x1b[0m] ${issue.message}`);
|
|
441
|
+
});
|
|
442
|
+
}
|
|
443
|
+
|
|
444
|
+
// Recommendations
|
|
445
|
+
console.log('\n');
|
|
446
|
+
console.log('RECOMMENDATIONS:');
|
|
447
|
+
|
|
448
|
+
let recNum = 1;
|
|
449
|
+
for (const category of categories) {
|
|
450
|
+
const cat = auditReport.categories[category];
|
|
451
|
+
if (cat.recommendations.length === 0) continue;
|
|
452
|
+
|
|
453
|
+
cat.recommendations.forEach(rec => {
|
|
454
|
+
console.log(` ${recNum}. ${rec}`);
|
|
455
|
+
recNum++;
|
|
456
|
+
});
|
|
457
|
+
}
|
|
458
|
+
|
|
459
|
+
console.log('');
|
|
460
|
+
console.log('═══════════════════════════════════════════════════════════');
|
|
461
|
+
|
|
462
|
+
// Save report to file
|
|
463
|
+
const reportPath = path.join(process.cwd(), 'memory', 'security', 'audit-report.json');
|
|
464
|
+
const reportDir = path.dirname(reportPath);
|
|
465
|
+
|
|
466
|
+
if (!fs.existsSync(reportDir)) {
|
|
467
|
+
fs.mkdirSync(reportDir, { recursive: true, mode: 0o700 });
|
|
468
|
+
}
|
|
469
|
+
|
|
470
|
+
fs.writeFileSync(reportPath, JSON.stringify(auditReport, null, 2), { mode: 0o600 });
|
|
471
|
+
console.log(`📄 Report saved to: ${reportPath}`);
|
|
472
|
+
|
|
473
|
+
// Return exit code based on status
|
|
474
|
+
if (auditReport.summary.critical > 0) {
|
|
475
|
+
return 2;
|
|
476
|
+
} else if (auditReport.summary.high > 0) {
|
|
477
|
+
return 1;
|
|
478
|
+
}
|
|
479
|
+
return 0;
|
|
480
|
+
}
|
|
481
|
+
|
|
482
|
+
/**
|
|
483
|
+
* Parse command-line arguments
|
|
484
|
+
*/
|
|
485
|
+
function parseArgs() {
|
|
486
|
+
const args = {
|
|
487
|
+
json: false,
|
|
488
|
+
detailed: false
|
|
489
|
+
};
|
|
490
|
+
|
|
491
|
+
for (let i = 2; i < process.argv.length; i++) {
|
|
492
|
+
const arg = process.argv[i];
|
|
493
|
+
if (arg === '--json') args.json = true;
|
|
494
|
+
if (arg === '--detailed') args.detailed = true;
|
|
495
|
+
}
|
|
496
|
+
|
|
497
|
+
return args;
|
|
498
|
+
}
|
|
499
|
+
|
|
500
|
+
/**
|
|
501
|
+
* Main function
|
|
502
|
+
*/
|
|
503
|
+
async function main() {
|
|
504
|
+
const args = parseArgs();
|
|
505
|
+
|
|
506
|
+
console.log('╔══════════════════════════════════════════════════════════════╗');
|
|
507
|
+
console.log('║ Claude Flow Novice - Security Audit ║');
|
|
508
|
+
console.log('║ Phase 0 Debt Resolution ║');
|
|
509
|
+
console.log('╚══════════════════════════════════════════════════════════════╝');
|
|
510
|
+
console.log('');
|
|
511
|
+
|
|
512
|
+
try {
|
|
513
|
+
// Run all audit checks
|
|
514
|
+
await auditSecretsManagement();
|
|
515
|
+
auditFilePermissions();
|
|
516
|
+
auditGitSecurity();
|
|
517
|
+
auditRedisAuth();
|
|
518
|
+
auditAuthentication();
|
|
519
|
+
|
|
520
|
+
// Generate and display report
|
|
521
|
+
const exitCode = generateReport(args);
|
|
522
|
+
|
|
523
|
+
// JSON output
|
|
524
|
+
if (args.json) {
|
|
525
|
+
console.log('\nJSON OUTPUT:');
|
|
526
|
+
console.log(JSON.stringify(auditReport, null, 2));
|
|
527
|
+
}
|
|
528
|
+
|
|
529
|
+
process.exit(exitCode);
|
|
530
|
+
} catch (error) {
|
|
531
|
+
console.error('\n❌ Audit failed:', error.message);
|
|
532
|
+
console.error(error.stack);
|
|
533
|
+
process.exit(3);
|
|
534
|
+
}
|
|
535
|
+
}
|
|
536
|
+
|
|
537
|
+
// Run main function
|
|
538
|
+
main();
|