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,461 @@
1
+ #!/usr/bin/env node
2
+
3
+ /**
4
+ * Claude Flow Novice - Update Script
5
+ *
6
+ * Handles seamless updates while preserving user configurations
7
+ */
8
+
9
+ import { execSync, spawn } from 'child_process';
10
+ import { existsSync, writeFileSync, readFileSync, copyFileSync, renameSync } from 'fs';
11
+ import { join, dirname, resolve } from 'path';
12
+ import { homedir, platform } from 'os';
13
+ import chalk from 'chalk';
14
+ import ora from 'ora';
15
+ import semver from 'semver';
16
+
17
+ class UpdateManager {
18
+ constructor() {
19
+ this.platform = platform();
20
+ this.homeDir = homedir();
21
+ this.configDir = join(this.homeDir, '.claude-flow-novice', 'config');
22
+ this.backupDir = join(this.homeDir, '.claude-flow-novice', 'backups');
23
+ this.currentVersion = null;
24
+ this.latestVersion = null;
25
+ }
26
+
27
+ async update() {
28
+ console.log(chalk.blue.bold('๐Ÿ”„ Claude Flow Novice Update\n'));
29
+
30
+ try {
31
+ await this.checkCurrentVersion();
32
+ await this.checkForUpdates();
33
+ await this.createBackup();
34
+ await this.downloadUpdate();
35
+ await this.installUpdate();
36
+ await this.migrateConfigurations();
37
+ await this.verifyUpdate();
38
+ await this.cleanup();
39
+
40
+ this.showUpdateSuccess();
41
+ } catch (error) {
42
+ console.error(chalk.red('โŒ Update failed:'), error.message);
43
+ await this.restoreBackup();
44
+ process.exit(1);
45
+ }
46
+ }
47
+
48
+ async checkCurrentVersion() {
49
+ const spinner = ora('Checking current version...').start();
50
+
51
+ try {
52
+ const packageJsonPath = join(this.homeDir, '.claude-flow-novice', 'package.json');
53
+
54
+ if (existsSync(packageJsonPath)) {
55
+ const packageJson = JSON.parse(readFileSync(packageJsonPath, 'utf8'));
56
+ this.currentVersion = packageJson.version;
57
+ } else {
58
+ // Try to get version from npm
59
+ const output = execSync('npm list -g claude-flow-novice --depth=0 --json', { encoding: 'utf8' });
60
+ const data = JSON.parse(output);
61
+ this.currentVersion = data.dependencies?.['claude-flow-novice']?.version;
62
+ }
63
+
64
+ if (!this.currentVersion) {
65
+ throw new Error('Unable to determine current version');
66
+ }
67
+
68
+ spinner.succeed(`Current version: ${this.currentVersion}`);
69
+ } catch (error) {
70
+ spinner.fail('Failed to check current version');
71
+ throw error;
72
+ }
73
+ }
74
+
75
+ async checkForUpdates() {
76
+ const spinner = ora('Checking for updates...').start();
77
+
78
+ try {
79
+ // Get latest version from npm registry
80
+ const output = execSync('npm view claude-flow-novice version', { encoding: 'utf8' });
81
+ this.latestVersion = output.trim();
82
+
83
+ if (semver.gt(this.latestVersion, this.currentVersion)) {
84
+ spinner.succeed(`Update available: ${this.currentVersion} โ†’ ${this.latestVersion}`);
85
+ } else {
86
+ spinner.info('You already have the latest version');
87
+ process.exit(0);
88
+ }
89
+ } catch (error) {
90
+ spinner.fail('Failed to check for updates');
91
+ throw error;
92
+ }
93
+ }
94
+
95
+ async createBackup() {
96
+ const spinner = ora('Creating backup...').start();
97
+
98
+ try {
99
+ const timestamp = new Date().toISOString().replace(/[:.]/g, '-');
100
+ const backupPath = join(this.backupDir, `backup-${timestamp}`);
101
+
102
+ // Create backup directory
103
+ if (!existsSync(this.backupPath)) {
104
+ require('fs').mkdirSync(this.backupPath, { recursive: true });
105
+ }
106
+
107
+ // Backup configuration files
108
+ const configFiles = [
109
+ 'config.json',
110
+ 'redis.json',
111
+ 'services.json',
112
+ '.env'
113
+ ];
114
+
115
+ for (const file of configFiles) {
116
+ const sourcePath = join(this.configDir, file);
117
+ if (existsSync(sourcePath)) {
118
+ copyFileSync(sourcePath, join(backupPath, file));
119
+ }
120
+ }
121
+
122
+ // Backup package.json and package-lock.json if they exist
123
+ const projectRoot = process.cwd();
124
+ const packageFiles = ['package.json', 'package-lock.json'];
125
+
126
+ for (const file of packageFiles) {
127
+ const sourcePath = join(projectRoot, file);
128
+ if (existsSync(sourcePath)) {
129
+ copyFileSync(sourcePath, join(backupPath, file));
130
+ }
131
+ }
132
+
133
+ // Store backup metadata
134
+ const metadata = {
135
+ timestamp,
136
+ version: this.currentVersion,
137
+ platform: this.platform,
138
+ nodeVersion: process.version,
139
+ backupPath
140
+ };
141
+
142
+ writeFileSync(join(backupPath, 'metadata.json'), JSON.stringify(metadata, null, 2));
143
+
144
+ spinner.succeed(`Backup created: ${backupPath}`);
145
+ this.backupPath = backupPath;
146
+ } catch (error) {
147
+ spinner.fail('Backup creation failed');
148
+ throw error;
149
+ }
150
+ }
151
+
152
+ async downloadUpdate() {
153
+ const spinner = ora('Downloading update...').start();
154
+
155
+ try {
156
+ // Update npm package
157
+ await this.executeCommand('npm update -g claude-flow-novice', { timeout: 300000 });
158
+
159
+ spinner.succeed('Update downloaded successfully');
160
+ } catch (error) {
161
+ spinner.fail('Download failed');
162
+ throw error;
163
+ }
164
+ }
165
+
166
+ async installUpdate() {
167
+ const spinner = ora('Installing update...').start();
168
+
169
+ try {
170
+ // Stop services before update
171
+ const serviceManager = new (await import('./service-manager.js')).default();
172
+ await serviceManager.stopAllServices();
173
+
174
+ // Install new version
175
+ await this.executeCommand('npm install -g claude-flow-novice@latest', { timeout: 300000 });
176
+
177
+ spinner.succeed('Update installed successfully');
178
+ } catch (error) {
179
+ spinner.fail('Installation failed');
180
+ throw error;
181
+ }
182
+ }
183
+
184
+ async migrateConfigurations() {
185
+ const spinner = ora('Migrating configurations...').start();
186
+
187
+ try {
188
+ const configPath = join(this.configDir, 'config.json');
189
+ const currentConfig = existsSync(configPath)
190
+ ? JSON.parse(readFileSync(configPath, 'utf8'))
191
+ : {};
192
+
193
+ // Check if configuration migration is needed
194
+ const needsMigration = this.checkConfigurationMigration(currentConfig);
195
+
196
+ if (needsMigration) {
197
+ const migratedConfig = await this.performConfigurationMigration(currentConfig);
198
+ writeFileSync(configPath, JSON.stringify(migratedConfig, null, 2));
199
+ }
200
+
201
+ // Update version in configuration
202
+ currentConfig.version = this.latestVersion;
203
+ currentConfig.updatedAt = new Date().toISOString();
204
+
205
+ writeFileSync(configPath, JSON.stringify(currentConfig, null, 2));
206
+
207
+ spinner.succeed('Configuration migration completed');
208
+ } catch (error) {
209
+ spinner.fail('Configuration migration failed');
210
+ throw error;
211
+ }
212
+ }
213
+
214
+ checkConfigurationMigration(config) {
215
+ // Check for old configuration format that needs migration
216
+ if (!config.version || semver.lt(config.version, '1.6.0')) {
217
+ return true;
218
+ }
219
+
220
+ // Check for missing new configuration options
221
+ if (!config.features?.mcp && !config.features?.dashboard) {
222
+ return true;
223
+ }
224
+
225
+ return false;
226
+ }
227
+
228
+ async performConfigurationMigration(oldConfig) {
229
+ const newConfig = { ...oldConfig };
230
+
231
+ // Add missing default values
232
+ if (!newConfig.features) {
233
+ newConfig.features = {};
234
+ }
235
+
236
+ if (newConfig.features.mcp === undefined) {
237
+ newConfig.features.mcp = true;
238
+ }
239
+
240
+ if (newConfig.features.dashboard === undefined) {
241
+ newConfig.features.dashboard = true;
242
+ }
243
+
244
+ if (newConfig.features.monitoring === undefined) {
245
+ newConfig.features.monitoring = true;
246
+ }
247
+
248
+ if (!newConfig.paths) {
249
+ newConfig.paths = {
250
+ data: join(this.homeDir, '.claude-flow-novice'),
251
+ logs: join(this.homeDir, '.claude-flow-novice', 'logs'),
252
+ config: this.configDir,
253
+ temp: join(this.homeDir, '.claude-flow-novice', 'temp')
254
+ };
255
+ }
256
+
257
+ return newConfig;
258
+ }
259
+
260
+ async verifyUpdate() {
261
+ const spinner = ora('Verifying update...').start();
262
+
263
+ try {
264
+ // Check if the new version is installed
265
+ const output = execSync('npm list -g claude-flow-novice --depth=0 --json', { encoding: 'utf8' });
266
+ const data = JSON.parse(output);
267
+ const installedVersion = data.dependencies?.['claude-flow-novice']?.version;
268
+
269
+ if (installedVersion !== this.latestVersion) {
270
+ throw new Error(`Version mismatch. Expected ${this.latestVersion}, got ${installedVersion}`);
271
+ }
272
+
273
+ // Test basic functionality
274
+ execSync('claude-flow-novice --version', { stdio: 'ignore' });
275
+
276
+ // Start services
277
+ const serviceManager = new (await import('./service-manager.js')).default();
278
+ await serviceManager.startAllServices();
279
+
280
+ spinner.succeed('Update verified successfully');
281
+ } catch (error) {
282
+ spinner.fail('Update verification failed');
283
+ throw error;
284
+ }
285
+ }
286
+
287
+ async cleanup() {
288
+ const spinner = ora('Cleaning up...').start();
289
+
290
+ try {
291
+ // Remove old backup files (keep last 5)
292
+ await this.cleanupOldBackups();
293
+
294
+ // Clear temporary files
295
+ const tempDir = join(this.homeDir, '.claude-flow-novice', 'temp');
296
+ if (existsSync(tempDir)) {
297
+ await this.executeCommand(`rm -rf "${tempDir}"/*`, { timeout: 30000 });
298
+ }
299
+
300
+ spinner.succeed('Cleanup completed');
301
+ } catch (error) {
302
+ spinner.warn('Cleanup completed with warnings');
303
+ console.warn(chalk.yellow('Some cleanup operations failed'));
304
+ }
305
+ }
306
+
307
+ async cleanupOldBackups() {
308
+ try {
309
+ const backups = require('fs').readdirSync(this.backupDir)
310
+ .filter(name => name.startsWith('backup-'))
311
+ .map(name => ({
312
+ name,
313
+ path: join(this.backupDir, name),
314
+ mtime: require('fs').statSync(join(this.backupDir, name)).mtime
315
+ }))
316
+ .sort((a, b) => b.mtime - a.mtime);
317
+
318
+ // Keep only the latest 5 backups
319
+ const backupsToDelete = backups.slice(5);
320
+
321
+ for (const backup of backupsToDelete) {
322
+ await this.executeCommand(`rm -rf "${backup.path}"`, { timeout: 30000 });
323
+ }
324
+ } catch (error) {
325
+ // Ignore cleanup errors
326
+ }
327
+ }
328
+
329
+ async restoreBackup() {
330
+ if (!this.backupPath) {
331
+ console.error(chalk.red('No backup available for restoration'));
332
+ return;
333
+ }
334
+
335
+ const spinner = ora('Restoring backup...').start();
336
+
337
+ try {
338
+ // Stop services
339
+ const serviceManager = new (await import('./service-manager.js')).default();
340
+ await serviceManager.stopAllServices();
341
+
342
+ // Restore configuration files
343
+ const configFiles = [
344
+ 'config.json',
345
+ 'redis.json',
346
+ 'services.json',
347
+ '.env'
348
+ ];
349
+
350
+ for (const file of configFiles) {
351
+ const backupFilePath = join(this.backupPath, file);
352
+ const configFilePath = join(this.configDir, file);
353
+
354
+ if (existsSync(backupFilePath)) {
355
+ copyFileSync(backupFilePath, configFilePath);
356
+ }
357
+ }
358
+
359
+ // Restore previous version
360
+ if (this.currentVersion) {
361
+ await this.executeCommand(`npm install -g claude-flow-novice@${this.currentVersion}`, { timeout: 300000 });
362
+ }
363
+
364
+ spinner.succeed('Backup restored successfully');
365
+ console.log(chalk.green('\nโœ… System has been restored to the previous version'));
366
+ } catch (error) {
367
+ spinner.fail('Backup restoration failed');
368
+ console.error(chalk.red('Critical: Backup restoration failed. Manual intervention required.'));
369
+ }
370
+ }
371
+
372
+ showUpdateSuccess() {
373
+ console.log(chalk.green.bold('\n๐ŸŽ‰ Update completed successfully!\n'));
374
+ console.log(chalk.cyan(`Updated from version ${this.currentVersion} to ${this.latestVersion}\n`));
375
+
376
+ console.log(chalk.blue('What\'s new:'));
377
+ console.log(chalk.white('โ€ข Enhanced swarm coordination algorithms'));
378
+ console.log(chalk.white('โ€ข Improved performance monitoring'));
379
+ console.log(chalk.white('โ€ข New MCP server features'));
380
+ console.log(chalk.white('โ€ข Updated security enhancements\n'));
381
+
382
+ console.log(chalk.yellow('Next steps:'));
383
+ console.log(chalk.white('1. Review the changelog for new features'));
384
+ console.log(chalk.white('2. Test your existing workflows'));
385
+ console.log(chalk.white('3. Update your custom configurations if needed\n'));
386
+
387
+ console.log(chalk.green('All your configurations and data have been preserved.'));
388
+ }
389
+
390
+ async executeCommand(command, options = {}) {
391
+ return new Promise((resolve, reject) => {
392
+ const child = spawn(command, [], {
393
+ shell: true,
394
+ stdio: 'pipe',
395
+ ...options
396
+ });
397
+
398
+ let stdout = '';
399
+ let stderr = '';
400
+
401
+ child.stdout?.on('data', (data) => stdout += data.toString());
402
+ child.stderr?.on('data', (data) => stderr += data.toString());
403
+
404
+ child.on('close', (code) => {
405
+ if (code === 0) {
406
+ resolve({ stdout, stderr });
407
+ } else {
408
+ reject(new Error(`Command failed with code ${code}: ${stderr}`));
409
+ }
410
+ });
411
+
412
+ child.on('error', reject);
413
+
414
+ if (options.timeout) {
415
+ setTimeout(() => {
416
+ child.kill();
417
+ reject(new Error('Command timeout'));
418
+ }, options.timeout);
419
+ }
420
+ });
421
+ }
422
+ }
423
+
424
+ // Additional command for checking updates without installing
425
+ async function checkUpdatesOnly() {
426
+ const manager = new UpdateManager();
427
+
428
+ try {
429
+ await manager.checkCurrentVersion();
430
+ await manager.checkForUpdates();
431
+
432
+ console.log(chalk.green('\nโœ… Your installation is up to date!'));
433
+ } catch (error) {
434
+ console.error(chalk.red('โŒ Update check failed:'), error.message);
435
+ process.exit(1);
436
+ }
437
+ }
438
+
439
+ // CLI Interface
440
+ async function main() {
441
+ const command = process.argv[2];
442
+
443
+ switch (command) {
444
+ case 'check':
445
+ await checkUpdatesOnly();
446
+ break;
447
+ case 'restore':
448
+ const manager = new UpdateManager();
449
+ await manager.restoreBackup();
450
+ break;
451
+ default:
452
+ const updateManager = new UpdateManager();
453
+ await updateManager.update();
454
+ }
455
+ }
456
+
457
+ if (import.meta.url === `file://${process.argv[1]}`) {
458
+ main();
459
+ }
460
+
461
+ export default UpdateManager;
@@ -0,0 +1,127 @@
1
+ #!/bin/bash
2
+ # Install pre-commit hook for database secret scanning
3
+ # Part of claude-flow-novice security infrastructure
4
+
5
+ set -e
6
+
7
+ HOOK_SOURCE="config/hooks/pre-commit-db-scan"
8
+ HOOK_TARGET=".git/hooks/pre-commit"
9
+
10
+ echo "๐Ÿ”ง Installing pre-commit hook for database secret scanning..."
11
+ echo "โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”"
12
+
13
+ # Check if source exists
14
+ if [ ! -f "$HOOK_SOURCE" ]; then
15
+ echo "โŒ Error: Hook source not found: $HOOK_SOURCE"
16
+ echo " Please run this script from the project root directory"
17
+ exit 1
18
+ fi
19
+
20
+ # Check if .git exists
21
+ if [ ! -d ".git" ]; then
22
+ echo "โŒ Error: Not a git repository"
23
+ echo " This script must be run from a git repository root"
24
+ exit 1
25
+ fi
26
+
27
+ # Check for required dependencies
28
+ echo ""
29
+ echo "๐Ÿ“‹ Checking dependencies..."
30
+
31
+ if ! command -v sqlite3 &> /dev/null; then
32
+ echo "โŒ Error: sqlite3 command not found"
33
+ echo " Install with: sudo apt-get install sqlite3 (Ubuntu/Debian)"
34
+ echo " or: brew install sqlite (macOS)"
35
+ exit 1
36
+ fi
37
+ echo " โœ… sqlite3 found"
38
+
39
+ if ! command -v git &> /dev/null; then
40
+ echo "โŒ Error: git command not found"
41
+ exit 1
42
+ fi
43
+ echo " โœ… git found"
44
+
45
+ # Backup existing hook if present
46
+ if [ -f "$HOOK_TARGET" ]; then
47
+ BACKUP_FILE="$HOOK_TARGET.backup-$(date +%s)"
48
+ echo ""
49
+ echo "โš ๏ธ Existing pre-commit hook found"
50
+ echo " Backing up to: $BACKUP_FILE"
51
+ cp "$HOOK_TARGET" "$BACKUP_FILE"
52
+ echo " โœ… Backup created"
53
+ fi
54
+
55
+ # Copy and install hook
56
+ echo ""
57
+ echo "๐Ÿ“ฆ Installing hook..."
58
+ cp "$HOOK_SOURCE" "$HOOK_TARGET"
59
+ chmod +x "$HOOK_TARGET"
60
+ echo " โœ… Hook copied to: $HOOK_TARGET"
61
+ echo " โœ… Hook made executable"
62
+
63
+ # Verify installation
64
+ if [ ! -x "$HOOK_TARGET" ]; then
65
+ echo "โŒ Error: Hook is not executable"
66
+ exit 1
67
+ fi
68
+
69
+ echo ""
70
+ echo "โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”"
71
+ echo "โœ… Pre-commit hook installed successfully!"
72
+ echo "โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”"
73
+
74
+ # Show what the hook does
75
+ echo ""
76
+ echo "๐Ÿ”’ Security Protection Enabled:"
77
+ echo " โ€ข Scans SQLite/database files for secrets before commits"
78
+ echo " โ€ข Detects API keys, passwords, tokens, credentials"
79
+ echo " โ€ข Prevents accidental secret leakage in version control"
80
+ echo ""
81
+ echo "๐Ÿ“‹ Secret Patterns Detected:"
82
+ echo " โ€ข api_key, api-key variations"
83
+ echo " โ€ข password, secret, token"
84
+ echo " โ€ข ZAI_API_KEY, ANTHROPIC_API_KEY"
85
+ echo " โ€ข Bearer tokens, private keys"
86
+ echo " โ€ข Anthropic API keys (sk-ant-*)"
87
+ echo " โ€ข Session tokens (sess-*)"
88
+ echo ""
89
+
90
+ # Test hook
91
+ echo "๐Ÿงช Testing hook installation..."
92
+ echo ""
93
+
94
+ # Create a temporary test database with clean data
95
+ TEST_DB=".test-hook-validation.db"
96
+ sqlite3 "$TEST_DB" "CREATE TABLE test (id INTEGER, data TEXT); INSERT INTO test VALUES (1, 'clean test data');" 2>/dev/null || true
97
+
98
+ if [ -f "$TEST_DB" ]; then
99
+ # Stage the test file
100
+ git add "$TEST_DB" 2>/dev/null || true
101
+
102
+ # Run the hook
103
+ if bash "$HOOK_TARGET" > /dev/null 2>&1; then
104
+ echo "โœ… Hook test passed - clean database accepted"
105
+ else
106
+ echo "โš ๏ธ Hook test had issues - but installation is complete"
107
+ fi
108
+
109
+ # Clean up
110
+ git reset HEAD "$TEST_DB" 2>/dev/null || true
111
+ rm -f "$TEST_DB"
112
+ else
113
+ echo "โš ๏ธ Could not create test database - skipping test"
114
+ echo " Hook is installed but not tested"
115
+ fi
116
+
117
+ echo ""
118
+ echo "โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”"
119
+ echo "๐Ÿ“– Usage:"
120
+ echo " โ€ข Hook runs automatically on: git commit"
121
+ echo " โ€ข To bypass (NOT RECOMMENDED): git commit --no-verify"
122
+ echo " โ€ข To uninstall: rm .git/hooks/pre-commit"
123
+ echo ""
124
+ echo "๐Ÿ“š Documentation: docs/PRE_COMMIT_HOOK.md"
125
+ echo "โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”"
126
+ echo ""
127
+ echo "๐Ÿš€ Ready to protect your repository from secret leaks!"