claude-flow-novice 1.3.0 → 1.3.2

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 (305) hide show
  1. package/.claude-flow-novice/preferences/generation.json +147 -0
  2. package/.claude-flow-novice/preferences/language-configs/javascript.json +51 -0
  3. package/.claude-flow-novice/preferences/language-configs/python.json +50 -0
  4. package/.claude-flow-novice/preferences/language-configs/rust.json +237 -0
  5. package/.claude-flow-novice/preferences/language-configs/typescript.json +54 -0
  6. package/.claude-flow-novice/preferences/project-local.json +91 -0
  7. package/.claude-flow-novice/preferences/resource-delegation.json +120 -0
  8. package/.claude-flow-novice/preferences/team-shared.json +195 -0
  9. package/.claude-flow-novice/preferences/user-global.json +247 -0
  10. package/.claude-flow-novice/templates/claude-md-templates/CLAUDE-JAVASCRIPT.md +769 -0
  11. package/.claude-flow-novice/templates/claude-md-templates/CLAUDE-PYTHON.md +1214 -0
  12. package/.claude-flow-novice/templates/claude-md-templates/CLAUDE-RUST.md +475 -0
  13. package/.claude-flow-novice/templates/claude-md-templates/CLAUDE-TYPESCRIPT.md +851 -0
  14. package/.claude-flow-novice/templates/claude-md-templates/README.md +263 -0
  15. package/CLAUDE.md +81 -0
  16. package/README-NPM.md +0 -0
  17. package/package.json +11 -7
  18. package/scripts/build/README.md +167 -0
  19. package/scripts/build/build-config.js +27 -0
  20. package/scripts/build/build-prompt-copier.sh +30 -0
  21. package/scripts/build/performance-monitor.js +869 -0
  22. package/scripts/build/prepare-publish.js +150 -0
  23. package/scripts/build/typescript-fixer.js +621 -0
  24. package/scripts/build/unified-builder.sh +428 -0
  25. package/scripts/build/update-bin-version.js +32 -0
  26. package/scripts/dev/README.md +264 -0
  27. package/scripts/dev/claude-flow-wrapper.sh +35 -0
  28. package/scripts/dev/claude-monitor.py +419 -0
  29. package/scripts/dev/claude-sparc.sh +562 -0
  30. package/scripts/dev/claude-wrapper.sh +17 -0
  31. package/scripts/dev/demo-phase3-compliance.js +172 -0
  32. package/scripts/dev/demo-task-system.ts +224 -0
  33. package/scripts/dev/deployment-validator.js +315 -0
  34. package/scripts/dev/spawn-claude-terminal.sh +32 -0
  35. package/scripts/dev/start-portal.sh +506 -0
  36. package/scripts/dev/start-web-ui.js +15 -0
  37. package/scripts/dev/stop-portal.sh +311 -0
  38. package/scripts/dev/validate-examples.ts +288 -0
  39. package/scripts/dev/validate-phase2.cjs +451 -0
  40. package/scripts/dev/validate-phase2.js +785 -0
  41. package/scripts/dev/validate-phase3.cjs +208 -0
  42. package/scripts/dev/validate-security-remediation.js +1 -0
  43. package/scripts/legacy/README.md +272 -0
  44. package/scripts/legacy/batch-fix-ts.sh +54 -0
  45. package/scripts/legacy/build-migration.sh +105 -0
  46. package/scripts/legacy/build-monitor.js +209 -0
  47. package/scripts/legacy/build-with-filter.sh +84 -0
  48. package/scripts/legacy/build-workaround.sh +71 -0
  49. package/scripts/legacy/fix-ts-advanced.js +358 -0
  50. package/scripts/legacy/fix-ts-final.sh +50 -0
  51. package/scripts/legacy/fix-ts-targeted.sh +49 -0
  52. package/scripts/legacy/fix-typescript-errors.js +305 -0
  53. package/scripts/legacy/force-build.sh +63 -0
  54. package/scripts/legacy/optimize-performance.js +400 -0
  55. package/scripts/legacy/performance-monitor.js +263 -0
  56. package/scripts/legacy/performance-monitoring.js +532 -0
  57. package/scripts/legacy/performance-test-runner.js +645 -0
  58. package/scripts/legacy/quick-fix-ts.js +281 -0
  59. package/scripts/legacy/safe-build.sh +63 -0
  60. package/scripts/migration/README.md +434 -0
  61. package/scripts/migration/install-arm64.js +78 -0
  62. package/scripts/migration/install.js +83 -0
  63. package/scripts/migration/migrate-hooks.js +173 -0
  64. package/scripts/migration/migration-examples.ts +318 -0
  65. package/scripts/optimization/build-optimizer.js +438 -0
  66. package/scripts/optimization/config-validator.js +761 -0
  67. package/scripts/optimization/test-optimization.js +432 -0
  68. package/scripts/optimization/unified-activation.js +839 -0
  69. package/scripts/performance/ACTIVATION_COMMANDS.md +292 -0
  70. package/scripts/performance/sqlite-enhanced-activation.sh +583 -0
  71. package/scripts/performance/test-enhanced-backend.sh +504 -0
  72. package/scripts/performance-test-runner.js +698 -0
  73. package/scripts/security/README.md +339 -0
  74. package/scripts/security/install-git-hooks.sh +132 -0
  75. package/scripts/security/ruv-swarm-safe.js +74 -0
  76. package/scripts/test/README.md +236 -0
  77. package/scripts/test/check-links.ts +274 -0
  78. package/scripts/test/check-performance-regression.ts +168 -0
  79. package/scripts/test/coverage-report.ts +692 -0
  80. package/scripts/test/generate-swarm-tests.js +633 -0
  81. package/scripts/test/integration-test-validation.cjs +253 -0
  82. package/scripts/test/load-test-swarm.js +576 -0
  83. package/scripts/test/run-phase3-compliance-tests.js +427 -0
  84. package/scripts/test/test-batch-tasks.ts +29 -0
  85. package/scripts/test/test-byzantine-resolution.js +246 -0
  86. package/scripts/test/test-claude-spawn-options.sh +63 -0
  87. package/scripts/test/test-cli-wizard.js +331 -0
  88. package/scripts/test/test-comprehensive.js +401 -0
  89. package/scripts/test/test-coordination-features.ts +238 -0
  90. package/scripts/test/test-fallback-systems.js +276 -0
  91. package/scripts/test/test-init-command.ts +302 -0
  92. package/scripts/test/test-mcp.ts +251 -0
  93. package/scripts/test/test-runner.ts +568 -0
  94. package/scripts/test/test-swarm-integration.sh +92 -0
  95. package/scripts/test/test-swarm.ts +142 -0
  96. package/scripts/test/validation-summary.ts +408 -0
  97. package/scripts/utils/README.md +261 -0
  98. package/scripts/utils/clean-build-artifacts.sh +94 -0
  99. package/scripts/utils/cleanup-root.sh +69 -0
  100. package/scripts/utils/fix-cliffy-imports.js +307 -0
  101. package/scripts/utils/fix-duplicate-imports.js +114 -0
  102. package/scripts/utils/fix-error-handling.cjs +70 -0
  103. package/scripts/utils/fix-import-paths.js +104 -0
  104. package/scripts/utils/fix-imports.js +116 -0
  105. package/scripts/utils/fix-shebang.js +78 -0
  106. package/scripts/utils/fix-test-modules.js +27 -0
  107. package/scripts/utils/fix-timezone-issue-246.js +200 -0
  108. package/scripts/utils/fix-ts-comprehensive.py +182 -0
  109. package/scripts/utils/fix-ts-targeted-batch.js +250 -0
  110. package/scripts/utils/remove-benchmark-conflicts.sh +140 -0
  111. package/scripts/utils/simple-test-fixer.js +190 -0
  112. package/scripts/utils/validate-metrics-structure.cjs +144 -0
  113. package/scripts/verify-mcp-server.js +86 -0
  114. package/src/cli/simple-commands/__tests__/agent.test.js +291 -0
  115. package/src/cli/simple-commands/__tests__/memory.test.js +8 -0
  116. package/src/cli/simple-commands/__tests__/swarm.test.js +371 -0
  117. package/src/cli/simple-commands/__tests__/task.test.js +8 -0
  118. package/src/cli/simple-commands/agent.js +216 -0
  119. package/src/cli/simple-commands/analysis.js +570 -0
  120. package/src/cli/simple-commands/automation-executor.js +1603 -0
  121. package/src/cli/simple-commands/automation.js +627 -0
  122. package/src/cli/simple-commands/batch-manager.js +338 -0
  123. package/src/cli/simple-commands/claude-telemetry.js +311 -0
  124. package/src/cli/simple-commands/claude-track.js +102 -0
  125. package/src/cli/simple-commands/concurrent-display.js +348 -0
  126. package/src/cli/simple-commands/config.js +319 -0
  127. package/src/cli/simple-commands/coordination.js +307 -0
  128. package/src/cli/simple-commands/enhanced-ui-views.js +654 -0
  129. package/src/cli/simple-commands/enhanced-webui-complete.js +1038 -0
  130. package/src/cli/simple-commands/fix-hook-variables.js +363 -0
  131. package/src/cli/simple-commands/github/gh-coordinator.js +605 -0
  132. package/src/cli/simple-commands/github/github-api.js +624 -0
  133. package/src/cli/simple-commands/github/init.js +543 -0
  134. package/src/cli/simple-commands/github.js +377 -0
  135. package/src/cli/simple-commands/goal.js +145 -0
  136. package/src/cli/simple-commands/hive-mind/auto-save-middleware.js +311 -0
  137. package/src/cli/simple-commands/hive-mind/communication.js +740 -0
  138. package/src/cli/simple-commands/hive-mind/core.js +1031 -0
  139. package/src/cli/simple-commands/hive-mind/db-optimizer.js +872 -0
  140. package/src/cli/simple-commands/hive-mind/mcp-wrapper.js +1364 -0
  141. package/src/cli/simple-commands/hive-mind/memory.js +1292 -0
  142. package/src/cli/simple-commands/hive-mind/performance-optimizer.js +618 -0
  143. package/src/cli/simple-commands/hive-mind/performance-test.js +373 -0
  144. package/src/cli/simple-commands/hive-mind/queen.js +809 -0
  145. package/src/cli/simple-commands/hive-mind/session-manager.js +1223 -0
  146. package/src/cli/simple-commands/hive-mind-optimize.js +361 -0
  147. package/src/cli/simple-commands/hive-mind-wizard.js +281 -0
  148. package/src/cli/simple-commands/hive-mind.js +3112 -0
  149. package/src/cli/simple-commands/hive.js +140 -0
  150. package/src/cli/simple-commands/hook-safety.js +671 -0
  151. package/src/cli/simple-commands/hooks.js +1268 -0
  152. package/src/cli/simple-commands/init/.claude/checkpoints/1756224542.json +7 -0
  153. package/src/cli/simple-commands/init/.claude/checkpoints/1756224544.json +8 -0
  154. package/src/cli/simple-commands/init/README.md +106 -0
  155. package/src/cli/simple-commands/init/VALIDATION_ROLLBACK.md +488 -0
  156. package/src/cli/simple-commands/init/agent-copier.js +347 -0
  157. package/src/cli/simple-commands/init/batch-init.js +663 -0
  158. package/src/cli/simple-commands/init/claude-commands/claude-flow-commands.js +438 -0
  159. package/src/cli/simple-commands/init/claude-commands/optimized-claude-flow-commands.js +876 -0
  160. package/src/cli/simple-commands/init/claude-commands/optimized-slash-commands.js +356 -0
  161. package/src/cli/simple-commands/init/claude-commands/optimized-sparc-commands.js +501 -0
  162. package/src/cli/simple-commands/init/claude-commands/slash-commands.js +57 -0
  163. package/src/cli/simple-commands/init/claude-commands/sparc-commands.js +296 -0
  164. package/src/cli/simple-commands/init/copy-revised-templates.js +175 -0
  165. package/src/cli/simple-commands/init/executable-wrapper.js +122 -0
  166. package/src/cli/simple-commands/init/gitignore-updater.js +137 -0
  167. package/src/cli/simple-commands/init/help.js +110 -0
  168. package/src/cli/simple-commands/init/hive-mind-init.js +749 -0
  169. package/src/cli/simple-commands/init/index.js +1953 -0
  170. package/src/cli/simple-commands/init/performance-monitor.js +344 -0
  171. package/src/cli/simple-commands/init/rollback/backup-manager.js +542 -0
  172. package/src/cli/simple-commands/init/rollback/index.js +399 -0
  173. package/src/cli/simple-commands/init/rollback/recovery-manager.js +778 -0
  174. package/src/cli/simple-commands/init/rollback/rollback-executor.js +521 -0
  175. package/src/cli/simple-commands/init/rollback/state-tracker.js +486 -0
  176. package/src/cli/simple-commands/init/sparc/roo-readme.js +61 -0
  177. package/src/cli/simple-commands/init/sparc/roomodes-config.js +102 -0
  178. package/src/cli/simple-commands/init/sparc/workflows.js +40 -0
  179. package/src/cli/simple-commands/init/sparc-structure.js +68 -0
  180. package/src/cli/simple-commands/init/template-copier.js +640 -0
  181. package/src/cli/simple-commands/init/templates/CLAUDE.md +1185 -0
  182. package/src/cli/simple-commands/init/templates/CLAUDE.md.optimized +265 -0
  183. package/src/cli/simple-commands/init/templates/claude-flow-universal +81 -0
  184. package/src/cli/simple-commands/init/templates/claude-flow.bat +18 -0
  185. package/src/cli/simple-commands/init/templates/claude-flow.ps1 +24 -0
  186. package/src/cli/simple-commands/init/templates/claude-md.js +1101 -0
  187. package/src/cli/simple-commands/init/templates/commands/analysis/bottleneck-detect.md +162 -0
  188. package/src/cli/simple-commands/init/templates/commands/automation/auto-agent.md +122 -0
  189. package/src/cli/simple-commands/init/templates/commands/coordination/swarm-init.md +85 -0
  190. package/src/cli/simple-commands/init/templates/commands/github/github-swarm.md +121 -0
  191. package/src/cli/simple-commands/init/templates/commands/helpers/standard-checkpoint-hooks.sh +179 -0
  192. package/src/cli/simple-commands/init/templates/commands/hooks/notification.md +113 -0
  193. package/src/cli/simple-commands/init/templates/commands/hooks/post-command.md +116 -0
  194. package/src/cli/simple-commands/init/templates/commands/hooks/post-edit.md +117 -0
  195. package/src/cli/simple-commands/init/templates/commands/hooks/post-task.md +112 -0
  196. package/src/cli/simple-commands/init/templates/commands/hooks/pre-command.md +113 -0
  197. package/src/cli/simple-commands/init/templates/commands/hooks/pre-edit.md +113 -0
  198. package/src/cli/simple-commands/init/templates/commands/hooks/pre-search.md +112 -0
  199. package/src/cli/simple-commands/init/templates/commands/hooks/pre-task.md +111 -0
  200. package/src/cli/simple-commands/init/templates/commands/hooks/session-end.md +118 -0
  201. package/src/cli/simple-commands/init/templates/commands/hooks/session-restore.md +118 -0
  202. package/src/cli/simple-commands/init/templates/commands/hooks/session-start.md +117 -0
  203. package/src/cli/simple-commands/init/templates/coordination-md.js +340 -0
  204. package/src/cli/simple-commands/init/templates/coordination.md +16 -0
  205. package/src/cli/simple-commands/init/templates/enhanced-templates.js +2347 -0
  206. package/src/cli/simple-commands/init/templates/github-safe-enhanced.js +331 -0
  207. package/src/cli/simple-commands/init/templates/github-safe.js +106 -0
  208. package/src/cli/simple-commands/init/templates/memory-bank-md.js +259 -0
  209. package/src/cli/simple-commands/init/templates/memory-bank.md +16 -0
  210. package/src/cli/simple-commands/init/templates/readme-files.js +72 -0
  211. package/src/cli/simple-commands/init/templates/safe-hook-patterns.js +430 -0
  212. package/src/cli/simple-commands/init/templates/settings.json +109 -0
  213. package/src/cli/simple-commands/init/templates/settings.json.enhanced +35 -0
  214. package/src/cli/simple-commands/init/templates/sparc-modes.js +1401 -0
  215. package/src/cli/simple-commands/init/templates/verification-claude-md.js +432 -0
  216. package/src/cli/simple-commands/init/validation/config-validator.js +354 -0
  217. package/src/cli/simple-commands/init/validation/health-checker.js +599 -0
  218. package/src/cli/simple-commands/init/validation/index.js +388 -0
  219. package/src/cli/simple-commands/init/validation/mode-validator.js +387 -0
  220. package/src/cli/simple-commands/init/validation/post-init-validator.js +390 -0
  221. package/src/cli/simple-commands/init/validation/pre-init-validator.js +290 -0
  222. package/src/cli/simple-commands/init/validation/test-runner.js +488 -0
  223. package/src/cli/simple-commands/init.js +4 -0
  224. package/src/cli/simple-commands/mcp-health.js +163 -0
  225. package/src/cli/simple-commands/mcp-integration-layer.js +689 -0
  226. package/src/cli/simple-commands/mcp.js +420 -0
  227. package/src/cli/simple-commands/memory-consolidation.js +631 -0
  228. package/src/cli/simple-commands/memory.js +345 -0
  229. package/src/cli/simple-commands/migrate-hooks.js +63 -0
  230. package/src/cli/simple-commands/monitor.js +417 -0
  231. package/src/cli/simple-commands/neural.js +148 -0
  232. package/src/cli/simple-commands/pair-autofix-only.js +755 -0
  233. package/src/cli/simple-commands/pair-basic.js +751 -0
  234. package/src/cli/simple-commands/pair-old.js +623 -0
  235. package/src/cli/simple-commands/pair-working.js +849 -0
  236. package/src/cli/simple-commands/pair.js +849 -0
  237. package/src/cli/simple-commands/performance-hooks.js +149 -0
  238. package/src/cli/simple-commands/performance-metrics.js +601 -0
  239. package/src/cli/simple-commands/process-ui-enhanced.js +821 -0
  240. package/src/cli/simple-commands/process-ui.js +274 -0
  241. package/src/cli/simple-commands/realtime-update-system.js +659 -0
  242. package/src/cli/simple-commands/sparc/architecture.js +1750 -0
  243. package/src/cli/simple-commands/sparc/commands.js +575 -0
  244. package/src/cli/simple-commands/sparc/completion.js +1831 -0
  245. package/src/cli/simple-commands/sparc/coordinator.js +1045 -0
  246. package/src/cli/simple-commands/sparc/index.js +321 -0
  247. package/src/cli/simple-commands/sparc/phase-base.js +430 -0
  248. package/src/cli/simple-commands/sparc/pseudocode.js +984 -0
  249. package/src/cli/simple-commands/sparc/refinement.js +1856 -0
  250. package/src/cli/simple-commands/sparc/specification.js +736 -0
  251. package/src/cli/simple-commands/sparc-modes/architect.js +125 -0
  252. package/src/cli/simple-commands/sparc-modes/ask.js +126 -0
  253. package/src/cli/simple-commands/sparc-modes/code.js +148 -0
  254. package/src/cli/simple-commands/sparc-modes/debug.js +112 -0
  255. package/src/cli/simple-commands/sparc-modes/devops.js +137 -0
  256. package/src/cli/simple-commands/sparc-modes/docs-writer.js +38 -0
  257. package/src/cli/simple-commands/sparc-modes/generic.js +34 -0
  258. package/src/cli/simple-commands/sparc-modes/index.js +201 -0
  259. package/src/cli/simple-commands/sparc-modes/integration.js +55 -0
  260. package/src/cli/simple-commands/sparc-modes/mcp.js +38 -0
  261. package/src/cli/simple-commands/sparc-modes/monitoring.js +38 -0
  262. package/src/cli/simple-commands/sparc-modes/optimization.js +38 -0
  263. package/src/cli/simple-commands/sparc-modes/security-review.js +130 -0
  264. package/src/cli/simple-commands/sparc-modes/sparc-orchestrator.js +167 -0
  265. package/src/cli/simple-commands/sparc-modes/spec-pseudocode.js +38 -0
  266. package/src/cli/simple-commands/sparc-modes/supabase-admin.js +149 -0
  267. package/src/cli/simple-commands/sparc-modes/swarm.js +436 -0
  268. package/src/cli/simple-commands/sparc-modes/tdd.js +112 -0
  269. package/src/cli/simple-commands/sparc-modes/tutorial.js +277 -0
  270. package/src/cli/simple-commands/sparc.js +530 -0
  271. package/src/cli/simple-commands/start-ui.js +147 -0
  272. package/src/cli/simple-commands/start-wrapper.js +285 -0
  273. package/src/cli/simple-commands/start.js +2 -0
  274. package/src/cli/simple-commands/status.js +303 -0
  275. package/src/cli/simple-commands/stream-chain-clean.js +221 -0
  276. package/src/cli/simple-commands/stream-chain-fixed.js +89 -0
  277. package/src/cli/simple-commands/stream-chain-real.js +408 -0
  278. package/src/cli/simple-commands/stream-chain-working.js +323 -0
  279. package/src/cli/simple-commands/stream-chain.js +491 -0
  280. package/src/cli/simple-commands/stream-processor.js +340 -0
  281. package/src/cli/simple-commands/swarm-executor.js +253 -0
  282. package/src/cli/simple-commands/swarm-metrics-integration.js +371 -0
  283. package/src/cli/simple-commands/swarm-ui.js +741 -0
  284. package/src/cli/simple-commands/swarm-webui-integration.js +311 -0
  285. package/src/cli/simple-commands/swarm.js +2277 -0
  286. package/src/cli/simple-commands/task.js +228 -0
  287. package/src/cli/simple-commands/templates/mle-star-workflow.json +294 -0
  288. package/src/cli/simple-commands/timestamp-fix.js +104 -0
  289. package/src/cli/simple-commands/token-tracker.js +372 -0
  290. package/src/cli/simple-commands/tool-execution-framework.js +555 -0
  291. package/src/cli/simple-commands/train-and-stream.js +354 -0
  292. package/src/cli/simple-commands/training-pipeline.js +874 -0
  293. package/src/cli/simple-commands/training.js +288 -0
  294. package/src/cli/simple-commands/verification-hooks.js +336 -0
  295. package/src/cli/simple-commands/verification-integration.js +464 -0
  296. package/src/cli/simple-commands/verification-training-integration.js +646 -0
  297. package/src/cli/simple-commands/verification.js +551 -0
  298. package/src/cli/simple-commands/web-server.js +929 -0
  299. package/src/cli/simple-commands/webui-validator.js +136 -0
  300. package/src/language/README.md +503 -0
  301. package/src/language/claude-md-generator.js +618 -0
  302. package/src/language/cli.js +422 -0
  303. package/src/language/example.js +347 -0
  304. package/src/language/integration-system.js +619 -0
  305. package/src/language/language-detector.js +581 -0
