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,311 @@
1
+ #!/bin/bash
2
+
3
+ # Claude Flow Personal Web Portal Stop Script
4
+ # Graceful shutdown script for the web portal system
5
+
6
+ set -euo pipefail
7
+
8
+ # Configuration
9
+ SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
10
+ PROJECT_ROOT="$(cd "$SCRIPT_DIR/.." && pwd)"
11
+ PID_FILE="$PROJECT_ROOT/.portal.pid"
12
+ FRONTEND_PID_FILE="$PROJECT_ROOT/.frontend.pid"
13
+
14
+ # Colors for output
15
+ RED='\033[0;31m'
16
+ GREEN='\033[0;32m'
17
+ YELLOW='\033[1;33m'
18
+ BLUE='\033[0;34m'
19
+ NC='\033[0m' # No Color
20
+
21
+ # Logging
22
+ log() {
23
+ echo -e "${GREEN}[$(date +'%Y-%m-%d %H:%M:%S')]${NC} $1"
24
+ }
25
+
26
+ warn() {
27
+ echo -e "${YELLOW}[$(date +'%Y-%m-%d %H:%M:%S')] WARNING:${NC} $1"
28
+ }
29
+
30
+ error() {
31
+ echo -e "${RED}[$(date +'%Y-%m-%d %H:%M:%S')] ERROR:${NC} $1"
32
+ }
33
+
34
+ info() {
35
+ echo -e "${BLUE}[$(date +'%Y-%m-%d %H:%M:%S')] INFO:${NC} $1"
36
+ }
37
+
38
+ # Function to check if a command exists
39
+ command_exists() {
40
+ command -v "$1" >/dev/null 2>&1
41
+ }
42
+
43
+ # Function to stop portal processes
44
+ stop_portal() {
45
+ log "🛑 Stopping Claude Flow Personal Web Portal..."
46
+
47
+ local processes_stopped=false
48
+
49
+ # Stop PM2 processes first
50
+ if command_exists pm2; then
51
+ if pm2 list 2>/dev/null | grep -q "claude-flow-portal"; then
52
+ info "Stopping PM2 process: claude-flow-portal"
53
+ pm2 stop claude-flow-portal 2>/dev/null || warn "Failed to stop PM2 process"
54
+ pm2 delete claude-flow-portal 2>/dev/null || warn "Failed to delete PM2 process"
55
+ processes_stopped=true
56
+ fi
57
+ fi
58
+
59
+ # Stop main portal server process
60
+ if [[ -f "$PID_FILE" ]]; then
61
+ local portal_pid
62
+ portal_pid=$(cat "$PID_FILE")
63
+
64
+ if kill -0 "$portal_pid" 2>/dev/null; then
65
+ info "Stopping portal server process (PID: $portal_pid)..."
66
+ kill -TERM "$portal_pid" 2>/dev/null || kill -KILL "$portal_pid" 2>/dev/null || true
67
+
68
+ # Wait for graceful shutdown
69
+ for i in {1..10}; do
70
+ if ! kill -0 "$portal_pid" 2>/dev/null; then
71
+ break
72
+ fi
73
+ sleep 1
74
+ done
75
+
76
+ # Force kill if still running
77
+ if kill -0 "$portal_pid" 2>/dev/null; then
78
+ warn "Force killing portal server process..."
79
+ kill -KILL "$portal_pid" 2>/dev/null || true
80
+ fi
81
+
82
+ processes_stopped=true
83
+ fi
84
+
85
+ rm -f "$PID_FILE"
86
+ fi
87
+
88
+ # Stop frontend development server
89
+ if [[ -f "$FRONTEND_PID_FILE" ]]; then
90
+ local frontend_pid
91
+ frontend_pid=$(cat "$FRONTEND_PID_FILE")
92
+
93
+ if kill -0 "$frontend_pid" 2>/dev/null; then
94
+ info "Stopping frontend development server (PID: $frontend_pid)..."
95
+ kill -TERM "$frontend_pid" 2>/dev/null || kill -KILL "$frontend_pid" 2>/dev/null || true
96
+ processes_stopped=true
97
+ fi
98
+
99
+ rm -f "$FRONTEND_PID_FILE"
100
+ fi
101
+
102
+ # Kill any remaining processes by name
103
+ local portal_processes
104
+ portal_processes=$(pgrep -f "portal-server" 2>/dev/null || true)
105
+ if [[ -n "$portal_processes" ]]; then
106
+ info "Stopping remaining portal server processes..."
107
+ echo "$portal_processes" | xargs -r kill -TERM 2>/dev/null || true
108
+ sleep 2
109
+ echo "$portal_processes" | xargs -r kill -KILL 2>/dev/null || true
110
+ processes_stopped=true
111
+ fi
112
+
113
+ # Kill any remaining React development servers
114
+ local react_processes
115
+ react_processes=$(pgrep -f "react-scripts" 2>/dev/null || true)
116
+ if [[ -n "$react_processes" ]]; then
117
+ info "Stopping React development servers..."
118
+ echo "$react_processes" | xargs -r kill -TERM 2>/dev/null || true
119
+ sleep 2
120
+ echo "$react_processes" | xargs -r kill -KILL 2>/dev/null || true
121
+ processes_stopped=true
122
+ fi
123
+
124
+ if [[ "$processes_stopped" == true ]]; then
125
+ log "✅ Portal processes stopped successfully"
126
+ else
127
+ warn "No running portal processes found"
128
+ fi
129
+ }
130
+
131
+ # Function to execute coordination hooks
132
+ execute_shutdown_hooks() {
133
+ log "🪝 Executing shutdown coordination hooks..."
134
+
135
+ # Session-end hook for portal shutdown
136
+ if command_exists npx && npx claude-flow@alpha --version >/dev/null 2>&1; then
137
+ info "Executing Claude Flow session-end hook..."
138
+ npx claude-flow@alpha hooks session-end \
139
+ --export-metrics true \
140
+ --save-state true \
141
+ --reason "manual-shutdown" || warn "Session-end hook failed"
142
+ else
143
+ warn "Claude Flow not available, skipping coordination hooks"
144
+ fi
145
+
146
+ log "✅ Shutdown hooks complete"
147
+ }
148
+
149
+ # Function to cleanup temporary files
150
+ cleanup_files() {
151
+ log "🧹 Cleaning up temporary files..."
152
+
153
+ # Remove PID files
154
+ rm -f "$PID_FILE" "$FRONTEND_PID_FILE"
155
+
156
+ # Clean up temporary directories if they exist and are empty
157
+ local temp_dirs=("$PROJECT_ROOT/.tmp" "$PROJECT_ROOT/tmp")
158
+ for dir in "${temp_dirs[@]}"; do
159
+ if [[ -d "$dir" ]] && [[ -z "$(ls -A "$dir" 2>/dev/null)" ]]; then
160
+ rmdir "$dir" 2>/dev/null || true
161
+ fi
162
+ done
163
+
164
+ log "✅ Cleanup complete"
165
+ }
166
+
167
+ # Function to show status
168
+ show_status() {
169
+ log "📊 Portal Status Check"
170
+ echo ""
171
+
172
+ # Check for running processes
173
+ local portal_running=false
174
+ local frontend_running=false
175
+
176
+ if [[ -f "$PID_FILE" ]]; then
177
+ local portal_pid
178
+ portal_pid=$(cat "$PID_FILE")
179
+ if kill -0 "$portal_pid" 2>/dev/null; then
180
+ info "✅ Portal server running (PID: $portal_pid)"
181
+ portal_running=true
182
+ else
183
+ warn "❌ Portal server not running (stale PID file)"
184
+ rm -f "$PID_FILE"
185
+ fi
186
+ fi
187
+
188
+ if [[ -f "$FRONTEND_PID_FILE" ]]; then
189
+ local frontend_pid
190
+ frontend_pid=$(cat "$FRONTEND_PID_FILE")
191
+ if kill -0 "$frontend_pid" 2>/dev/null; then
192
+ info "✅ Frontend dev server running (PID: $frontend_pid)"
193
+ frontend_running=true
194
+ else
195
+ warn "❌ Frontend dev server not running (stale PID file)"
196
+ rm -f "$FRONTEND_PID_FILE"
197
+ fi
198
+ fi
199
+
200
+ # Check PM2 processes
201
+ if command_exists pm2; then
202
+ if pm2 list 2>/dev/null | grep -q "claude-flow-portal"; then
203
+ info "✅ PM2 process running"
204
+ portal_running=true
205
+ fi
206
+ fi
207
+
208
+ # Check by process name
209
+ if pgrep -f "portal-server" >/dev/null 2>&1; then
210
+ info "✅ Portal server process found"
211
+ portal_running=true
212
+ fi
213
+
214
+ if pgrep -f "react-scripts" >/dev/null 2>&1; then
215
+ info "✅ React dev server process found"
216
+ frontend_running=true
217
+ fi
218
+
219
+ echo ""
220
+ if [[ "$portal_running" == false ]] && [[ "$frontend_running" == false ]]; then
221
+ log "🔴 No portal processes running"
222
+ else
223
+ log "🟢 Portal processes are running"
224
+ fi
225
+ }
226
+
227
+ # Function to show help
228
+ show_help() {
229
+ cat << EOF
230
+ Claude Flow Personal Web Portal Stop Script
231
+
232
+ Usage: $0 [OPTIONS]
233
+
234
+ Options:
235
+ -h, --help Show this help message
236
+ -s, --status Show portal status without stopping
237
+ -f, --force Force kill all processes
238
+ --skip-hooks Skip coordination hooks
239
+ --verbose Enable verbose logging
240
+
241
+ Examples:
242
+ $0 # Stop portal gracefully
243
+ $0 --status # Check portal status
244
+ $0 --force # Force stop all processes
245
+
246
+ For more information, visit:
247
+ https://github.com/ruvnet/claude-flow
248
+ EOF
249
+ }
250
+
251
+ # Parse command line arguments
252
+ FORCE_STOP=false
253
+ SKIP_HOOKS=false
254
+ VERBOSE=false
255
+ STATUS_ONLY=false
256
+
257
+ while [[ $# -gt 0 ]]; do
258
+ case $1 in
259
+ -h|--help)
260
+ show_help
261
+ exit 0
262
+ ;;
263
+ -s|--status)
264
+ STATUS_ONLY=true
265
+ shift
266
+ ;;
267
+ -f|--force)
268
+ FORCE_STOP=true
269
+ shift
270
+ ;;
271
+ --skip-hooks)
272
+ SKIP_HOOKS=true
273
+ shift
274
+ ;;
275
+ --verbose)
276
+ VERBOSE=true
277
+ set -x
278
+ shift
279
+ ;;
280
+ *)
281
+ error "Unknown option: $1"
282
+ show_help
283
+ exit 1
284
+ ;;
285
+ esac
286
+ done
287
+
288
+ # Main execution
289
+ main() {
290
+ if [[ "$STATUS_ONLY" == true ]]; then
291
+ show_status
292
+ exit 0
293
+ fi
294
+
295
+ log "🛑 Claude Flow Personal Web Portal Shutdown"
296
+ echo ""
297
+
298
+ if [[ "$SKIP_HOOKS" != true ]]; then
299
+ execute_shutdown_hooks
300
+ else
301
+ warn "Skipping coordination hooks as requested"
302
+ fi
303
+
304
+ stop_portal
305
+ cleanup_files
306
+
307
+ log "✅ Claude Flow Personal Web Portal stopped successfully"
308
+ }
309
+
310
+ # Run main function
311
+ main "$@"
@@ -0,0 +1,288 @@
1
+ #!/usr/bin/env deno run --allow-read
2
+
3
+ /**
4
+ * Example Configuration Validator
5
+ * Validates all example configuration files for correctness
6
+ */
7
+
8
+ import { walk } from "https://deno.land/std@0.220.0/fs/mod.ts";
9
+
10
+ interface ValidationResult {
11
+ file: string;
12
+ valid: boolean;
13
+ errors: string[];
14
+ }
15
+
16
+ interface ConfigSchema {
17
+ [key: string]: {
18
+ type: string;
19
+ required?: boolean;
20
+ properties?: ConfigSchema;
21
+ };
22
+ }
23
+
24
+ const CLAUDE_FLOW_CONFIG_SCHEMA: ConfigSchema = {
25
+ orchestrator: {
26
+ type: 'object',
27
+ required: true,
28
+ properties: {
29
+ maxConcurrentAgents: { type: 'number' },
30
+ taskQueueSize: { type: 'number' },
31
+ healthCheckInterval: { type: 'number' },
32
+ shutdownTimeout: { type: 'number' },
33
+ },
34
+ },
35
+ terminal: {
36
+ type: 'object',
37
+ properties: {
38
+ type: { type: 'string' },
39
+ poolSize: { type: 'number' },
40
+ recycleAfter: { type: 'number' },
41
+ healthCheckInterval: { type: 'number' },
42
+ commandTimeout: { type: 'number' },
43
+ },
44
+ },
45
+ memory: {
46
+ type: 'object',
47
+ properties: {
48
+ backend: { type: 'string' },
49
+ cacheSizeMB: { type: 'number' },
50
+ syncInterval: { type: 'number' },
51
+ conflictResolution: { type: 'string' },
52
+ retentionDays: { type: 'number' },
53
+ },
54
+ },
55
+ coordination: {
56
+ type: 'object',
57
+ properties: {
58
+ maxRetries: { type: 'number' },
59
+ retryDelay: { type: 'number' },
60
+ deadlockDetection: { type: 'boolean' },
61
+ resourceTimeout: { type: 'number' },
62
+ messageTimeout: { type: 'number' },
63
+ },
64
+ },
65
+ mcp: {
66
+ type: 'object',
67
+ properties: {
68
+ transport: { type: 'string' },
69
+ port: { type: 'number' },
70
+ tlsEnabled: { type: 'boolean' },
71
+ },
72
+ },
73
+ logging: {
74
+ type: 'object',
75
+ properties: {
76
+ level: { type: 'string' },
77
+ format: { type: 'string' },
78
+ destination: { type: 'string' },
79
+ },
80
+ },
81
+ };
82
+
83
+ const WORKFLOW_SCHEMA: ConfigSchema = {
84
+ name: { type: 'string', required: true },
85
+ description: { type: 'string' },
86
+ tasks: {
87
+ type: 'array',
88
+ required: true,
89
+ properties: {
90
+ id: { type: 'string', required: true },
91
+ type: { type: 'string', required: true },
92
+ description: { type: 'string', required: true },
93
+ dependencies: { type: 'array' },
94
+ assignTo: { type: 'string' },
95
+ priority: { type: 'string' },
96
+ timeout: { type: 'number' },
97
+ },
98
+ },
99
+ };
100
+
101
+ function validateType(value: any, expectedType: string): boolean {
102
+ switch (expectedType) {
103
+ case 'string':
104
+ return typeof value === 'string';
105
+ case 'number':
106
+ return typeof value === 'number';
107
+ case 'boolean':
108
+ return typeof value === 'boolean';
109
+ case 'array':
110
+ return Array.isArray(value);
111
+ case 'object':
112
+ return typeof value === 'object' && value !== null && !Array.isArray(value);
113
+ default:
114
+ return false;
115
+ }
116
+ }
117
+
118
+ function validateObject(obj: any, schema: ConfigSchema, path = ''): string[] {
119
+ const errors: string[] = [];
120
+
121
+ // Check required fields
122
+ for (const [key, spec] of Object.entries(schema)) {
123
+ if (spec.required && !(key in obj)) {
124
+ errors.push(`${path}${key} is required but missing`);
125
+ continue;
126
+ }
127
+
128
+ if (key in obj) {
129
+ const value = obj[key];
130
+ const currentPath = path ? `${path}${key}.` : `${key}.`;
131
+
132
+ if (!validateType(value, spec.type)) {
133
+ errors.push(`${path}${key} should be of type ${spec.type}, got ${typeof value}`);
134
+ continue;
135
+ }
136
+
137
+ // Validate nested objects
138
+ if (spec.type === 'object' && spec.properties) {
139
+ errors.push(...validateObject(value, spec.properties, currentPath));
140
+ }
141
+
142
+ // Validate array items
143
+ if (spec.type === 'array' && spec.properties && Array.isArray(value)) {
144
+ value.forEach((item, index) => {
145
+ if (typeof item === 'object') {
146
+ errors.push(...validateObject(item, spec.properties!, `${currentPath}[${index}].`));
147
+ }
148
+ });
149
+ }
150
+ }
151
+ }
152
+
153
+ return errors;
154
+ }
155
+
156
+ function validateClaudeFlowConfig(config: any): string[] {
157
+ return validateObject(config, CLAUDE_FLOW_CONFIG_SCHEMA);
158
+ }
159
+
160
+ function validateWorkflow(workflow: any): string[] {
161
+ const errors = validateObject(workflow, WORKFLOW_SCHEMA);
162
+
163
+ // Additional workflow-specific validations
164
+ if (workflow.tasks && Array.isArray(workflow.tasks)) {
165
+ const taskIds = new Set<string>();
166
+
167
+ for (const [index, task] of workflow.tasks.entries()) {
168
+ // Check for duplicate task IDs
169
+ if (taskIds.has(task.id)) {
170
+ errors.push(`Duplicate task ID "${task.id}" found at index ${index}`);
171
+ } else {
172
+ taskIds.add(task.id);
173
+ }
174
+
175
+ // Validate dependencies reference existing tasks
176
+ if (task.dependencies && Array.isArray(task.dependencies)) {
177
+ for (const dep of task.dependencies) {
178
+ if (!taskIds.has(dep) && !workflow.tasks.slice(0, index).some((t: any) => t.id === dep)) {
179
+ errors.push(`Task "${task.id}" depends on non-existent task "${dep}"`);
180
+ }
181
+ }
182
+ }
183
+
184
+ // Validate priority values
185
+ if (task.priority && !['low', 'medium', 'high', 'critical'].includes(task.priority)) {
186
+ errors.push(`Task "${task.id}" has invalid priority "${task.priority}"`);
187
+ }
188
+
189
+ // Validate timeout is positive
190
+ if (task.timeout && task.timeout <= 0) {
191
+ errors.push(`Task "${task.id}" has invalid timeout ${task.timeout}`);
192
+ }
193
+ }
194
+ }
195
+
196
+ return errors;
197
+ }
198
+
199
+ async function validateFile(filePath: string): Promise<ValidationResult> {
200
+ const result: ValidationResult = {
201
+ file: filePath,
202
+ valid: false,
203
+ errors: [],
204
+ };
205
+
206
+ try {
207
+ const content = await Deno.readTextFile(filePath);
208
+ const config = JSON.parse(content);
209
+
210
+ // Determine validation type based on file name/content
211
+ if (filePath.includes('workflow') || config.tasks) {
212
+ result.errors = validateWorkflow(config);
213
+ } else if (filePath.includes('config') || config.orchestrator) {
214
+ result.errors = validateClaudeFlowConfig(config);
215
+ } else {
216
+ result.errors.push('Unknown configuration file type');
217
+ }
218
+
219
+ result.valid = result.errors.length === 0;
220
+ } catch (error) {
221
+ if (error instanceof SyntaxError) {
222
+ result.errors.push(`Invalid JSON: ${error.message}`);
223
+ } else {
224
+ result.errors.push(`Failed to read file: ${error.message}`);
225
+ }
226
+ }
227
+
228
+ return result;
229
+ }
230
+
231
+ async function main(): Promise<void> {
232
+ console.log('Validating example configurations...\n');
233
+
234
+ const results: ValidationResult[] = [];
235
+
236
+ // Find all JSON files in examples directory
237
+ for await (const entry of walk('./examples', { exts: ['.json'] })) {
238
+ if (entry.isFile) {
239
+ const result = await validateFile(entry.path);
240
+ results.push(result);
241
+ }
242
+ }
243
+
244
+ // Also check any config files in the root
245
+ const rootConfigFiles = ['claude-flow.config.json', 'config.json'];
246
+ for (const filename of rootConfigFiles) {
247
+ try {
248
+ await Deno.stat(filename);
249
+ const result = await validateFile(filename);
250
+ results.push(result);
251
+ } catch {
252
+ // File doesn't exist, skip
253
+ }
254
+ }
255
+
256
+ if (results.length === 0) {
257
+ console.log('No configuration files found to validate.');
258
+ return;
259
+ }
260
+
261
+ // Report results
262
+ let hasErrors = false;
263
+
264
+ for (const result of results) {
265
+ if (result.valid) {
266
+ console.log(`✅ ${result.file}: Valid`);
267
+ } else {
268
+ console.log(`❌ ${result.file}: Invalid`);
269
+ for (const error of result.errors) {
270
+ console.log(` - ${error}`);
271
+ }
272
+ hasErrors = true;
273
+ }
274
+ }
275
+
276
+ console.log(`\nValidated ${results.length} configuration files.`);
277
+
278
+ if (hasErrors) {
279
+ console.error('❌ Some configuration files have errors!');
280
+ Deno.exit(1);
281
+ } else {
282
+ console.log('✅ All configuration files are valid!');
283
+ }
284
+ }
285
+
286
+ if (import.meta.main) {
287
+ await main();
288
+ }