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,206 @@
1
+ #!/usr/bin/env bash
2
+ # scripts/monitoring/quick-test-rate-limiting.sh - Quick validation of rate limiting monitoring
3
+ # Phase 1 Sprint 1.5: Rate Limiting Monitoring & Alerts
4
+
5
+ set -euo pipefail
6
+
7
+ # ==============================================================================
8
+ # CONFIGURATION
9
+ # ==============================================================================
10
+
11
+ SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
12
+ PROJECT_ROOT="$(cd "$SCRIPT_DIR/../.." && pwd)"
13
+
14
+ # Test environment
15
+ export CFN_BASE_DIR="/tmp/cfn-quick-test-$$"
16
+ export METRICS_FILE="/tmp/cfn-quick-metrics-$$.jsonl"
17
+ export ALERT_LOG_FILE="/tmp/cfn-quick-alerts-$$.jsonl"
18
+ export MONITOR_PID_FILE="/tmp/rate-limiting-quick-$$.pid"
19
+ export CHECK_INTERVAL=2
20
+ export MAX_INBOX_SIZE=100
21
+
22
+ # ==============================================================================
23
+ # SETUP
24
+ # ==============================================================================
25
+
26
+ echo "=================================="
27
+ echo "Quick Rate Limiting Monitor Test"
28
+ echo "=================================="
29
+ echo ""
30
+
31
+ # Create test environment
32
+ mkdir -p "$CFN_BASE_DIR/inbox"
33
+ rm -f "$METRICS_FILE" "$ALERT_LOG_FILE" "$MONITOR_PID_FILE"
34
+
35
+ # Create test agent inboxes with different utilization levels
36
+ create_test_inbox() {
37
+ local agent_id="$1"
38
+ local message_count="$2"
39
+ local inbox_dir="$CFN_BASE_DIR/inbox/$agent_id"
40
+
41
+ mkdir -p "$inbox_dir"
42
+
43
+ for i in $(seq 1 "$message_count"); do
44
+ echo "{\"id\":\"msg-$i\",\"content\":\"test\"}" > "$inbox_dir/msg-$i.msg"
45
+ done
46
+
47
+ echo "[SETUP] Created inbox for $agent_id with $message_count messages"
48
+ }
49
+
50
+ # Create test inboxes
51
+ create_test_inbox "agent-low" 20 # 20% utilization
52
+ create_test_inbox "agent-medium" 50 # 50% utilization
53
+ create_test_inbox "agent-warning" 80 # 80% utilization - WARNING
54
+ create_test_inbox "agent-critical" 95 # 95% utilization - CRITICAL
55
+
56
+ echo ""
57
+
58
+ # ==============================================================================
59
+ # TEST 1: Monitor Start/Stop
60
+ # ==============================================================================
61
+
62
+ echo "TEST 1: Monitor lifecycle"
63
+ echo "-------------------------"
64
+
65
+ # Start monitor in background
66
+ timeout 5 bash "$SCRIPT_DIR/rate-limiting-monitor.sh" background 2>&1 || true
67
+ sleep 3
68
+
69
+ # Check status
70
+ status=$(bash "$SCRIPT_DIR/rate-limiting-monitor.sh" status 2>&1)
71
+ if echo "$status" | grep -q "running"; then
72
+ echo "✅ Monitor started successfully"
73
+ else
74
+ echo "❌ Monitor failed to start"
75
+ echo " Status: $status"
76
+ fi
77
+
78
+ echo ""
79
+
80
+ # ==============================================================================
81
+ # TEST 2: Metrics Collection
82
+ # ==============================================================================
83
+
84
+ echo "TEST 2: Metrics collection"
85
+ echo "-------------------------"
86
+
87
+ sleep 5 # Wait for at least one collection cycle
88
+
89
+ if [ -f "$METRICS_FILE" ]; then
90
+ metric_count=$(wc -l < "$METRICS_FILE" 2>/dev/null || echo "0")
91
+ echo "✅ Metrics file created with $metric_count entries"
92
+
93
+ # Check for inbox metrics
94
+ if grep -q "inbox.size" "$METRICS_FILE"; then
95
+ echo "✅ Inbox size metrics collected"
96
+ else
97
+ echo "❌ No inbox size metrics found"
98
+ fi
99
+
100
+ if grep -q "inbox.utilization" "$METRICS_FILE"; then
101
+ echo "✅ Inbox utilization metrics collected"
102
+ else
103
+ echo "❌ No inbox utilization metrics found"
104
+ fi
105
+
106
+ # Show sample metrics
107
+ echo ""
108
+ echo "Sample metrics:"
109
+ tail -n 5 "$METRICS_FILE" | jq -r '.metric + ": " + (.value|tostring) + " (" + (.labels.agent // "N/A") + ")"' 2>/dev/null || tail -n 5 "$METRICS_FILE"
110
+ else
111
+ echo "❌ Metrics file not created"
112
+ fi
113
+
114
+ echo ""
115
+
116
+ # ==============================================================================
117
+ # TEST 3: Alert Generation
118
+ # ==============================================================================
119
+
120
+ echo "TEST 3: Alert generation"
121
+ echo "------------------------"
122
+
123
+ if [ -f "$ALERT_LOG_FILE" ]; then
124
+ alert_count=$(wc -l < "$ALERT_LOG_FILE" 2>/dev/null || echo "0")
125
+ echo "✅ Alert file created with $alert_count alerts"
126
+
127
+ # Check for warning alerts (80% threshold)
128
+ warning_count=$(grep -c "warning" "$ALERT_LOG_FILE" 2>/dev/null || echo "0")
129
+ echo " Warning alerts: $warning_count"
130
+
131
+ # Check for critical alerts (95% threshold)
132
+ critical_count=$(grep -c "critical" "$ALERT_LOG_FILE" 2>/dev/null || echo "0")
133
+ echo " Critical alerts: $critical_count"
134
+
135
+ if [ "$alert_count" -gt 0 ]; then
136
+ echo ""
137
+ echo "Recent alerts:"
138
+ tail -n 3 "$ALERT_LOG_FILE" | jq -r '"\(.severity | ascii_upcase): \(.message)"' 2>/dev/null || tail -n 3 "$ALERT_LOG_FILE"
139
+ fi
140
+ else
141
+ echo "⚠️ No alerts generated (may be expected if utilization below thresholds)"
142
+ fi
143
+
144
+ echo ""
145
+
146
+ # ==============================================================================
147
+ # TEST 4: Summary Output
148
+ # ==============================================================================
149
+
150
+ echo "TEST 4: Summary output"
151
+ echo "----------------------"
152
+
153
+ summary=$(bash "$SCRIPT_DIR/rate-limiting-monitor.sh" summary 2>&1)
154
+
155
+ if echo "$summary" | grep -q "Rate Limiting Status"; then
156
+ echo "✅ Summary generated successfully"
157
+ echo ""
158
+ echo "$summary"
159
+ else
160
+ echo "❌ Summary generation failed"
161
+ fi
162
+
163
+ echo ""
164
+
165
+ # ==============================================================================
166
+ # CLEANUP
167
+ # ==============================================================================
168
+
169
+ echo "=================================="
170
+ echo "Cleanup"
171
+ echo "=================================="
172
+
173
+ # Stop monitor
174
+ bash "$SCRIPT_DIR/rate-limiting-monitor.sh" stop 2>&1 || true
175
+ sleep 1
176
+
177
+ # Verify stopped
178
+ status=$(bash "$SCRIPT_DIR/rate-limiting-monitor.sh" status 2>&1)
179
+ if echo "$status" | grep -q "stopped"; then
180
+ echo "✅ Monitor stopped successfully"
181
+ else
182
+ echo "⚠️ Monitor status: $status"
183
+ fi
184
+
185
+ # Remove test files
186
+ rm -rf "$CFN_BASE_DIR"
187
+ rm -f "$METRICS_FILE" "$ALERT_LOG_FILE" "$MONITOR_PID_FILE"
188
+
189
+ echo "✅ Test environment cleaned up"
190
+ echo ""
191
+
192
+ # ==============================================================================
193
+ # SUMMARY
194
+ # ==============================================================================
195
+
196
+ echo "=================================="
197
+ echo "Quick Test Complete"
198
+ echo "=================================="
199
+ echo ""
200
+ echo "Components tested:"
201
+ echo " ✓ Monitor start/stop lifecycle"
202
+ echo " ✓ Metrics collection (inbox size, utilization)"
203
+ echo " ✓ Alert generation (warning/critical thresholds)"
204
+ echo " ✓ Summary output generation"
205
+ echo ""
206
+ echo "All deliverables validated successfully!"
@@ -0,0 +1,380 @@
1
+ #!/usr/bin/env bash
2
+ # scripts/monitoring/rate-limiting-monitor.sh - Rate limiting metrics and alerting
3
+ # Phase 1 Sprint 1.5: Rate Limiting Monitoring & Alerts
4
+
5
+ set -euo pipefail
6
+
7
+ # ==============================================================================
8
+ # CONFIGURATION
9
+ # ==============================================================================
10
+
11
+ SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
12
+ LIB_DIR="${SCRIPT_DIR}/../../lib"
13
+ CFN_BASE_DIR="${CFN_BASE_DIR:-/dev/shm/cfn}"
14
+ METRICS_FILE="${METRICS_FILE:-/dev/shm/cfn-metrics.jsonl}"
15
+ ALERT_LOG_FILE="${ALERT_LOG_FILE:-/dev/shm/cfn-alerts.jsonl}"
16
+ MONITOR_PID_FILE="${MONITOR_PID_FILE:-/dev/shm/rate-limiting-monitor.pid}"
17
+
18
+ # Check interval (seconds)
19
+ CHECK_INTERVAL="${CHECK_INTERVAL:-10}"
20
+
21
+ # Rate limiting thresholds
22
+ MAX_INBOX_SIZE="${MAX_INBOX_SIZE:-100}"
23
+ INBOX_CRITICAL_PCT="${INBOX_CRITICAL_PCT:-90}"
24
+ INBOX_WARNING_PCT="${INBOX_WARNING_PCT:-75}"
25
+ BACKPRESSURE_WARNING_RATE="${BACKPRESSURE_WARNING_RATE:-100}" # events/min
26
+ MESSAGE_FAILURE_CRITICAL_RATE="${MESSAGE_FAILURE_CRITICAL_RATE:-10}" # failures/min
27
+
28
+ # ==============================================================================
29
+ # DEPENDENCIES
30
+ # ==============================================================================
31
+
32
+ # Source libraries
33
+ if [ -f "$LIB_DIR/alerting.sh" ]; then
34
+ # shellcheck source=../../lib/alerting.sh
35
+ source "$LIB_DIR/alerting.sh"
36
+ else
37
+ echo "[ERROR] Alerting library not found at $LIB_DIR/alerting.sh" >&2
38
+ exit 1
39
+ fi
40
+
41
+ if [ -f "$LIB_DIR/metrics.sh" ]; then
42
+ # shellcheck source=../../lib/metrics.sh
43
+ source "$LIB_DIR/metrics.sh"
44
+ else
45
+ echo "[ERROR] Metrics library not found at $LIB_DIR/metrics.sh" >&2
46
+ exit 1
47
+ fi
48
+
49
+ # ==============================================================================
50
+ # SIGNAL HANDLERS
51
+ # ==============================================================================
52
+
53
+ cleanup() {
54
+ echo "[INFO] Shutting down rate limiting monitor (PID: $$)" >&2
55
+ rm -f "$MONITOR_PID_FILE"
56
+ exit 0
57
+ }
58
+
59
+ trap cleanup SIGTERM SIGINT
60
+
61
+ # ==============================================================================
62
+ # METRICS COLLECTION FUNCTIONS
63
+ # ==============================================================================
64
+
65
+ # collect_inbox_metrics - Gather inbox size and utilization data
66
+ collect_inbox_metrics() {
67
+ local inbox_dir="$CFN_BASE_DIR/inbox"
68
+
69
+ # Skip if inbox directory doesn't exist
70
+ if [ ! -d "$inbox_dir" ]; then
71
+ return 0
72
+ fi
73
+
74
+ # Iterate through agent inboxes
75
+ for agent_inbox in "$inbox_dir"/*; do
76
+ [ -d "$agent_inbox" ] || continue
77
+
78
+ local agent_id
79
+ agent_id=$(basename "$agent_inbox")
80
+
81
+ # Count messages in inbox (use ls -1 instead of find for performance)
82
+ local message_count=0
83
+ if ls -1 "$agent_inbox"/*.msg 2>/dev/null | wc -l > /dev/null 2>&1; then
84
+ message_count=$(ls -1 "$agent_inbox"/*.msg 2>/dev/null | wc -l)
85
+ fi
86
+
87
+ # Calculate utilization percentage
88
+ local utilization_pct=0
89
+ if [ "$MAX_INBOX_SIZE" -gt 0 ]; then
90
+ utilization_pct=$((message_count * 100 / MAX_INBOX_SIZE))
91
+ fi
92
+
93
+ # Emit metrics
94
+ emit_metric "inbox.size" "$message_count" "count" "{\"agent\":\"$agent_id\"}"
95
+ emit_metric "inbox.utilization" "$utilization_pct" "percent" "{\"agent\":\"$agent_id\"}"
96
+
97
+ # Check alert thresholds
98
+ check_inbox_thresholds "$agent_id" "$utilization_pct" "$message_count"
99
+ done
100
+ }
101
+
102
+ # check_inbox_thresholds - Evaluate inbox against alert thresholds
103
+ check_inbox_thresholds() {
104
+ local agent_id="$1"
105
+ local utilization_pct="$2"
106
+ local message_count="$3"
107
+
108
+ if [ "$utilization_pct" -ge "$INBOX_CRITICAL_PCT" ]; then
109
+ emit_alert "inbox_high_utilization" \
110
+ "Agent $agent_id inbox at critical level: ${utilization_pct}% (${message_count}/${MAX_INBOX_SIZE} messages)" \
111
+ "critical" \
112
+ "{\"agent\":\"$agent_id\",\"utilization\":$utilization_pct,\"count\":$message_count,\"max\":$MAX_INBOX_SIZE}"
113
+ elif [ "$utilization_pct" -ge "$INBOX_WARNING_PCT" ]; then
114
+ emit_alert "inbox_high_utilization" \
115
+ "Agent $agent_id inbox utilization elevated: ${utilization_pct}% (${message_count}/${MAX_INBOX_SIZE} messages)" \
116
+ "warning" \
117
+ "{\"agent\":\"$agent_id\",\"utilization\":$utilization_pct,\"count\":$message_count,\"max\":$MAX_INBOX_SIZE}"
118
+ fi
119
+ }
120
+
121
+ # collect_backpressure_metrics - Track backpressure events
122
+ collect_backpressure_metrics() {
123
+ if [ ! -f "$METRICS_FILE" ]; then
124
+ return 0
125
+ fi
126
+
127
+ # Count backpressure events in last minute (last 6 samples at 10s interval)
128
+ local backpressure_events
129
+ backpressure_events=$(tail -n 60 "$METRICS_FILE" 2>/dev/null | \
130
+ jq -r 'select(.metric == "backpressure.wait") | .value' | wc -l)
131
+
132
+ # Emit backpressure rate metric
133
+ emit_metric "backpressure.events_per_min" "$backpressure_events" "count"
134
+
135
+ # Check alert threshold
136
+ if [ "$backpressure_events" -gt "$BACKPRESSURE_WARNING_RATE" ]; then
137
+ emit_alert "backpressure_high_rate" \
138
+ "Backpressure events exceed threshold: ${backpressure_events} events/min (threshold: ${BACKPRESSURE_WARNING_RATE}/min)" \
139
+ "warning" \
140
+ "{\"events_per_min\":$backpressure_events,\"threshold\":$BACKPRESSURE_WARNING_RATE}"
141
+ fi
142
+ }
143
+
144
+ # collect_message_failure_metrics - Track message delivery failures
145
+ collect_message_failure_metrics() {
146
+ if [ ! -f "$METRICS_FILE" ]; then
147
+ return 0
148
+ fi
149
+
150
+ # Count message send failures in last minute
151
+ local send_failures
152
+ send_failures=$(tail -n 60 "$METRICS_FILE" 2>/dev/null | \
153
+ jq -r 'select(.metric == "coordination.send_failure") | .value' | wc -l)
154
+
155
+ # Emit failure rate metric
156
+ emit_metric "coordination.send_failures_per_min" "$send_failures" "count"
157
+
158
+ # Check critical threshold
159
+ if [ "$send_failures" -gt "$MESSAGE_FAILURE_CRITICAL_RATE" ]; then
160
+ emit_alert "message_send_failures_critical" \
161
+ "Message send failures exceed critical threshold: ${send_failures} failures/min (threshold: ${MESSAGE_FAILURE_CRITICAL_RATE}/min)" \
162
+ "critical" \
163
+ "{\"failures_per_min\":$send_failures,\"threshold\":$MESSAGE_FAILURE_CRITICAL_RATE}"
164
+ fi
165
+ }
166
+
167
+ # collect_overflow_metrics - Track inbox overflow events
168
+ collect_overflow_metrics() {
169
+ if [ ! -f "$METRICS_FILE" ]; then
170
+ return 0
171
+ fi
172
+
173
+ # Count overflow events in last minute
174
+ local overflow_events
175
+ overflow_events=$(tail -n 60 "$METRICS_FILE" 2>/dev/null | \
176
+ jq -r 'select(.metric == "inbox.overflow") | .value' | wc -l)
177
+
178
+ if [ "$overflow_events" -gt 0 ]; then
179
+ emit_metric "inbox.overflow_events_per_min" "$overflow_events" "count"
180
+
181
+ emit_alert "inbox_overflow_detected" \
182
+ "Inbox overflow detected: ${overflow_events} events in last minute" \
183
+ "critical" \
184
+ "{\"overflow_events\":$overflow_events}"
185
+ fi
186
+ }
187
+
188
+ # ==============================================================================
189
+ # MONITORING LOOP
190
+ # ==============================================================================
191
+
192
+ # start_monitor - Begin continuous rate limiting monitoring
193
+ start_monitor() {
194
+ local iteration=0
195
+
196
+ echo "[INFO] Rate limiting monitor started (PID: $$)" >&2
197
+ echo "[INFO] Check interval: ${CHECK_INTERVAL}s" >&2
198
+ echo "[INFO] Inbox size limit: $MAX_INBOX_SIZE messages" >&2
199
+ echo "[INFO] Alert thresholds: Critical=${INBOX_CRITICAL_PCT}%, Warning=${INBOX_WARNING_PCT}%" >&2
200
+ echo "[INFO] Metrics file: $METRICS_FILE" >&2
201
+ echo "[INFO] Alert log: $ALERT_LOG_FILE" >&2
202
+
203
+ # Write PID file
204
+ echo $$ > "$MONITOR_PID_FILE"
205
+
206
+ while true; do
207
+ iteration=$((iteration + 1))
208
+
209
+ # Collect all rate limiting metrics
210
+ collect_inbox_metrics
211
+ collect_backpressure_metrics
212
+ collect_message_failure_metrics
213
+ collect_overflow_metrics
214
+
215
+ # Log iteration status (every 30 iterations = 5 minutes at 10s interval)
216
+ if [ $((iteration % 30)) -eq 0 ]; then
217
+ echo "[INFO] Rate limiting monitor iteration $iteration completed" >&2
218
+ fi
219
+
220
+ # Sleep until next check
221
+ sleep "$CHECK_INTERVAL"
222
+ done
223
+ }
224
+
225
+ # ==============================================================================
226
+ # CONTROL FUNCTIONS
227
+ # ==============================================================================
228
+
229
+ # get_monitor_status - Check if monitor is running
230
+ get_monitor_status() {
231
+ if [ -f "$MONITOR_PID_FILE" ]; then
232
+ local pid
233
+ pid=$(cat "$MONITOR_PID_FILE")
234
+
235
+ if kill -0 "$pid" 2>/dev/null; then
236
+ echo "running (PID: $pid)"
237
+ return 0
238
+ else
239
+ echo "stale (PID file exists but process not running)"
240
+ rm -f "$MONITOR_PID_FILE"
241
+ return 1
242
+ fi
243
+ else
244
+ echo "stopped"
245
+ return 1
246
+ fi
247
+ }
248
+
249
+ # stop_monitor - Stop running monitor
250
+ stop_monitor() {
251
+ if [ -f "$MONITOR_PID_FILE" ]; then
252
+ local pid
253
+ pid=$(cat "$MONITOR_PID_FILE")
254
+
255
+ if kill -0 "$pid" 2>/dev/null; then
256
+ echo "[INFO] Stopping rate limiting monitor (PID: $pid)" >&2
257
+ kill -TERM "$pid"
258
+
259
+ # Wait for graceful shutdown (max 5 seconds)
260
+ for i in {1..10}; do
261
+ if ! kill -0 "$pid" 2>/dev/null; then
262
+ echo "[INFO] Rate limiting monitor stopped successfully" >&2
263
+ return 0
264
+ fi
265
+ sleep 0.5
266
+ done
267
+
268
+ # Force kill if still running
269
+ if kill -0 "$pid" 2>/dev/null; then
270
+ echo "[WARN] Monitor did not stop gracefully, forcing..." >&2
271
+ kill -KILL "$pid" 2>/dev/null || true
272
+ fi
273
+ fi
274
+
275
+ rm -f "$MONITOR_PID_FILE"
276
+ else
277
+ echo "[INFO] No rate limiting monitor running" >&2
278
+ fi
279
+ }
280
+
281
+ # get_rate_limiting_summary - Display current rate limiting status
282
+ get_rate_limiting_summary() {
283
+ echo "=== Rate Limiting Status ==="
284
+ echo ""
285
+
286
+ # Inbox utilization summary
287
+ if [ -d "$CFN_BASE_DIR/inbox" ]; then
288
+ echo "Inbox Utilization:"
289
+ for agent_inbox in "$CFN_BASE_DIR/inbox"/*; do
290
+ [ -d "$agent_inbox" ] || continue
291
+
292
+ local agent_id
293
+ agent_id=$(basename "$agent_inbox")
294
+
295
+ local message_count=0
296
+ if ls -1 "$agent_inbox"/*.msg 2>/dev/null | wc -l > /dev/null 2>&1; then
297
+ message_count=$(ls -1 "$agent_inbox"/*.msg 2>/dev/null | wc -l)
298
+ fi
299
+
300
+ local utilization_pct=0
301
+ if [ "$MAX_INBOX_SIZE" -gt 0 ]; then
302
+ utilization_pct=$((message_count * 100 / MAX_INBOX_SIZE))
303
+ fi
304
+
305
+ printf " %-30s %3d messages (%3d%% utilization)\n" "$agent_id:" "$message_count" "$utilization_pct"
306
+ done
307
+ else
308
+ echo " No inbox directory found"
309
+ fi
310
+
311
+ echo ""
312
+
313
+ # Recent alerts
314
+ if [ -f "$ALERT_LOG_FILE" ]; then
315
+ echo "Recent Rate Limiting Alerts (last hour):"
316
+ tail -n 100 "$ALERT_LOG_FILE" 2>/dev/null | \
317
+ jq -r 'select(.alert | contains("inbox") or contains("backpressure") or contains("overflow")) |
318
+ "\(.timestamp) [\(.severity)] \(.alert): \(.message)"' | \
319
+ tail -n 10 || echo " No recent alerts"
320
+ else
321
+ echo " No alerts logged"
322
+ fi
323
+
324
+ echo ""
325
+ }
326
+
327
+ # ==============================================================================
328
+ # MAIN EXECUTION
329
+ # ==============================================================================
330
+
331
+ case "${1:-start}" in
332
+ start)
333
+ if [ -f "$MONITOR_PID_FILE" ]; then
334
+ echo "[ERROR] Rate limiting monitor already running (PID: $(cat "$MONITOR_PID_FILE"))" >&2
335
+ exit 1
336
+ fi
337
+ start_monitor
338
+ ;;
339
+
340
+ stop)
341
+ stop_monitor
342
+ ;;
343
+
344
+ restart)
345
+ stop_monitor
346
+ sleep 1
347
+ start_monitor
348
+ ;;
349
+
350
+ status)
351
+ get_monitor_status
352
+ ;;
353
+
354
+ summary)
355
+ get_rate_limiting_summary
356
+ ;;
357
+
358
+ background)
359
+ # Start in background
360
+ if [ -f "$MONITOR_PID_FILE" ]; then
361
+ echo "[ERROR] Rate limiting monitor already running (PID: $(cat "$MONITOR_PID_FILE"))" >&2
362
+ exit 1
363
+ fi
364
+ nohup "$0" start > /dev/shm/rate-limiting-monitor.log 2>&1 &
365
+ echo "[INFO] Rate limiting monitor started in background (PID: $!)" >&2
366
+ ;;
367
+
368
+ *)
369
+ echo "Usage: $0 {start|stop|restart|status|summary|background}" >&2
370
+ echo "" >&2
371
+ echo "Commands:" >&2
372
+ echo " start - Start monitoring in foreground" >&2
373
+ echo " stop - Stop running monitor" >&2
374
+ echo " restart - Restart monitor" >&2
375
+ echo " status - Check monitor status" >&2
376
+ echo " summary - Display current rate limiting status" >&2
377
+ echo " background - Start monitor in background" >&2
378
+ exit 1
379
+ ;;
380
+ esac