@@ -0,0 +1,761 @@
1
+ #!/usr/bin/env node
2
+
3
+ /**
4
+ * Configuration Validation Scripts
5
+ *
6
+ * Validates all optimization configurations before and after activation
7
+ * Ensures system integrity and performance compliance
8
+ */
9
+
10
+ import { fileURLToPath } from 'url';
11
+ import { dirname, join } from 'path';
12
+ import { existsSync, readFileSync, statSync } from 'fs';
13
+ import { performance } from 'perf_hooks';
14
+ import chalk from 'chalk';
15
+ import ora from 'ora';
16
+
17
+ const __filename = fileURLToPath(import.meta.url);
18
+ const __dirname = dirname(__filename);
19
+ const PROJECT_ROOT = join(__dirname, '..', '..');
20
+
21
+ /**
22
+ * Configuration Validator
23
+ */
24
+ class ConfigurationValidator {
25
+ constructor(options = {}) {
26
+ this.options = {
27
+ strict: false,
28
+ verbose: false,
29
+ ...options
30
+ };
31
+
32
+ this.validationRules = {
33
+ sqlite: this._getSQLiteValidationRules(),
34
+ performance: this._getPerformanceValidationRules(),
35
+ hardware: this._getHardwareValidationRules(),
36
+ monitoring: this._getMonitoringValidationRules()
37
+ };
38
+
39
+ this.validationResults = {
40
+ sqlite: [],
41
+ performance: [],
42
+ hardware: [],
43
+ monitoring: [],
44
+ overall: { passed: 0, failed: 0, warnings: 0 }
45
+ };
46
+ }
47
+
48
+ /**
49
+ * Run comprehensive configuration validation
50
+ */
51
+ async validate() {
52
+ const spinner = ora('šŸ” Starting Configuration Validation...').start();
53
+
54
+ try {
55
+ // Validate SQLite configurations
56
+ await this._validateSQLiteConfig(spinner);
57
+
58
+ // Validate performance configurations
59
+ await this._validatePerformanceConfig(spinner);
60
+
61
+ // Validate hardware configurations
62
+ await this._validateHardwareConfig(spinner);
63
+
64
+ // Validate monitoring configurations
65
+ await this._validateMonitoringConfig(spinner);
66
+
67
+ // Generate final report
68
+ const report = this._generateValidationReport();
69
+
70
+ spinner.succeed('āœ… Configuration validation completed');
71
+
72
+ return {
73
+ success: report.overall.failed === 0,
74
+ report,
75
+ recommendations: this._generateRecommendations()
76
+ };
77
+
78
+ } catch (error) {
79
+ spinner.fail('āŒ Configuration validation failed');
80
+ throw error;
81
+ }
82
+ }
83
+
84
+ /**
85
+ * Validate specific configuration type
86
+ */
87
+ async validateType(type) {
88
+ if (!this.validationRules[type]) {
89
+ throw new Error(`Unknown validation type: ${type}`);
90
+ }
91
+
92
+ const methodName = `_validate${type.charAt(0).toUpperCase() + type.slice(1)}Config`;
93
+ if (typeof this[methodName] === 'function') {
94
+ await this[methodName]();
95
+ return this.validationResults[type];
96
+ }
97
+
98
+ throw new Error(`Validation method not implemented for type: ${type}`);
99
+ }
100
+
101
+ // Private validation methods
102
+
103
+ async _validateSQLiteConfig(spinner) {
104
+ spinner.text = 'šŸ’¾ Validating SQLite configurations...';
105
+
106
+ const rules = this.validationRules.sqlite;
107
+ const results = this.validationResults.sqlite;
108
+
109
+ // Find database files
110
+ const dbPaths = this._findDatabaseFiles();
111
+
112
+ if (dbPaths.length === 0) {
113
+ results.push({
114
+ type: 'warning',
115
+ rule: 'database-existence',
116
+ message: 'No SQLite database files found',
117
+ impact: 'medium'
118
+ });
119
+ this.validationResults.overall.warnings++;
120
+ return;
121
+ }
122
+
123
+ for (const dbPath of dbPaths) {
124
+ try {
125
+ const Database = (await import('better-sqlite3')).default;
126
+ const db = new Database(dbPath, { readonly: true });
127
+
128
+ // Validate schema version
129
+ const schemaVersion = this._getSchemaVersion(db);
130
+ if (schemaVersion < rules.minSchemaVersion) {
131
+ results.push({
132
+ type: 'error',
133
+ rule: 'schema-version',
134
+ message: `Database ${dbPath} schema version ${schemaVersion} below minimum ${rules.minSchemaVersion}`,
135
+ impact: 'high',
136
+ fix: 'Run database optimization to upgrade schema'
137
+ });
138
+ this.validationResults.overall.failed++;
139
+ } else {
140
+ results.push({
141
+ type: 'success',
142
+ rule: 'schema-version',
143
+ message: `Database ${dbPath} schema version ${schemaVersion} is current`,
144
+ impact: 'low'
145
+ });
146
+ this.validationResults.overall.passed++;
147
+ }
148
+
149
+ // Validate indexes
150
+ const indexes = this._getIndexes(db);
151
+ const requiredIndexes = rules.requiredIndexes;
152
+
153
+ for (const requiredIndex of requiredIndexes) {
154
+ const indexExists = indexes.some(idx => idx.name === requiredIndex);
155
+ if (!indexExists) {
156
+ results.push({
157
+ type: 'error',
158
+ rule: 'required-indexes',
159
+ message: `Required index ${requiredIndex} missing from ${dbPath}`,
160
+ impact: 'high',
161
+ fix: 'Run database optimization to create missing indexes'
162
+ });
163
+ this.validationResults.overall.failed++;
164
+ } else {
165
+ results.push({
166
+ type: 'success',
167
+ rule: 'required-indexes',
168
+ message: `Required index ${requiredIndex} exists in ${dbPath}`,
169
+ impact: 'low'
170
+ });
171
+ this.validationResults.overall.passed++;
172
+ }
173
+ }
174
+
175
+ // Validate pragma settings
176
+ const pragmaSettings = this._getPragmaSettings(db);
177
+ for (const [pragma, expectedValue] of Object.entries(rules.pragmaSettings)) {
178
+ const actualValue = pragmaSettings[pragma];
179
+ if (actualValue !== expectedValue) {
180
+ results.push({
181
+ type: 'warning',
182
+ rule: 'pragma-settings',
183
+ message: `Pragma ${pragma} is ${actualValue}, expected ${expectedValue} in ${dbPath}`,
184
+ impact: 'medium',
185
+ fix: `Run PRAGMA ${pragma} = ${expectedValue}`
186
+ });
187
+ this.validationResults.overall.warnings++;
188
+ } else {
189
+ results.push({
190
+ type: 'success',
191
+ rule: 'pragma-settings',
192
+ message: `Pragma ${pragma} correctly set to ${expectedValue} in ${dbPath}`,
193
+ impact: 'low'
194
+ });
195
+ this.validationResults.overall.passed++;
196
+ }
197
+ }
198
+
199
+ db.close();
200
+
201
+ } catch (error) {
202
+ results.push({
203
+ type: 'error',
204
+ rule: 'database-access',
205
+ message: `Cannot access database ${dbPath}: ${error.message}`,
206
+ impact: 'critical',
207
+ fix: 'Check database file permissions and integrity'
208
+ });
209
+ this.validationResults.overall.failed++;
210
+ }
211
+ }
212
+ }
213
+
214
+ async _validatePerformanceConfig(spinner) {
215
+ spinner.text = '⚔ Validating performance configurations...';
216
+
217
+ const rules = this.validationRules.performance;
218
+ const results = this.validationResults.performance;
219
+
220
+ // Check for performance configuration files
221
+ const perfConfigPath = join(PROJECT_ROOT, '.claude-flow', 'performance-config.json');
222
+ if (!existsSync(perfConfigPath)) {
223
+ results.push({
224
+ type: 'warning',
225
+ rule: 'config-file-existence',
226
+ message: 'Performance configuration file not found',
227
+ impact: 'medium',
228
+ fix: 'Run optimization activation to create performance configuration'
229
+ });
230
+ this.validationResults.overall.warnings++;
231
+ } else {
232
+ try {
233
+ const config = JSON.parse(readFileSync(perfConfigPath, 'utf8'));
234
+
235
+ // Validate performance targets
236
+ if (config.performanceTarget > rules.maxExecutionTime) {
237
+ results.push({
238
+ type: 'warning',
239
+ rule: 'performance-target',
240
+ message: `Performance target ${config.performanceTarget}ms exceeds recommended ${rules.maxExecutionTime}ms`,
241
+ impact: 'medium'
242
+ });
243
+ this.validationResults.overall.warnings++;
244
+ } else {
245
+ results.push({
246
+ type: 'success',
247
+ rule: 'performance-target',
248
+ message: `Performance target ${config.performanceTarget}ms within recommended limits`,
249
+ impact: 'low'
250
+ });
251
+ this.validationResults.overall.passed++;
252
+ }
253
+
254
+ // Validate compatibility target
255
+ if (config.compatibilityTarget < rules.minCompatibilityRate) {
256
+ results.push({
257
+ type: 'error',
258
+ rule: 'compatibility-target',
259
+ message: `Compatibility target ${config.compatibilityTarget} below minimum ${rules.minCompatibilityRate}`,
260
+ impact: 'high'
261
+ });
262
+ this.validationResults.overall.failed++;
263
+ } else {
264
+ results.push({
265
+ type: 'success',
266
+ rule: 'compatibility-target',
267
+ message: `Compatibility target ${config.compatibilityTarget} meets minimum requirements`,
268
+ impact: 'low'
269
+ });
270
+ this.validationResults.overall.passed++;
271
+ }
272
+
273
+ } catch (error) {
274
+ results.push({
275
+ type: 'error',
276
+ rule: 'config-file-parsing',
277
+ message: `Cannot parse performance configuration: ${error.message}`,
278
+ impact: 'high'
279
+ });
280
+ this.validationResults.overall.failed++;
281
+ }
282
+ }
283
+
284
+ // Check Node.js optimization flags
285
+ const nodeOptions = process.env.NODE_OPTIONS || '';
286
+ for (const requiredFlag of rules.requiredNodeFlags) {
287
+ if (!nodeOptions.includes(requiredFlag)) {
288
+ results.push({
289
+ type: 'warning',
290
+ rule: 'node-flags',
291
+ message: `Required Node.js flag ${requiredFlag} not set`,
292
+ impact: 'medium',
293
+ fix: `Add ${requiredFlag} to NODE_OPTIONS environment variable`
294
+ });
295
+ this.validationResults.overall.warnings++;
296
+ } else {
297
+ results.push({
298
+ type: 'success',
299
+ rule: 'node-flags',
300
+ message: `Required Node.js flag ${requiredFlag} is set`,
301
+ impact: 'low'
302
+ });
303
+ this.validationResults.overall.passed++;
304
+ }
305
+ }
306
+ }
307
+
308
+ async _validateHardwareConfig(spinner) {
309
+ spinner.text = 'šŸ–„ļø Validating hardware configurations...';
310
+
311
+ const rules = this.validationRules.hardware;
312
+ const results = this.validationResults.hardware;
313
+
314
+ // Check system memory
315
+ const totalMemory = require('os').totalmem();
316
+ const totalMemoryGB = totalMemory / (1024 * 1024 * 1024);
317
+
318
+ if (totalMemoryGB < rules.minMemoryGB) {
319
+ results.push({
320
+ type: 'error',
321
+ rule: 'system-memory',
322
+ message: `System memory ${totalMemoryGB.toFixed(1)}GB below minimum ${rules.minMemoryGB}GB`,
323
+ impact: 'critical'
324
+ });
325
+ this.validationResults.overall.failed++;
326
+ } else if (totalMemoryGB >= rules.optimalMemoryGB) {
327
+ results.push({
328
+ type: 'success',
329
+ rule: 'system-memory',
330
+ message: `System memory ${totalMemoryGB.toFixed(1)}GB meets optimal requirements`,
331
+ impact: 'low'
332
+ });
333
+ this.validationResults.overall.passed++;
334
+ } else {
335
+ results.push({
336
+ type: 'warning',
337
+ rule: 'system-memory',
338
+ message: `System memory ${totalMemoryGB.toFixed(1)}GB below optimal ${rules.optimalMemoryGB}GB`,
339
+ impact: 'medium'
340
+ });
341
+ this.validationResults.overall.warnings++;
342
+ }
343
+
344
+ // Check CPU cores
345
+ const cpuCores = require('os').cpus().length;
346
+ if (cpuCores < rules.minCPUCores) {
347
+ results.push({
348
+ type: 'warning',
349
+ rule: 'cpu-cores',
350
+ message: `CPU cores ${cpuCores} below recommended ${rules.minCPUCores}`,
351
+ impact: 'medium'
352
+ });
353
+ this.validationResults.overall.warnings++;
354
+ } else {
355
+ results.push({
356
+ type: 'success',
357
+ rule: 'cpu-cores',
358
+ message: `CPU cores ${cpuCores} meets requirements`,
359
+ impact: 'low'
360
+ });
361
+ this.validationResults.overall.passed++;
362
+ }
363
+
364
+ // Check Node.js version
365
+ const nodeVersion = process.version;
366
+ const majorVersion = parseInt(nodeVersion.slice(1).split('.')[0]);
367
+
368
+ if (majorVersion < rules.minNodeVersion) {
369
+ results.push({
370
+ type: 'error',
371
+ rule: 'node-version',
372
+ message: `Node.js version ${nodeVersion} below minimum ${rules.minNodeVersion}`,
373
+ impact: 'critical',
374
+ fix: `Upgrade Node.js to version ${rules.minNodeVersion} or higher`
375
+ });
376
+ this.validationResults.overall.failed++;
377
+ } else {
378
+ results.push({
379
+ type: 'success',
380
+ rule: 'node-version',
381
+ message: `Node.js version ${nodeVersion} meets requirements`,
382
+ impact: 'low'
383
+ });
384
+ this.validationResults.overall.passed++;
385
+ }
386
+ }
387
+
388
+ async _validateMonitoringConfig(spinner) {
389
+ spinner.text = 'šŸ“Š Validating monitoring configurations...';
390
+
391
+ const rules = this.validationRules.monitoring;
392
+ const results = this.validationResults.monitoring;
393
+
394
+ // Check monitoring configuration file
395
+ const monitoringConfigPath = join(PROJECT_ROOT, '.claude-flow', 'monitoring-config.json');
396
+ if (!existsSync(monitoringConfigPath)) {
397
+ results.push({
398
+ type: 'error',
399
+ rule: 'config-file-existence',
400
+ message: 'Monitoring configuration file not found',
401
+ impact: 'high',
402
+ fix: 'Run optimization activation to create monitoring configuration'
403
+ });
404
+ this.validationResults.overall.failed++;
405
+ return;
406
+ }
407
+
408
+ try {
409
+ const config = JSON.parse(readFileSync(monitoringConfigPath, 'utf8'));
410
+
411
+ // Validate required sections
412
+ for (const requiredSection of rules.requiredSections) {
413
+ if (!config[requiredSection]) {
414
+ results.push({
415
+ type: 'error',
416
+ rule: 'required-sections',
417
+ message: `Required monitoring section ${requiredSection} missing`,
418
+ impact: 'high'
419
+ });
420
+ this.validationResults.overall.failed++;
421
+ } else {
422
+ results.push({
423
+ type: 'success',
424
+ rule: 'required-sections',
425
+ message: `Required monitoring section ${requiredSection} present`,
426
+ impact: 'low'
427
+ });
428
+ this.validationResults.overall.passed++;
429
+ }
430
+ }
431
+
432
+ // Validate performance thresholds
433
+ if (config.performanceThresholds) {
434
+ const thresholds = config.performanceThresholds;
435
+
436
+ if (thresholds.hookExecutionTime > rules.maxHookExecutionTime) {
437
+ results.push({
438
+ type: 'warning',
439
+ rule: 'performance-thresholds',
440
+ message: `Hook execution time threshold ${thresholds.hookExecutionTime}ms too high`,
441
+ impact: 'medium'
442
+ });
443
+ this.validationResults.overall.warnings++;
444
+ } else {
445
+ results.push({
446
+ type: 'success',
447
+ rule: 'performance-thresholds',
448
+ message: `Hook execution time threshold ${thresholds.hookExecutionTime}ms is appropriate`,
449
+ impact: 'low'
450
+ });
451
+ this.validationResults.overall.passed++;
452
+ }
453
+ }
454
+
455
+ } catch (error) {
456
+ results.push({
457
+ type: 'error',
458
+ rule: 'config-file-parsing',
459
+ message: `Cannot parse monitoring configuration: ${error.message}`,
460
+ impact: 'high'
461
+ });
462
+ this.validationResults.overall.failed++;
463
+ }
464
+
465
+ // Check monitoring service files
466
+ const servicesDir = join(PROJECT_ROOT, '.claude-flow', 'services');
467
+ if (!existsSync(servicesDir)) {
468
+ results.push({
469
+ type: 'warning',
470
+ rule: 'service-files',
471
+ message: 'Monitoring services directory not found',
472
+ impact: 'medium',
473
+ fix: 'Run optimization activation to start monitoring services'
474
+ });
475
+ this.validationResults.overall.warnings++;
476
+ } else {
477
+ const serviceFiles = require('fs').readdirSync(servicesDir);
478
+ const requiredServices = rules.requiredServices;
479
+
480
+ for (const service of requiredServices) {
481
+ const serviceFile = `${service}.pid`;
482
+ if (!serviceFiles.includes(serviceFile)) {
483
+ results.push({
484
+ type: 'warning',
485
+ rule: 'service-files',
486
+ message: `Monitoring service ${service} not running`,
487
+ impact: 'medium',
488
+ fix: `Start monitoring service: ${service}`
489
+ });
490
+ this.validationResults.overall.warnings++;
491
+ } else {
492
+ results.push({
493
+ type: 'success',
494
+ rule: 'service-files',
495
+ message: `Monitoring service ${service} is running`,
496
+ impact: 'low'
497
+ });
498
+ this.validationResults.overall.passed++;
499
+ }
500
+ }
501
+ }
502
+ }
503
+
504
+ // Validation rule definitions
505
+
506
+ _getSQLiteValidationRules() {
507
+ return {
508
+ minSchemaVersion: 1.5,
509
+ requiredIndexes: [
510
+ 'idx_agents_swarm',
511
+ 'idx_agents_status',
512
+ 'idx_tasks_swarm',
513
+ 'idx_tasks_status',
514
+ 'idx_memory_namespace'
515
+ ],
516
+ pragmaSettings: {
517
+ journal_mode: 'WAL',
518
+ synchronous: 'NORMAL',
519
+ cache_size: 524288,
520
+ temp_store: 'memory'
521
+ }
522
+ };
523
+ }
524
+
525
+ _getPerformanceValidationRules() {
526
+ return {
527
+ maxExecutionTime: 100, // ms
528
+ minCompatibilityRate: 0.95,
529
+ requiredNodeFlags: [
530
+ 'max-old-space-size',
531
+ 'uv-threadpool-size'
532
+ ]
533
+ };
534
+ }
535
+
536
+ _getHardwareValidationRules() {
537
+ return {
538
+ minMemoryGB: 16,
539
+ optimalMemoryGB: 96,
540
+ minCPUCores: 8,
541
+ minNodeVersion: 20
542
+ };
543
+ }
544
+
545
+ _getMonitoringValidationRules() {
546
+ return {
547
+ requiredSections: [
548
+ 'performanceThresholds',
549
+ 'alerting',
550
+ 'metrics'
551
+ ],
552
+ maxHookExecutionTime: 100,
553
+ requiredServices: [
554
+ 'performance',
555
+ 'system',
556
+ 'database'
557
+ ]
558
+ };
559
+ }
560
+
561
+ // Helper methods
562
+
563
+ _findDatabaseFiles() {
564
+ const dbPaths = [];
565
+ const searchPaths = [
566
+ join(PROJECT_ROOT, 'data'),
567
+ join(PROJECT_ROOT, '.swarm'),
568
+ join(PROJECT_ROOT, 'memory'),
569
+ join(PROJECT_ROOT, '.claude-flow')
570
+ ];
571
+
572
+ for (const searchPath of searchPaths) {
573
+ if (existsSync(searchPath)) {
574
+ try {
575
+ const files = require('fs').readdirSync(searchPath, { recursive: true });
576
+ const dbFiles = files
577
+ .filter(file => file.endsWith('.db') || file.endsWith('.sqlite'))
578
+ .map(file => join(searchPath, file))
579
+ .filter(file => existsSync(file));
580
+ dbPaths.push(...dbFiles);
581
+ } catch (error) {
582
+ // Ignore errors reading directories
583
+ }
584
+ }
585
+ }
586
+
587
+ return [...new Set(dbPaths)]; // Remove duplicates
588
+ }
589
+
590
+ _getSchemaVersion(db) {
591
+ try {
592
+ const result = db.prepare('SELECT version FROM schema_version ORDER BY version DESC LIMIT 1').get();
593
+ return result ? result.version : 1.0;
594
+ } catch (error) {
595
+ return 1.0;
596
+ }
597
+ }
598
+
599
+ _getIndexes(db) {
600
+ try {
601
+ return db.prepare("SELECT name FROM sqlite_master WHERE type='index'").all();
602
+ } catch (error) {
603
+ return [];
604
+ }
605
+ }
606
+
607
+ _getPragmaSettings(db) {
608
+ const settings = {};
609
+ const pragmas = ['journal_mode', 'synchronous', 'cache_size', 'temp_store'];
610
+
611
+ for (const pragma of pragmas) {
612
+ try {
613
+ const result = db.prepare(`PRAGMA ${pragma}`).get();
614
+ settings[pragma] = result[pragma];
615
+ } catch (error) {
616
+ settings[pragma] = 'unknown';
617
+ }
618
+ }
619
+
620
+ return settings;
621
+ }
622
+
623
+ _generateValidationReport() {
624
+ const report = {
625
+ timestamp: new Date().toISOString(),
626
+ overall: this.validationResults.overall,
627
+ summary: {
628
+ total: this.validationResults.overall.passed +
629
+ this.validationResults.overall.failed +
630
+ this.validationResults.overall.warnings,
631
+ passRate: this.validationResults.overall.passed /
632
+ (this.validationResults.overall.passed + this.validationResults.overall.failed + this.validationResults.overall.warnings),
633
+ compliance: this.validationResults.overall.failed === 0 ? 'compliant' : 'non-compliant'
634
+ },
635
+ details: this.validationResults
636
+ };
637
+
638
+ return report;
639
+ }
640
+
641
+ _generateRecommendations() {
642
+ const recommendations = [];
643
+
644
+ // Analyze errors and warnings to generate recommendations
645
+ const allResults = [
646
+ ...this.validationResults.sqlite,
647
+ ...this.validationResults.performance,
648
+ ...this.validationResults.hardware,
649
+ ...this.validationResults.monitoring
650
+ ];
651
+
652
+ const errors = allResults.filter(r => r.type === 'error');
653
+ const warnings = allResults.filter(r => r.type === 'warning');
654
+
655
+ if (errors.length > 0) {
656
+ recommendations.push({
657
+ priority: 'CRITICAL',
658
+ action: 'Fix Configuration Errors',
659
+ description: `${errors.length} critical configuration errors must be resolved`,
660
+ fixes: errors.filter(e => e.fix).map(e => e.fix)
661
+ });
662
+ }
663
+
664
+ if (warnings.length > 0) {
665
+ recommendations.push({
666
+ priority: 'HIGH',
667
+ action: 'Address Configuration Warnings',
668
+ description: `${warnings.length} configuration warnings should be addressed for optimal performance`,
669
+ fixes: warnings.filter(w => w.fix).map(w => w.fix)
670
+ });
671
+ }
672
+
673
+ if (errors.length === 0 && warnings.length === 0) {
674
+ recommendations.push({
675
+ priority: 'INFO',
676
+ action: 'Configuration Validated',
677
+ description: 'All configurations are valid and optimized',
678
+ fixes: ['Continue monitoring system performance']
679
+ });
680
+ }
681
+
682
+ return recommendations;
683
+ }
684
+ }
685
+
686
+ /**
687
+ * CLI Interface
688
+ */
689
+ async function main() {
690
+ const args = process.argv.slice(2);
691
+ const command = args[0] || 'validate';
692
+ const type = args[1];
693
+
694
+ const validator = new ConfigurationValidator({
695
+ strict: args.includes('--strict'),
696
+ verbose: args.includes('--verbose')
697
+ });
698
+
699
+ try {
700
+ let result;
701
+
702
+ switch (command) {
703
+ case 'validate':
704
+ if (type && ['sqlite', 'performance', 'hardware', 'monitoring'].includes(type)) {
705
+ console.log(chalk.blue(`šŸ” Validating ${type} configuration...`));
706
+ const typeResults = await validator.validateType(type);
707
+ console.log(JSON.stringify(typeResults, null, 2));
708
+ } else {
709
+ console.log(chalk.blue('šŸ” Running comprehensive configuration validation...'));
710
+ result = await validator.validate();
711
+
712
+ if (result.success) {
713
+ console.log(chalk.green('\nāœ… All configurations validated successfully!'));
714
+ } else {
715
+ console.log(chalk.red('\nāŒ Configuration validation failed'));
716
+ }
717
+
718
+ console.log(chalk.blue('\nšŸ“Š Validation Summary:'));
719
+ console.log(` Passed: ${result.report.overall.passed}`);
720
+ console.log(` Failed: ${result.report.overall.failed}`);
721
+ console.log(` Warnings: ${result.report.overall.warnings}`);
722
+ console.log(` Pass Rate: ${(result.report.summary.passRate * 100).toFixed(1)}%`);
723
+
724
+ if (result.recommendations.length > 0) {
725
+ console.log(chalk.yellow('\nšŸ“‹ Recommendations:'));
726
+ result.recommendations.forEach(rec => {
727
+ console.log(chalk.yellow(` ${rec.priority}: ${rec.action}`));
728
+ console.log(` ${rec.description}`);
729
+ });
730
+ }
731
+ }
732
+ break;
733
+
734
+ default:
735
+ console.log(chalk.yellow('Usage:'));
736
+ console.log(' node config-validator.js validate [type] - Validate configurations');
737
+ console.log('');
738
+ console.log('Types:');
739
+ console.log(' sqlite - Validate SQLite database configurations');
740
+ console.log(' performance - Validate performance system configurations');
741
+ console.log(' hardware - Validate hardware configurations');
742
+ console.log(' monitoring - Validate monitoring configurations');
743
+ console.log('');
744
+ console.log('Options:');
745
+ console.log(' --strict - Use strict validation rules');
746
+ console.log(' --verbose - Show detailed validation output');
747
+ }
748
+
749
+ } catch (error) {
750
+ console.error(chalk.red('āŒ Validation failed:'), error.message);
751
+ process.exit(1);
752
+ }
753
+ }
754
+
755
+ // Export for programmatic use
756
+ export { ConfigurationValidator };
757
+
758
+ // Run if called directly
759
+ if (import.meta.url === `file://${process.argv[1]}`) {
760
+ main().catch(console.error);
761
+ }