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,634 @@
1
+ #!/usr/bin/env node
2
+
3
+ /**
4
+ * Health Check System
5
+ *
6
+ * Comprehensive health checks for claude-flow-novice:
7
+ * - Package installation validation
8
+ * - Redis connectivity check
9
+ * - Build artifacts verification
10
+ * - System requirements validation
11
+ */
12
+
13
+ import fs from 'fs/promises';
14
+ import { existsSync } from 'fs';
15
+ import path from 'path';
16
+ import { exec } from 'child_process';
17
+ import { promisify } from 'util';
18
+ import { createRequire } from 'module';
19
+
20
+ const execAsync = promisify(exec);
21
+ const require = createRequire(import.meta.url);
22
+
23
+ export class HealthCheckSystem {
24
+ constructor(options = {}) {
25
+ this.verbose = options.verbose || false;
26
+ this.timeout = options.timeout || 10000;
27
+
28
+ this.results = {
29
+ overall: 'unknown',
30
+ checks: [],
31
+ timestamp: new Date().toISOString()
32
+ };
33
+
34
+ this.systemRequirements = {
35
+ node: '>=20.0.0',
36
+ npm: '>=9.0.0',
37
+ memory: 512 * 1024 * 1024, // 512MB minimum
38
+ diskSpace: 500 * 1024 * 1024 // 500MB minimum
39
+ };
40
+ }
41
+
42
+ /**
43
+ * Run all health checks
44
+ */
45
+ async runAll() {
46
+ console.log('Running comprehensive health checks...\n');
47
+
48
+ const checks = [
49
+ this.checkSystemRequirements(),
50
+ this.checkPackageInstallation(),
51
+ this.checkRedisConnectivity(),
52
+ this.checkBuildArtifacts(),
53
+ this.checkDependencies(),
54
+ this.checkConfiguration()
55
+ ];
56
+
57
+ const results = await Promise.allSettled(checks);
58
+
59
+ this.results.checks = results.map((result, index) => {
60
+ if (result.status === 'fulfilled') {
61
+ return result.value;
62
+ } else {
63
+ return {
64
+ name: `Check ${index + 1}`,
65
+ status: 'failed',
66
+ error: result.reason.message
67
+ };
68
+ }
69
+ });
70
+
71
+ this.results.overall = this.determineOverallStatus();
72
+ this.results.timestamp = new Date().toISOString();
73
+
74
+ return this.results;
75
+ }
76
+
77
+ /**
78
+ * Check system requirements
79
+ */
80
+ async checkSystemRequirements() {
81
+ const check = {
82
+ name: 'System Requirements',
83
+ status: 'unknown',
84
+ details: {},
85
+ errors: []
86
+ };
87
+
88
+ try {
89
+ // Check Node.js version
90
+ const nodeVersion = process.version;
91
+ const nodeOk = this.compareVersion(nodeVersion, '20.0.0');
92
+ check.details.node = {
93
+ version: nodeVersion,
94
+ required: this.systemRequirements.node,
95
+ status: nodeOk ? 'ok' : 'failed'
96
+ };
97
+ if (!nodeOk) {
98
+ check.errors.push(`Node.js version ${nodeVersion} does not meet requirement ${this.systemRequirements.node}`);
99
+ }
100
+
101
+ // Check NPM version
102
+ try {
103
+ const { stdout } = await execAsync('npm --version');
104
+ const npmVersion = stdout.trim();
105
+ const npmOk = this.compareVersion(npmVersion, '9.0.0');
106
+ check.details.npm = {
107
+ version: npmVersion,
108
+ required: this.systemRequirements.npm,
109
+ status: npmOk ? 'ok' : 'failed'
110
+ };
111
+ if (!npmOk) {
112
+ check.errors.push(`NPM version ${npmVersion} does not meet requirement ${this.systemRequirements.npm}`);
113
+ }
114
+ } catch (error) {
115
+ check.details.npm = { status: 'error', error: error.message };
116
+ check.errors.push('NPM not found or not accessible');
117
+ }
118
+
119
+ // Check available memory
120
+ const freeMem = require('os').freemem();
121
+ const memOk = freeMem >= this.systemRequirements.memory;
122
+ check.details.memory = {
123
+ available: Math.round(freeMem / 1024 / 1024), // MB
124
+ required: Math.round(this.systemRequirements.memory / 1024 / 1024), // MB
125
+ status: memOk ? 'ok' : 'warning'
126
+ };
127
+
128
+ // Check platform
129
+ check.details.platform = {
130
+ type: process.platform,
131
+ arch: process.arch,
132
+ status: 'ok'
133
+ };
134
+
135
+ check.status = check.errors.length === 0 ? 'passed' : 'failed';
136
+ } catch (error) {
137
+ check.status = 'error';
138
+ check.error = error.message;
139
+ }
140
+
141
+ return check;
142
+ }
143
+
144
+ /**
145
+ * Check package installation
146
+ */
147
+ async checkPackageInstallation() {
148
+ const check = {
149
+ name: 'Package Installation',
150
+ status: 'unknown',
151
+ details: {},
152
+ errors: []
153
+ };
154
+
155
+ try {
156
+ // Check if package.json exists
157
+ const packageJsonPath = path.resolve('./package.json');
158
+ if (existsSync(packageJsonPath)) {
159
+ const packageJson = JSON.parse(await fs.readFile(packageJsonPath, 'utf8'));
160
+ check.details.package = {
161
+ name: packageJson.name,
162
+ version: packageJson.version,
163
+ status: 'ok'
164
+ };
165
+ } else {
166
+ check.errors.push('package.json not found');
167
+ }
168
+
169
+ // Check node_modules
170
+ const nodeModulesPath = path.resolve('./node_modules');
171
+ if (existsSync(nodeModulesPath)) {
172
+ check.details.nodeModules = {
173
+ exists: true,
174
+ status: 'ok'
175
+ };
176
+ } else {
177
+ check.errors.push('node_modules directory not found');
178
+ }
179
+
180
+ // Check critical dependencies
181
+ const criticalDeps = [
182
+ '@anthropic-ai/claude-agent-sdk',
183
+ '@modelcontextprotocol/sdk',
184
+ 'redis',
185
+ 'express'
186
+ ];
187
+
188
+ const missingDeps = [];
189
+ for (const dep of criticalDeps) {
190
+ const depPath = path.resolve('./node_modules', dep);
191
+ if (!existsSync(depPath)) {
192
+ missingDeps.push(dep);
193
+ }
194
+ }
195
+
196
+ check.details.dependencies = {
197
+ critical: criticalDeps.length,
198
+ missing: missingDeps.length,
199
+ status: missingDeps.length === 0 ? 'ok' : 'failed',
200
+ missingList: missingDeps
201
+ };
202
+
203
+ if (missingDeps.length > 0) {
204
+ check.errors.push(`Missing critical dependencies: ${missingDeps.join(', ')}`);
205
+ }
206
+
207
+ check.status = check.errors.length === 0 ? 'passed' : 'failed';
208
+ } catch (error) {
209
+ check.status = 'error';
210
+ check.error = error.message;
211
+ }
212
+
213
+ return check;
214
+ }
215
+
216
+ /**
217
+ * Check Redis connectivity
218
+ */
219
+ async checkRedisConnectivity() {
220
+ const check = {
221
+ name: 'Redis Connectivity',
222
+ status: 'unknown',
223
+ details: {},
224
+ errors: []
225
+ };
226
+
227
+ try {
228
+ // Try to connect to Redis
229
+ const redis = require('redis');
230
+ const client = redis.createClient({
231
+ socket: {
232
+ connectTimeout: 5000
233
+ }
234
+ });
235
+
236
+ try {
237
+ await client.connect();
238
+
239
+ // Test basic operations
240
+ await client.ping();
241
+
242
+ const info = await client.info();
243
+ const lines = info.split('\r\n');
244
+ const versionLine = lines.find(line => line.startsWith('redis_version:'));
245
+ const version = versionLine ? versionLine.split(':')[1] : 'unknown';
246
+
247
+ check.details.connection = {
248
+ status: 'connected',
249
+ version: version
250
+ };
251
+
252
+ // Test pub/sub capability
253
+ const testKey = `health-check:${Date.now()}`;
254
+ await client.set(testKey, 'test', { EX: 10 });
255
+ const value = await client.get(testKey);
256
+ await client.del(testKey);
257
+
258
+ check.details.operations = {
259
+ set: 'ok',
260
+ get: value === 'test' ? 'ok' : 'failed',
261
+ delete: 'ok'
262
+ };
263
+
264
+ await client.quit();
265
+ check.status = 'passed';
266
+ } catch (error) {
267
+ check.errors.push(`Redis connection failed: ${error.message}`);
268
+ check.status = 'failed';
269
+ try {
270
+ await client.quit();
271
+ } catch (e) {
272
+ // Ignore cleanup errors
273
+ }
274
+ }
275
+ } catch (error) {
276
+ check.errors.push(`Redis module not found: ${error.message}`);
277
+ check.status = 'failed';
278
+ check.details.note = 'Redis is required for swarm coordination';
279
+ }
280
+
281
+ return check;
282
+ }
283
+
284
+ /**
285
+ * Check build artifacts
286
+ */
287
+ async checkBuildArtifacts() {
288
+ const check = {
289
+ name: 'Build Artifacts',
290
+ status: 'unknown',
291
+ details: {},
292
+ errors: []
293
+ };
294
+
295
+ try {
296
+ const distPath = path.resolve('./.claude-flow-novice/dist');
297
+ const criticalPaths = [
298
+ './.claude-flow-novice/dist/src/index.js',
299
+ './.claude-flow-novice/dist/src/cli/index.js',
300
+ './.claude-flow-novice/dist/src/cli/main.js'
301
+ ];
302
+
303
+ if (existsSync(distPath)) {
304
+ check.details.dist = { exists: true, status: 'ok' };
305
+
306
+ const missing = [];
307
+ for (const criticalPath of criticalPaths) {
308
+ if (!existsSync(path.resolve(criticalPath))) {
309
+ missing.push(criticalPath);
310
+ }
311
+ }
312
+
313
+ check.details.critical = {
314
+ total: criticalPaths.length,
315
+ missing: missing.length,
316
+ status: missing.length === 0 ? 'ok' : 'failed',
317
+ missingList: missing
318
+ };
319
+
320
+ if (missing.length > 0) {
321
+ check.errors.push(`Missing critical build artifacts: ${missing.join(', ')}`);
322
+ check.errors.push('Run: npm run build');
323
+ }
324
+ } else {
325
+ check.errors.push('Build directory not found');
326
+ check.errors.push('Run: npm run build');
327
+ }
328
+
329
+ check.status = check.errors.length === 0 ? 'passed' : 'failed';
330
+ } catch (error) {
331
+ check.status = 'error';
332
+ check.error = error.message;
333
+ }
334
+
335
+ return check;
336
+ }
337
+
338
+ /**
339
+ * Check dependencies health
340
+ */
341
+ async checkDependencies() {
342
+ const check = {
343
+ name: 'Dependencies Health',
344
+ status: 'unknown',
345
+ details: {},
346
+ errors: []
347
+ };
348
+
349
+ try {
350
+ // Check for security vulnerabilities
351
+ try {
352
+ const { stdout } = await execAsync('npm audit --json', { timeout: 10000 });
353
+ const auditData = JSON.parse(stdout);
354
+
355
+ check.details.security = {
356
+ vulnerabilities: auditData.metadata?.vulnerabilities || {},
357
+ status: (auditData.metadata?.vulnerabilities?.high || 0) > 0 ||
358
+ (auditData.metadata?.vulnerabilities?.critical || 0) > 0
359
+ ? 'warning' : 'ok'
360
+ };
361
+
362
+ if ((auditData.metadata?.vulnerabilities?.critical || 0) > 0) {
363
+ check.errors.push(`Found ${auditData.metadata.vulnerabilities.critical} critical vulnerabilities`);
364
+ }
365
+ } catch (error) {
366
+ check.details.security = {
367
+ status: 'unknown',
368
+ note: 'Unable to run security audit'
369
+ };
370
+ }
371
+
372
+ // Check for outdated packages
373
+ try {
374
+ const { stdout } = await execAsync('npm outdated --json', { timeout: 10000 });
375
+ const outdatedData = stdout.trim() ? JSON.parse(stdout) : {};
376
+ const outdatedCount = Object.keys(outdatedData).length;
377
+
378
+ check.details.updates = {
379
+ outdated: outdatedCount,
380
+ status: outdatedCount > 10 ? 'warning' : 'ok'
381
+ };
382
+ } catch (error) {
383
+ // npm outdated returns non-zero exit code when packages are outdated
384
+ check.details.updates = { status: 'ok' };
385
+ }
386
+
387
+ check.status = check.errors.length === 0 ? 'passed' : 'warning';
388
+ } catch (error) {
389
+ check.status = 'error';
390
+ check.error = error.message;
391
+ }
392
+
393
+ return check;
394
+ }
395
+
396
+ /**
397
+ * Check configuration files
398
+ */
399
+ async checkConfiguration() {
400
+ const check = {
401
+ name: 'Configuration',
402
+ status: 'unknown',
403
+ details: {},
404
+ errors: []
405
+ };
406
+
407
+ try {
408
+ const configFiles = [
409
+ 'config/production-monitoring.js',
410
+ '.swcrc',
411
+ 'config/jest/jest.config.js'
412
+ ];
413
+
414
+ const missing = [];
415
+ for (const configFile of configFiles) {
416
+ if (!existsSync(path.resolve(configFile))) {
417
+ missing.push(configFile);
418
+ }
419
+ }
420
+
421
+ check.details.files = {
422
+ total: configFiles.length,
423
+ missing: missing.length,
424
+ status: missing.length === 0 ? 'ok' : 'warning',
425
+ missingList: missing
426
+ };
427
+
428
+ if (missing.length > 0) {
429
+ check.errors.push(`Missing configuration files: ${missing.join(', ')}`);
430
+ }
431
+
432
+ check.status = check.errors.length === 0 ? 'passed' : 'warning';
433
+ } catch (error) {
434
+ check.status = 'error';
435
+ check.error = error.message;
436
+ }
437
+
438
+ return check;
439
+ }
440
+
441
+ /**
442
+ * Determine overall health status
443
+ */
444
+ determineOverallStatus() {
445
+ const statuses = this.results.checks.map(check => check.status);
446
+
447
+ if (statuses.includes('failed') || statuses.includes('error')) {
448
+ return 'unhealthy';
449
+ }
450
+
451
+ if (statuses.includes('warning')) {
452
+ return 'degraded';
453
+ }
454
+
455
+ if (statuses.every(status => status === 'passed')) {
456
+ return 'healthy';
457
+ }
458
+
459
+ return 'unknown';
460
+ }
461
+
462
+ /**
463
+ * Compare semantic versions
464
+ */
465
+ compareVersion(version, requirement) {
466
+ const cleanVersion = version.replace(/^v/, '');
467
+ const cleanRequirement = requirement.replace(/^>=/, '');
468
+
469
+ const vParts = cleanVersion.split('.').map(Number);
470
+ const rParts = cleanRequirement.split('.').map(Number);
471
+
472
+ for (let i = 0; i < 3; i++) {
473
+ if (vParts[i] > rParts[i]) return true;
474
+ if (vParts[i] < rParts[i]) return false;
475
+ }
476
+
477
+ return true; // Equal
478
+ }
479
+
480
+ /**
481
+ * Generate detailed report
482
+ */
483
+ generateReport() {
484
+ const report = {
485
+ summary: {
486
+ status: this.results.overall,
487
+ timestamp: this.results.timestamp,
488
+ totalChecks: this.results.checks.length,
489
+ passed: this.results.checks.filter(c => c.status === 'passed').length,
490
+ failed: this.results.checks.filter(c => c.status === 'failed').length,
491
+ warnings: this.results.checks.filter(c => c.status === 'warning').length,
492
+ errors: this.results.checks.filter(c => c.status === 'error').length
493
+ },
494
+ checks: this.results.checks,
495
+ recommendations: this.generateRecommendations()
496
+ };
497
+
498
+ return report;
499
+ }
500
+
501
+ /**
502
+ * Generate recommendations based on check results
503
+ */
504
+ generateRecommendations() {
505
+ const recommendations = [];
506
+
507
+ for (const check of this.results.checks) {
508
+ if (check.errors && check.errors.length > 0) {
509
+ recommendations.push({
510
+ category: check.name,
511
+ priority: check.status === 'failed' ? 'high' : 'medium',
512
+ issues: check.errors,
513
+ actions: this.getActionsForCheck(check)
514
+ });
515
+ }
516
+ }
517
+
518
+ return recommendations;
519
+ }
520
+
521
+ /**
522
+ * Get recommended actions for a failed check
523
+ */
524
+ getActionsForCheck(check) {
525
+ const actions = [];
526
+
527
+ switch (check.name) {
528
+ case 'System Requirements':
529
+ if (check.details.node?.status === 'failed') {
530
+ actions.push('Upgrade Node.js to version 20.0.0 or higher');
531
+ }
532
+ if (check.details.npm?.status === 'failed') {
533
+ actions.push('Upgrade NPM to version 9.0.0 or higher');
534
+ }
535
+ break;
536
+
537
+ case 'Package Installation':
538
+ if (check.details.nodeModules?.exists === false) {
539
+ actions.push('Run: npm install');
540
+ }
541
+ if (check.details.dependencies?.missing?.length > 0) {
542
+ actions.push('Install missing dependencies: npm install');
543
+ }
544
+ break;
545
+
546
+ case 'Redis Connectivity':
547
+ actions.push('Ensure Redis is installed and running');
548
+ actions.push('Check Redis connection settings');
549
+ break;
550
+
551
+ case 'Build Artifacts':
552
+ actions.push('Run: npm run build');
553
+ actions.push('Verify build configuration');
554
+ break;
555
+
556
+ case 'Dependencies Health':
557
+ if (check.details.security?.status === 'warning') {
558
+ actions.push('Run: npm audit fix');
559
+ actions.push('Review security vulnerabilities');
560
+ }
561
+ break;
562
+
563
+ case 'Configuration':
564
+ actions.push('Ensure all required configuration files are present');
565
+ actions.push('Run: npx claude-flow-novice init');
566
+ break;
567
+ }
568
+
569
+ return actions;
570
+ }
571
+
572
+ /**
573
+ * Print report to console
574
+ */
575
+ printReport() {
576
+ const report = this.generateReport();
577
+
578
+ console.log('\n' + '='.repeat(60));
579
+ console.log('HEALTH CHECK REPORT');
580
+ console.log('='.repeat(60));
581
+ console.log(`Overall Status: ${report.summary.status.toUpperCase()}`);
582
+ console.log(`Timestamp: ${report.summary.timestamp}`);
583
+ console.log(`Total Checks: ${report.summary.totalChecks}`);
584
+ console.log(`Passed: ${report.summary.passed} | Failed: ${report.summary.failed} | Warnings: ${report.summary.warnings}`);
585
+ console.log('='.repeat(60));
586
+
587
+ for (const check of report.checks) {
588
+ const statusIcon = check.status === 'passed' ? '✓' :
589
+ check.status === 'failed' ? '✗' :
590
+ check.status === 'warning' ? '⚠' : '?';
591
+ console.log(`\n${statusIcon} ${check.name}: ${check.status.toUpperCase()}`);
592
+
593
+ if (check.errors && check.errors.length > 0) {
594
+ check.errors.forEach(error => console.log(` - ${error}`));
595
+ }
596
+ }
597
+
598
+ if (report.recommendations.length > 0) {
599
+ console.log('\n' + '='.repeat(60));
600
+ console.log('RECOMMENDATIONS');
601
+ console.log('='.repeat(60));
602
+
603
+ for (const rec of report.recommendations) {
604
+ console.log(`\n[${rec.priority.toUpperCase()}] ${rec.category}`);
605
+ rec.actions.forEach(action => console.log(` → ${action}`));
606
+ }
607
+ }
608
+
609
+ console.log('\n' + '='.repeat(60));
610
+ }
611
+ }
612
+
613
+ // CLI interface
614
+ if (import.meta.url === `file://${process.argv[1]}`) {
615
+ const healthCheck = new HealthCheckSystem({ verbose: true });
616
+
617
+ (async () => {
618
+ await healthCheck.runAll();
619
+ healthCheck.printReport();
620
+
621
+ const report = healthCheck.generateReport();
622
+
623
+ // Exit with appropriate code
624
+ if (report.summary.status === 'healthy') {
625
+ process.exit(0);
626
+ } else if (report.summary.status === 'degraded') {
627
+ process.exit(1);
628
+ } else {
629
+ process.exit(2);
630
+ }
631
+ })();
632
+ }
633
+
634
+ export default HealthCheckSystem;
@@ -0,0 +1,54 @@
1
+ #!/bin/bash
2
+
3
+ # Hook wrapper that prevents exit code errors
4
+ # This ensures hooks never block operations
5
+
6
+ HOOK_TYPE="$1"
7
+ shift
8
+
9
+ # Run the actual hook command but ignore exit codes
10
+ case "$HOOK_TYPE" in
11
+ "pre-edit")
12
+ # Pre-edit hooks
13
+ if [ "$1" = "--file" ] && [ -n "$2" ]; then
14
+ echo "Pre-edit hook for: $2" > /dev/null
15
+ fi
16
+ ;;
17
+ "post-edit")
18
+ # Run post-edit pipeline if it exists
19
+ if [ "$1" = "--file" ] && [ -n "$2" ]; then
20
+ if [ -f "config/hooks/post-edit-pipeline.js" ]; then
21
+ node config/hooks/post-edit-pipeline.js "$@" 2>/dev/null || true
22
+ fi
23
+ fi
24
+ ;;
25
+ "session-start")
26
+ # Clean up idle Claude sessions
27
+ if [ -f "scripts/cleanup-idle-sessions.sh" ]; then
28
+ bash scripts/cleanup-idle-sessions.sh 2>/dev/null || echo "Cleanup skipped" > /dev/null
29
+ fi
30
+ # Load project soul
31
+ if [ -f "src/cli/simple-commands/hooks/session-start-soul.js" ]; then
32
+ node src/cli/simple-commands/hooks/session-start-soul.js 2>/dev/null || true
33
+ fi
34
+ ;;
35
+ "session-end")
36
+ # Session end cleanup
37
+ if [ "$1" = "--generate-summary" ] && [ "$2" = "true" ]; then
38
+ echo "Generating session summary..." > /dev/null
39
+ fi
40
+ if [ "$1" = "--persist-state" ] && [ "$2" = "true" ]; then
41
+ echo "Persisting session state..." > /dev/null
42
+ fi
43
+ if [ "$1" = "--export-metrics" ] && [ "$2" = "true" ]; then
44
+ echo "Exporting session metrics..." > /dev/null
45
+ fi
46
+ # Run soul cleanup
47
+ if [ -f "src/cli/simple-commands/hooks/session-start-soul.js" ]; then
48
+ node src/cli/simple-commands/hooks/session-start-soul.js --cleanup 2>/dev/null || true
49
+ fi
50
+ ;;
51
+ esac
52
+
53
+ # Always exit with success code 0
54
+ exit 0