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.
Files changed (288) hide show
  1. package/package.json +9 -8
  2. package/scripts/.claude-flow/metrics/agent-metrics.json +1 -0
  3. package/scripts/.claude-flow/metrics/performance.json +9 -0
  4. package/scripts/.claude-flow/metrics/task-metrics.json +10 -0
  5. package/scripts/CLEANUP_OPTIMIZATION_REPORT.json +312 -0
  6. package/scripts/CLEANUP_PERFORMANCE_OPTIMIZATION.md +387 -0
  7. package/scripts/CLEANUP_QUICK_START.md +268 -0
  8. package/scripts/CLEANUP_TEST_RESULTS.md +205 -0
  9. package/scripts/README.md +339 -0
  10. package/scripts/ace-query.sh +384 -0
  11. package/scripts/agent-token-analysis.js +430 -0
  12. package/scripts/auto-setup.js +332 -0
  13. package/scripts/build/README.md +167 -0
  14. package/scripts/build/build-config.js +27 -0
  15. package/scripts/build/build-prompt-copier.sh +30 -0
  16. package/scripts/build/performance-monitor.js +869 -0
  17. package/scripts/build/prepare-publish.js +150 -0
  18. package/scripts/build/typescript-fixer.js +621 -0
  19. package/scripts/build/unified-builder.sh +428 -0
  20. package/scripts/build/update-bin-version.js +32 -0
  21. package/scripts/build/validate-agents.js +238 -0
  22. package/scripts/build-index.js +43 -0
  23. package/scripts/build-orchestrator.js +320 -0
  24. package/scripts/check-routing-stats.cjs +122 -0
  25. package/scripts/ci-validation.js +375 -0
  26. package/scripts/cleanup-blocking-coordination.sh +420 -0
  27. package/scripts/cleanup-idle-sessions.sh +59 -0
  28. package/scripts/collect-build-metrics.js +65 -0
  29. package/scripts/demo/README.md +79 -0
  30. package/scripts/demo/autoscaling-demo-simplified.js +963 -0
  31. package/scripts/demo/comprehensive-dashboard-test.js +693 -0
  32. package/scripts/demo/confidence-log.js +87 -0
  33. package/scripts/demo/confidence-report.js +82 -0
  34. package/scripts/demo/demo-multi-swarm-coordination.js +325 -0
  35. package/scripts/demo/demo-production-deployment.js +399 -0
  36. package/scripts/demo/demo-visualization-system.js +149 -0
  37. package/scripts/demo/performance-analysis.cjs +71 -0
  38. package/scripts/demo/performance-analysis.js +71 -0
  39. package/scripts/demo/test-autoscaling-demo.js +314 -0
  40. package/scripts/dependency-optimizer.js +349 -0
  41. package/scripts/dependency-security-assessment.js +331 -0
  42. package/scripts/deploy-sdk.sh +176 -0
  43. package/scripts/deployment-readiness-report.json +179 -0
  44. package/scripts/dev/README.md +264 -0
  45. package/scripts/dev/claude-flow-wrapper.sh +35 -0
  46. package/scripts/dev/claude-monitor.py +419 -0
  47. package/scripts/dev/claude-sparc.sh +562 -0
  48. package/scripts/dev/claude-wrapper.sh +17 -0
  49. package/scripts/dev/demo-phase3-compliance.js +172 -0
  50. package/scripts/dev/demo-task-system.ts +224 -0
  51. package/scripts/dev/deployment-validator.js +315 -0
  52. package/scripts/dev/spawn-claude-terminal.sh +32 -0
  53. package/scripts/dev/start-portal.sh +506 -0
  54. package/scripts/dev/start-web-ui.js +15 -0
  55. package/scripts/dev/stop-portal.sh +311 -0
  56. package/scripts/dev/validate-examples.ts +288 -0
  57. package/scripts/dev/validate-phase2.cjs +451 -0
  58. package/scripts/dev/validate-phase2.js +785 -0
  59. package/scripts/dev/validate-phase3.cjs +208 -0
  60. package/scripts/dev/validate-security-remediation.js +1 -0
  61. package/scripts/ecosystem.config.cjs +90 -0
  62. package/scripts/fix-js-extensions.js +167 -0
  63. package/scripts/generate-basic-types.js +73 -0
  64. package/scripts/generate-changelog.js +318 -0
  65. package/scripts/git-hooks/pre-commit.sh +143 -0
  66. package/scripts/health-checks.js +634 -0
  67. package/scripts/hook-wrapper.sh +54 -0
  68. package/scripts/install/README.md +375 -0
  69. package/scripts/install/REDIS_SETUP_VALIDATION.json +245 -0
  70. package/scripts/install/check-prerequisites.js +303 -0
  71. package/scripts/install/config-wizard.js +606 -0
  72. package/scripts/install/dependency-checker.js +385 -0
  73. package/scripts/install/health-check.js +765 -0
  74. package/scripts/install/install.js +256 -0
  75. package/scripts/install/installation-benchmark.js +461 -0
  76. package/scripts/install/quick-install.js +720 -0
  77. package/scripts/install/quick-start-wizard.js +295 -0
  78. package/scripts/install/redis-cli.js +289 -0
  79. package/scripts/install/redis-install-guides.md +407 -0
  80. package/scripts/install/redis-setup.js +559 -0
  81. package/scripts/install/redis-test.js +278 -0
  82. package/scripts/install/service-manager.js +672 -0
  83. package/scripts/install/setup.js +832 -0
  84. package/scripts/install/uninstall.js +526 -0
  85. package/scripts/install/update.js +461 -0
  86. package/scripts/install-pre-commit-hook.sh +127 -0
  87. package/scripts/legacy/README.md +272 -0
  88. package/scripts/legacy/batch-fix-ts.sh +54 -0
  89. package/scripts/legacy/build-migration.sh +105 -0
  90. package/scripts/legacy/build-monitor.js +209 -0
  91. package/scripts/legacy/build-with-filter.sh +84 -0
  92. package/scripts/legacy/build-workaround.sh +71 -0
  93. package/scripts/legacy/fix-ts-advanced.js +358 -0
  94. package/scripts/legacy/fix-ts-final.sh +50 -0
  95. package/scripts/legacy/fix-ts-targeted.sh +49 -0
  96. package/scripts/legacy/fix-typescript-errors.js +305 -0
  97. package/scripts/legacy/force-build.sh +63 -0
  98. package/scripts/legacy/optimize-performance.js +400 -0
  99. package/scripts/legacy/performance-monitor.js +263 -0
  100. package/scripts/legacy/performance-monitoring.js +532 -0
  101. package/scripts/legacy/performance-test-runner.js +645 -0
  102. package/scripts/legacy/quick-fix-ts.js +281 -0
  103. package/scripts/legacy/safe-build.sh +63 -0
  104. package/scripts/memory-monitor-coordinator.js +322 -0
  105. package/scripts/migrate-to-sdk.sh +520 -0
  106. package/scripts/migration/QUICK-START.md +189 -0
  107. package/scripts/migration/QUICK-START.md.backup-1760135091363 +189 -0
  108. package/scripts/migration/README.md +464 -0
  109. package/scripts/migration/TASK-1.3.2-COMPLETION-REPORT.md +500 -0
  110. package/scripts/migration/TASK-1.3.2-COMPLETION-REPORT.md.backup-1760135091348 +500 -0
  111. package/scripts/migration/UPDATE-PATHS-README.md +464 -0
  112. package/scripts/migration/UPDATE-PATHS-README.md.backup-1760135091337 +464 -0
  113. package/scripts/migration/example-patterns.json +19 -0
  114. package/scripts/migration/install-arm64.js +78 -0
  115. package/scripts/migration/install.js +83 -0
  116. package/scripts/migration/migrate-hooks.js +173 -0
  117. package/scripts/migration/migration-examples.ts +318 -0
  118. package/scripts/migration/reorganize-workspace.js +504 -0
  119. package/scripts/migration/test-update-paths.js +359 -0
  120. package/scripts/migration/update-paths.js +664 -0
  121. package/scripts/migration/validate-migration.js +647 -0
  122. package/scripts/monitor-loop.sh +65 -0
  123. package/scripts/monitor-memory.sh +47 -0
  124. package/scripts/monitor-migration.js +339 -0
  125. package/scripts/monitor.py +43 -0
  126. package/scripts/monitoring/README.md +178 -0
  127. package/scripts/monitoring/alert-monitor.sh +220 -0
  128. package/scripts/monitoring/analyze-resources.sh +199 -0
  129. package/scripts/monitoring/dashboards/rate-limiting-dashboard.json +211 -0
  130. package/scripts/monitoring/dynamic-monitor.sh +85 -0
  131. package/scripts/monitoring/launch-stability-test.sh +184 -0
  132. package/scripts/monitoring/monitor-test.sh +93 -0
  133. package/scripts/monitoring/pre-test-validation.sh +208 -0
  134. package/scripts/monitoring/quick-test-alerting.sh +118 -0
  135. package/scripts/monitoring/quick-test-rate-limiting.sh +206 -0
  136. package/scripts/monitoring/rate-limiting-monitor.sh +380 -0
  137. package/scripts/monitoring/resource-monitor.sh +126 -0
  138. package/scripts/monitoring/stability-monitor.js +429 -0
  139. package/scripts/monitoring/test-monitor-quick.sh +54 -0
  140. package/scripts/monitoring/view-alerts.sh +307 -0
  141. package/scripts/npm-metrics-collector.js +482 -0
  142. package/scripts/npm-package-validation.cjs +299 -0
  143. package/scripts/optimization/build-optimizer.js +438 -0
  144. package/scripts/optimization/config-validator.js +761 -0
  145. package/scripts/optimization/test-optimization.js +432 -0
  146. package/scripts/optimization/unified-activation.js +839 -0
  147. package/scripts/optimize-package-swarm.js +54 -0
  148. package/scripts/performance/ACTIVATION_COMMANDS.md +292 -0
  149. package/scripts/performance/sqlite-enhanced-activation.sh +583 -0
  150. package/scripts/performance/test-enhanced-backend.sh +504 -0
  151. package/scripts/performance-monitor.js +644 -0
  152. package/scripts/performance-test-runner.js +698 -0
  153. package/scripts/post-deployment-monitoring.js +350 -0
  154. package/scripts/post-edit-pipeline.js +2091 -0
  155. package/scripts/post-install-claude-md.js +78 -0
  156. package/scripts/postinstall.js +79 -0
  157. package/scripts/pre-publish-validation.cjs +212 -0
  158. package/scripts/pre-publish-validation.js +429 -0
  159. package/scripts/redis-lua/cleanup-blocking-coordination.lua +198 -0
  160. package/scripts/release-announcement.js +425 -0
  161. package/scripts/release-notification.js +248 -0
  162. package/scripts/release-rollback.js +376 -0
  163. package/scripts/release-validation.js +460 -0
  164. package/scripts/rollback-sdk.sh +66 -0
  165. package/scripts/run-production-validation.ts +590 -0
  166. package/scripts/run-stability-validation.sh +687 -0
  167. package/scripts/security/README.md +339 -0
  168. package/scripts/security/deployment-validation.cjs +279 -0
  169. package/scripts/security/envelope-encryption-confidence-report.cjs +422 -0
  170. package/scripts/security/install-git-hooks.sh +132 -0
  171. package/scripts/security/install-git-secrets.sh +295 -0
  172. package/scripts/security/rotate-api-keys.js +469 -0
  173. package/scripts/security/ruv-swarm-safe.js +74 -0
  174. package/scripts/security/security-audit.cjs +538 -0
  175. package/scripts/security/setup-redis-auth.sh +397 -0
  176. package/scripts/security/validate-envelope-encryption.cjs +340 -0
  177. package/scripts/security-scan.js +492 -0
  178. package/scripts/src/web/frontend/.claude-flow/metrics/agent-metrics.json +1 -0
  179. package/scripts/src/web/frontend/.claude-flow/metrics/performance.json +9 -0
  180. package/scripts/src/web/frontend/.claude-flow/metrics/task-metrics.json +10 -0
  181. package/scripts/switch-api.sh +158 -0
  182. package/scripts/sync-agents.js +290 -0
  183. package/scripts/test/50-agent-test.js +625 -0
  184. package/scripts/test/NEW_STABILITY_TEST_GUIDE.md +407 -0
  185. package/scripts/test/README.md +236 -0
  186. package/scripts/test/STABILITY_TEST_EXAMPLE.md +347 -0
  187. package/scripts/test/STABILITY_TEST_README.md +480 -0
  188. package/scripts/test/agent-worker.js +309 -0
  189. package/scripts/test/ai-coordination-test.js +650 -0
  190. package/scripts/test/ai-mesh-coordination-test.js +416 -0
  191. package/scripts/test/check-links.ts +274 -0
  192. package/scripts/test/check-performance-regression.ts +168 -0
  193. package/scripts/test/cli-agent-coordination-test.js +313 -0
  194. package/scripts/test/coordinator-multilingual-test.js +396 -0
  195. package/scripts/test/coordinator-transparency-demo.js +585 -0
  196. package/scripts/test/coverage-report.ts +692 -0
  197. package/scripts/test/generate-swarm-tests.js +633 -0
  198. package/scripts/test/integration-test-validation.cjs +253 -0
  199. package/scripts/test/load-test-swarm.js +576 -0
  200. package/scripts/test/mesh-coordination-zero-overlap-test.js +740 -0
  201. package/scripts/test/multilingual-hello-world-test.js +390 -0
  202. package/scripts/test/quick-multilingual-demo.js +464 -0
  203. package/scripts/test/real-agent-test.js +312 -0
  204. package/scripts/test/run-phase3-compliance-tests.js +427 -0
  205. package/scripts/test/run-stability-test-examples.sh +292 -0
  206. package/scripts/test/stability-results/stability-metrics.jsonl +83 -0
  207. package/scripts/test/stability-results/stability-test-report.json +128 -0
  208. package/scripts/test/stability-results/stability-test.log +1827 -0
  209. package/scripts/test/stability-test-50-agents.js +734 -0
  210. package/scripts/test/test-batch-tasks.ts +29 -0
  211. package/scripts/test/test-byzantine-resolution.js +246 -0
  212. package/scripts/test/test-claude-spawn-options.sh +63 -0
  213. package/scripts/test/test-cli-wizard.js +331 -0
  214. package/scripts/test/test-comprehensive.js +401 -0
  215. package/scripts/test/test-coordination-features.ts +238 -0
  216. package/scripts/test/test-fallback-systems.js +276 -0
  217. package/scripts/test/test-init-command.ts +302 -0
  218. package/scripts/test/test-mcp.ts +251 -0
  219. package/scripts/test/test-runner.ts +568 -0
  220. package/scripts/test/test-swarm-integration.sh +92 -0
  221. package/scripts/test/test-swarm.ts +142 -0
  222. package/scripts/test/validation-summary.ts +408 -0
  223. package/scripts/test-cleanup-performance.sh +416 -0
  224. package/scripts/test-dashboard-auth.cjs +203 -0
  225. package/scripts/test-docker-deployment.sh +207 -0
  226. package/scripts/test-npm-package.cjs +167 -0
  227. package/scripts/test-provider-routing.cjs +226 -0
  228. package/scripts/test-routing-telemetry.cjs +147 -0
  229. package/scripts/test-runner.cjs +154 -0
  230. package/scripts/test-zai-10k.cjs +81 -0
  231. package/scripts/test-zai-api.cjs +191 -0
  232. package/scripts/test-zai-diagnostic.cjs +151 -0
  233. package/scripts/test-zai-final.cjs +128 -0
  234. package/scripts/test-zai-with-env.cjs +85 -0
  235. package/scripts/utils/README.md +261 -0
  236. package/scripts/utils/clean-build-artifacts.sh +94 -0
  237. package/scripts/utils/cleanup-root.sh +69 -0
  238. package/scripts/utils/fix-cliffy-imports.js +307 -0
  239. package/scripts/utils/fix-duplicate-imports.js +114 -0
  240. package/scripts/utils/fix-error-handling.cjs +70 -0
  241. package/scripts/utils/fix-import-paths.js +104 -0
  242. package/scripts/utils/fix-imports.js +116 -0
  243. package/scripts/utils/fix-shebang.js +78 -0
  244. package/scripts/utils/fix-test-modules.js +27 -0
  245. package/scripts/utils/fix-timezone-issue-246.js +200 -0
  246. package/scripts/utils/fix-ts-comprehensive.py +182 -0
  247. package/scripts/utils/fix-ts-targeted-batch.js +250 -0
  248. package/scripts/utils/remove-benchmark-conflicts.sh +140 -0
  249. package/scripts/utils/simple-test-fixer.js +190 -0
  250. package/scripts/utils/validate-metrics-structure.cjs +144 -0
  251. package/scripts/validate-agent-hooks.js +506 -0
  252. package/scripts/validate-changelog.js +241 -0
  253. package/scripts/validate-coordination-cli.js +69 -0
  254. package/scripts/validate-coordination-toggle-integration.cjs +501 -0
  255. package/scripts/validate-docker-infrastructure.sh +502 -0
  256. package/scripts/validate-entry-points.js +300 -0
  257. package/scripts/validate-stage3-performance.ts +377 -0
  258. package/scripts/validate-template-bundling.js +180 -0
  259. package/scripts/validation/README.md +33 -0
  260. package/scripts/validation/acl-security-validation.cjs +214 -0
  261. package/scripts/validation/acl-security-validation.js +402 -0
  262. package/scripts/validation/byzantine-verification.js +407 -0
  263. package/scripts/validation/final-phase-2-consensus.cjs +219 -0
  264. package/scripts/validation/final-security-validation.js +791 -0
  265. package/scripts/validation/final-wasm-validation.cjs +840 -0
  266. package/scripts/validation/integration-test-analysis.js +105 -0
  267. package/scripts/validation/phase-0-comprehensive-validation.js +474 -0
  268. package/scripts/validation/phase-0-consensus-report.js +139 -0
  269. package/scripts/validation/phase-0-final-report.js +112 -0
  270. package/scripts/validation/phase-0-redis-consensus-report.js +129 -0
  271. package/scripts/validation/phase-0-validation-improved.js +490 -0
  272. package/scripts/validation/phase-0-validation-test.js +65 -0
  273. package/scripts/validation/phase-1-consensus-report.cjs +342 -0
  274. package/scripts/validation/phase-1-consensus-validation.cjs +551 -0
  275. package/scripts/validation/phase-1-consensus-validation.js +551 -0
  276. package/scripts/validation/phase-2-consensus-report.cjs +186 -0
  277. package/scripts/validation/phase-2-validation.cjs +171 -0
  278. package/scripts/validation/phase-2-validation.js +171 -0
  279. package/scripts/validation/phase-4-consensus-report.js +181 -0
  280. package/scripts/validation/phase-4-final-validation.js +351 -0
  281. package/scripts/validation/phase-5-consensus-report.cjs +113 -0
  282. package/scripts/validation/phase-5-consensus-report.js +113 -0
  283. package/scripts/validation/security-analysis.js +49 -0
  284. package/scripts/validation/security-validation.js +492 -0
  285. package/scripts/validation/simple-security-validation.js +464 -0
  286. package/scripts/verify-installation.js +112 -0
  287. package/scripts/verify-mcp-server.js +86 -0
  288. 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();