claude-flow-novice 2.14.2 → 2.14.4

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 (161) hide show
  1. package/.claude/commands/CFN_LOOP_TASK_MODE.md +4 -47
  2. package/.claude/skills/cfn-redis-coordination/demos/test-cancel-swarm.sh +0 -276
  3. package/claude-assets/commands/CFN_LOOP_TASK_MODE.md +4 -47
  4. package/claude-assets/skills/cfn-redis-coordination/demos/test-cancel-swarm.sh +0 -276
  5. package/dist/cli/agent-prompt-builder.js +25 -0
  6. package/dist/cli/agent-prompt-builder.js.map +1 -1
  7. package/dist/cli/config-manager.js +91 -109
  8. package/package.json +1 -1
  9. package/scripts/init-project.js +1 -1
  10. package/.claude/skills/cfn-redis-coordination/HEARTBEAT.md +0 -57
  11. package/.claude/skills/cfn-redis-coordination/HEARTBEAT_MONITORING.md +0 -267
  12. package/.claude/skills/cfn-redis-coordination/LOGGING.md +0 -260
  13. package/.claude/skills/cfn-redis-coordination/README.md +0 -65
  14. package/.claude/skills/cfn-redis-coordination/SECURITY_REVIEW.md +0 -25
  15. package/.claude/skills/cfn-redis-coordination/SHUTDOWN_HANDLING.md +0 -164
  16. package/.claude/skills/cfn-redis-coordination/SKILL.md +0 -720
  17. package/.claude/skills/cfn-redis-coordination/demos/test-dlq.sh +0 -129
  18. package/.claude/skills/cfn-redis-coordination/demos/test-iteration-feedback.sh +0 -320
  19. package/.claude/skills/cfn-redis-coordination/demos/test-orchestrator.sh +0 -249
  20. package/.claude/skills/cfn-redis-coordination/demos/test-priority-wake-phase4-unix.sh +0 -148
  21. package/.claude/skills/cfn-redis-coordination/demos/test-priority-wake-phase4.sh +0 -163
  22. package/.claude/skills/cfn-redis-coordination/demos/test-priority-wake.sh +0 -138
  23. package/.claude/skills/cfn-redis-coordination/demos/test-quick-fix.sh +0 -81
  24. package/.claude/skills/cfn-redis-coordination/demos/test-quorum-absolute.sh +0 -45
  25. package/.claude/skills/cfn-redis-coordination/demos/test-quorum-fallback.sh +0 -68
  26. package/.claude/skills/cfn-redis-coordination/demos/test-quorum-percentage.sh +0 -56
  27. package/.claude/skills/cfn-redis-coordination/demos/test-quorum-with-retry.sh +0 -81
  28. package/.claude/skills/cfn-redis-coordination/demos/test-quorum.sh +0 -57
  29. package/.claude/skills/cfn-redis-coordination/demos/test-shutdown-handling.sh +0 -187
  30. package/.claude/skills/cfn-redis-coordination/demos/test-shutdown.sh +0 -160
  31. package/.claude/skills/cfn-redis-coordination/demos/test-utils-unix.sh +0 -97
  32. package/.claude/skills/cfn-redis-coordination/demos/test-utils.sh +0 -97
  33. package/.claude/skills/cfn-redis-coordination/demos/test-waiting-mode.sh +0 -59
  34. package/.claude/skills/cfn-redis-coordination/examples/README.md +0 -73
  35. package/.claude/skills/cfn-redis-coordination/examples/grafana-dashboard.json +0 -352
  36. package/.claude/skills/cfn-redis-coordination/examples/hierarchical-pattern.sh +0 -127
  37. package/.claude/skills/cfn-redis-coordination/examples/mesh-pattern.sh +0 -171
  38. package/.claude/skills/cfn-redis-coordination/examples/timeout-handling.sh +0 -227
  39. package/.claude/skills/cfn-redis-coordination/examples/waiting-mode-pattern.sh +0 -239
  40. package/.claude/skills/cfn-redis-coordination/execute-product-owner-decision.sh +0 -258
  41. package/.claude/skills/cfn-redis-coordination/get-agent-timeout.sh +0 -177
  42. package/.claude/skills/cfn-redis-coordination/heartbeat-functions.sh +0 -137
  43. package/.claude/skills/cfn-redis-coordination/heartbeat-protocol.md +0 -106
  44. package/.claude/skills/cfn-redis-coordination/heartbeat.sh +0 -126
  45. package/.claude/skills/cfn-redis-coordination/init-swarm.sh +0 -148
  46. package/.claude/skills/cfn-redis-coordination/invoke-redis-pattern.sh +0 -220
  47. package/.claude/skills/cfn-redis-coordination/invoke-waiting-mode.sh +0 -283
  48. package/.claude/skills/cfn-redis-coordination/list-active-swarms.sh +0 -147
  49. package/.claude/skills/cfn-redis-coordination/log-event.sh +0 -109
  50. package/.claude/skills/cfn-redis-coordination/metrics-export.sh +0 -674
  51. package/.claude/skills/cfn-redis-coordination/metrics-schema.json +0 -66
  52. package/.claude/skills/cfn-redis-coordination/metrics-storage.md +0 -31
  53. package/.claude/skills/cfn-redis-coordination/monitor-cfn-violations.sh +0 -391
  54. package/.claude/skills/cfn-redis-coordination/monitor-heartbeats.sh +0 -101
  55. package/.claude/skills/cfn-redis-coordination/orchestrate-cfn-loop-v3.sh +0 -141
  56. package/.claude/skills/cfn-redis-coordination/orchestrate-cfn-loop.sh +0 -31
  57. package/.claude/skills/cfn-redis-coordination/orchestrate-cfn-loop.sh.bak +0 -0
  58. package/.claude/skills/cfn-redis-coordination/priority-wake-mechanism.md +0 -75
  59. package/.claude/skills/cfn-redis-coordination/priority_wake.py +0 -134
  60. package/.claude/skills/cfn-redis-coordination/query-dlq.sh +0 -162
  61. package/.claude/skills/cfn-redis-coordination/query-logs.sh +0 -103
  62. package/.claude/skills/cfn-redis-coordination/redis-pattern.sh +0 -619
  63. package/.claude/skills/cfn-redis-coordination/retrieve-context.sh +0 -58
  64. package/.claude/skills/cfn-redis-coordination/select-specialist-agent.sh +0 -371
  65. package/.claude/skills/cfn-redis-coordination/semantic-match-tfidf.py +0 -252
  66. package/.claude/skills/cfn-redis-coordination/send-heartbeat.sh +0 -165
  67. package/.claude/skills/cfn-redis-coordination/signal.sh +0 -38
  68. package/.claude/skills/cfn-redis-coordination/store-context.sh +0 -86
  69. package/.claude/skills/cfn-redis-coordination/store-epic-context.sh +0 -123
  70. package/.claude/skills/cfn-redis-coordination/test-context-injection.sh +0 -354
  71. package/.claude/skills/cfn-redis-coordination/test-timeout-enforcement.sh +0 -513
  72. package/.claude/skills/cfn-redis-coordination/tests/convert-line-endings.sh +0 -15
  73. package/.claude/skills/cfn-redis-coordination/tests/dlq-functionality-test.sh +0 -102
  74. package/.claude/skills/cfn-redis-coordination/tests/edge-cases-test.sh +0 -99
  75. package/.claude/skills/cfn-redis-coordination/tests/integration-test.sh +0 -170
  76. package/.claude/skills/cfn-redis-coordination/tests/retry-mechanism-test.sh +0 -82
  77. package/.claude/skills/cfn-redis-coordination/tests/run-test-suite.sh +0 -92
  78. package/.claude/skills/cfn-redis-coordination/tests/run-tests.sh +0 -4
  79. package/.claude/skills/cfn-redis-coordination/tests/test-heartbeat-monitoring.sh +0 -418
  80. package/.claude/skills/cfn-redis-coordination/tests/test-heartbeat-simple.sh +0 -124
  81. package/.claude/skills/cfn-redis-coordination/tests/test-primitives.sh +0 -166
  82. package/.claude/skills/cfn-redis-coordination/tests/test-utils.sh +0 -54
  83. package/.claude/skills/cfn-redis-coordination/tests/test_utils.sh +0 -49
  84. package/.claude/skills/cfn-redis-coordination/v2_modularization/core_orchestration.sh +0 -76
  85. package/.claude/skills/cfn-redis-coordination/validate-parameters.sh +0 -492
  86. package/claude-assets/skills/cfn-redis-coordination/HEARTBEAT.md +0 -57
  87. package/claude-assets/skills/cfn-redis-coordination/HEARTBEAT_MONITORING.md +0 -267
  88. package/claude-assets/skills/cfn-redis-coordination/LOGGING.md +0 -260
  89. package/claude-assets/skills/cfn-redis-coordination/README.md +0 -65
  90. package/claude-assets/skills/cfn-redis-coordination/SECURITY_REVIEW.md +0 -25
  91. package/claude-assets/skills/cfn-redis-coordination/SHUTDOWN_HANDLING.md +0 -164
  92. package/claude-assets/skills/cfn-redis-coordination/SKILL.md +0 -720
  93. package/claude-assets/skills/cfn-redis-coordination/demos/test-dlq.sh +0 -129
  94. package/claude-assets/skills/cfn-redis-coordination/demos/test-iteration-feedback.sh +0 -320
  95. package/claude-assets/skills/cfn-redis-coordination/demos/test-orchestrator.sh +0 -249
  96. package/claude-assets/skills/cfn-redis-coordination/demos/test-priority-wake-phase4-unix.sh +0 -148
  97. package/claude-assets/skills/cfn-redis-coordination/demos/test-priority-wake-phase4.sh +0 -163
  98. package/claude-assets/skills/cfn-redis-coordination/demos/test-priority-wake.sh +0 -138
  99. package/claude-assets/skills/cfn-redis-coordination/demos/test-quick-fix.sh +0 -81
  100. package/claude-assets/skills/cfn-redis-coordination/demos/test-quorum-absolute.sh +0 -45
  101. package/claude-assets/skills/cfn-redis-coordination/demos/test-quorum-fallback.sh +0 -68
  102. package/claude-assets/skills/cfn-redis-coordination/demos/test-quorum-percentage.sh +0 -56
  103. package/claude-assets/skills/cfn-redis-coordination/demos/test-quorum-with-retry.sh +0 -81
  104. package/claude-assets/skills/cfn-redis-coordination/demos/test-quorum.sh +0 -57
  105. package/claude-assets/skills/cfn-redis-coordination/demos/test-shutdown-handling.sh +0 -187
  106. package/claude-assets/skills/cfn-redis-coordination/demos/test-shutdown.sh +0 -160
  107. package/claude-assets/skills/cfn-redis-coordination/demos/test-utils-unix.sh +0 -97
  108. package/claude-assets/skills/cfn-redis-coordination/demos/test-utils.sh +0 -97
  109. package/claude-assets/skills/cfn-redis-coordination/demos/test-waiting-mode.sh +0 -59
  110. package/claude-assets/skills/cfn-redis-coordination/examples/README.md +0 -73
  111. package/claude-assets/skills/cfn-redis-coordination/examples/grafana-dashboard.json +0 -352
  112. package/claude-assets/skills/cfn-redis-coordination/examples/hierarchical-pattern.sh +0 -127
  113. package/claude-assets/skills/cfn-redis-coordination/examples/mesh-pattern.sh +0 -171
  114. package/claude-assets/skills/cfn-redis-coordination/examples/timeout-handling.sh +0 -227
  115. package/claude-assets/skills/cfn-redis-coordination/examples/waiting-mode-pattern.sh +0 -239
  116. package/claude-assets/skills/cfn-redis-coordination/execute-product-owner-decision.sh +0 -258
  117. package/claude-assets/skills/cfn-redis-coordination/get-agent-timeout.sh +0 -177
  118. package/claude-assets/skills/cfn-redis-coordination/heartbeat-functions.sh +0 -137
  119. package/claude-assets/skills/cfn-redis-coordination/heartbeat-protocol.md +0 -106
  120. package/claude-assets/skills/cfn-redis-coordination/heartbeat.sh +0 -126
  121. package/claude-assets/skills/cfn-redis-coordination/init-swarm.sh +0 -148
  122. package/claude-assets/skills/cfn-redis-coordination/invoke-redis-pattern.sh +0 -220
  123. package/claude-assets/skills/cfn-redis-coordination/invoke-waiting-mode.sh +0 -283
  124. package/claude-assets/skills/cfn-redis-coordination/list-active-swarms.sh +0 -147
  125. package/claude-assets/skills/cfn-redis-coordination/log-event.sh +0 -109
  126. package/claude-assets/skills/cfn-redis-coordination/metrics-export.sh +0 -674
  127. package/claude-assets/skills/cfn-redis-coordination/metrics-schema.json +0 -66
  128. package/claude-assets/skills/cfn-redis-coordination/metrics-storage.md +0 -31
  129. package/claude-assets/skills/cfn-redis-coordination/monitor-cfn-violations.sh +0 -391
  130. package/claude-assets/skills/cfn-redis-coordination/monitor-heartbeats.sh +0 -101
  131. package/claude-assets/skills/cfn-redis-coordination/orchestrate-cfn-loop-v3.sh +0 -141
  132. package/claude-assets/skills/cfn-redis-coordination/orchestrate-cfn-loop.sh +0 -31
  133. package/claude-assets/skills/cfn-redis-coordination/orchestrate-cfn-loop.sh.bak +0 -0
  134. package/claude-assets/skills/cfn-redis-coordination/priority-wake-mechanism.md +0 -75
  135. package/claude-assets/skills/cfn-redis-coordination/priority_wake.py +0 -134
  136. package/claude-assets/skills/cfn-redis-coordination/query-dlq.sh +0 -162
  137. package/claude-assets/skills/cfn-redis-coordination/query-logs.sh +0 -103
  138. package/claude-assets/skills/cfn-redis-coordination/redis-pattern.sh +0 -619
  139. package/claude-assets/skills/cfn-redis-coordination/retrieve-context.sh +0 -58
  140. package/claude-assets/skills/cfn-redis-coordination/select-specialist-agent.sh +0 -371
  141. package/claude-assets/skills/cfn-redis-coordination/semantic-match-tfidf.py +0 -252
  142. package/claude-assets/skills/cfn-redis-coordination/send-heartbeat.sh +0 -165
  143. package/claude-assets/skills/cfn-redis-coordination/signal.sh +0 -38
  144. package/claude-assets/skills/cfn-redis-coordination/store-context.sh +0 -86
  145. package/claude-assets/skills/cfn-redis-coordination/store-epic-context.sh +0 -123
  146. package/claude-assets/skills/cfn-redis-coordination/test-context-injection.sh +0 -354
  147. package/claude-assets/skills/cfn-redis-coordination/test-timeout-enforcement.sh +0 -513
  148. package/claude-assets/skills/cfn-redis-coordination/tests/convert-line-endings.sh +0 -15
  149. package/claude-assets/skills/cfn-redis-coordination/tests/dlq-functionality-test.sh +0 -102
  150. package/claude-assets/skills/cfn-redis-coordination/tests/edge-cases-test.sh +0 -99
  151. package/claude-assets/skills/cfn-redis-coordination/tests/integration-test.sh +0 -170
  152. package/claude-assets/skills/cfn-redis-coordination/tests/retry-mechanism-test.sh +0 -82
  153. package/claude-assets/skills/cfn-redis-coordination/tests/run-test-suite.sh +0 -92
  154. package/claude-assets/skills/cfn-redis-coordination/tests/run-tests.sh +0 -4
  155. package/claude-assets/skills/cfn-redis-coordination/tests/test-heartbeat-monitoring.sh +0 -418
  156. package/claude-assets/skills/cfn-redis-coordination/tests/test-heartbeat-simple.sh +0 -124
  157. package/claude-assets/skills/cfn-redis-coordination/tests/test-primitives.sh +0 -166
  158. package/claude-assets/skills/cfn-redis-coordination/tests/test-utils.sh +0 -54
  159. package/claude-assets/skills/cfn-redis-coordination/tests/test_utils.sh +0 -49
  160. package/claude-assets/skills/cfn-redis-coordination/v2_modularization/core_orchestration.sh +0 -76
  161. package/claude-assets/skills/cfn-redis-coordination/validate-parameters.sh +0 -492
@@ -1,220 +0,0 @@
1
- #!/usr/bin/env bash
2
- set -euo pipefail
3
-
4
- # Version 1.3.0
5
- # Redis Coordination Pattern CLI
6
-
7
- # Load configuration
8
- CONFIG_PATH="$(dirname "$0")/config.json"
9
- REDIS_HOST=$(jq -r '.host' "$CONFIG_PATH")
10
- REDIS_PORT=$(jq -r '.port' "$CONFIG_PATH")
11
- REDIS_DB=$(jq -r '.db' "$CONFIG_PATH")
12
-
13
- # Utility functions
14
- log_error() {
15
- echo "{\"status\": \"error\", \"message\": \"$1\"}" >&2
16
- exit 1
17
- }
18
-
19
- invoke_redis_command() {
20
- local command="$1"
21
- shift
22
- redis-cli -h "$REDIS_HOST" -p "$REDIS_PORT" -n "$REDIS_DB" "$command" "$@"
23
- }
24
-
25
- # Waiting mode operations
26
- wait_mode() {
27
- local task_id=""
28
- local agent_id=""
29
- local context=""
30
-
31
- while [[ $# -gt 0 ]]; do
32
- case "$1" in
33
- --task-id)
34
- task_id="$2"
35
- shift 2
36
- ;;
37
- --agent-id)
38
- agent_id="$2"
39
- shift 2
40
- ;;
41
- --context)
42
- context="$2"
43
- shift 2
44
- ;;
45
- *)
46
- log_error "Invalid argument for wait: $1"
47
- ;;
48
- esac
49
- done
50
-
51
- [[ -z "$task_id" ]] && log_error "task-id is required"
52
- [[ -z "$agent_id" ]] && log_error "agent-id is required"
53
-
54
- local wake_channel="task:$task_id:agent:$agent_id:wake"
55
-
56
- # Blocking pop with timeout
57
- result=$(invoke_redis_command BLPOP "$wake_channel" 300)
58
-
59
- if [[ -z "$result" ]]; then
60
- echo "{\"status\": \"timeout\", \"task_id\": \"$task_id\", \"agent_id\": \"$agent_id\", \"context\": \"$context\"}"
61
- else
62
- echo "{\"status\": \"woken\", \"task_id\": \"$task_id\", \"agent_id\": \"$agent_id\", \"payload\": $result, \"context\": \"$context\"}"
63
- fi
64
- }
65
-
66
- wake_mode() {
67
- local task_id=""
68
- local agent_id=""
69
- local payload=""
70
-
71
- while [[ $# -gt 0 ]]; do
72
- case "$1" in
73
- --task-id)
74
- task_id="$2"
75
- shift 2
76
- ;;
77
- --agent-id)
78
- agent_id="$2"
79
- shift 2
80
- ;;
81
- --payload)
82
- payload="$2"
83
- shift 2
84
- ;;
85
- *)
86
- log_error "Invalid argument for wake: $1"
87
- ;;
88
- esac
89
- done
90
-
91
- [[ -z "$task_id" ]] && log_error "task-id is required"
92
- [[ -z "$agent_id" ]] && log_error "agent-id is required"
93
- [[ -z "$payload" ]] && log_error "payload is required"
94
-
95
- local wake_channel="task:$task_id:agent:$agent_id:wake"
96
-
97
- invoke_redis_command LPUSH "$wake_channel" "$payload" > /dev/null
98
-
99
- echo "{\"status\": \"success\", \"task_id\": \"$task_id\", \"agent_id\": \"$agent_id\"}"
100
- }
101
-
102
- report_mode() {
103
- local task_id=""
104
- local agent_id=""
105
- local confidence=0.0
106
- local result=""
107
-
108
- while [[ $# -gt 0 ]]; do
109
- case "$1" in
110
- --task-id)
111
- task_id="$2"
112
- shift 2
113
- ;;
114
- --agent-id)
115
- agent_id="$2"
116
- shift 2
117
- ;;
118
- --confidence)
119
- confidence="$2"
120
- shift 2
121
- ;;
122
- --result)
123
- result="$2"
124
- shift 2
125
- ;;
126
- *)
127
- log_error "Invalid argument for report: $1"
128
- ;;
129
- esac
130
- done
131
-
132
- [[ -z "$task_id" ]] && log_error "task-id is required"
133
- [[ -z "$agent_id" ]] && log_error "agent-id is required"
134
-
135
- local result_key="task:$task_id:agent:$agent_id:result"
136
- local result_json=$(jq -n \
137
- --arg r "$result" \
138
- --arg c "$confidence" \
139
- '{result: $r, confidence: ($c | tonumber), timestamp: now}')
140
-
141
- invoke_redis_command SET "$result_key" "$result_json" > /dev/null
142
-
143
- echo "{\"status\": \"success\", \"task_id\": \"$task_id\", \"agent_id\": \"$agent_id\", \"confidence\": $confidence}"
144
- }
145
-
146
- collect_mode() {
147
- local task_id=""
148
- local agent_ids=()
149
-
150
- while [[ $# -gt 0 ]]; do
151
- case "$1" in
152
- --task-id)
153
- task_id="$2"
154
- shift 2
155
- ;;
156
- --agent-ids)
157
- IFS=',' read -r -a agent_ids <<< "$2"
158
- shift 2
159
- ;;
160
- *)
161
- log_error "Invalid argument for collect: $1"
162
- ;;
163
- esac
164
- done
165
-
166
- [[ -z "$task_id" ]] && log_error "task-id is required"
167
- [[ ${#agent_ids[@]} -eq 0 ]] && log_error "agent-ids is required"
168
-
169
- local results=()
170
- local total_confidence=0.0
171
- local valid_results=0
172
-
173
- for agent_id in "${agent_ids[@]}"; do
174
- local result_key="task:$task_id:agent:$agent_id:result"
175
- result=$(invoke_redis_command GET "$result_key")
176
-
177
- if [[ -n "$result" ]]; then
178
- results+=("$result")
179
- confidence=$(echo "$result" | jq '.confidence')
180
- total_confidence=$(echo "$total_confidence + $confidence" | bc)
181
- ((valid_results++))
182
- fi
183
- done
184
-
185
- local avg_confidence=0.0
186
- if [[ $valid_results -gt 0 ]]; then
187
- avg_confidence=$(echo "scale=2; $total_confidence / $valid_results" | bc)
188
- fi
189
-
190
- local consensus_threshold="0.90"
191
- local status="insufficient_consensus"
192
- if (( $(echo "$avg_confidence >= $consensus_threshold" | bc -l) )); then
193
- status="consensus"
194
- fi
195
-
196
- echo "{\"status\": \"$status\", \"task_id\": \"$task_id\", \"results\": $(printf '%s\n' "${results[@]}" | jq -s '.'), \"avgConfidence\": $avg_confidence, \"consensusThreshold\": $consensus_threshold}"
197
- }
198
-
199
- # Determine action
200
- case "${1:-}" in
201
- wait)
202
- shift
203
- wait_mode "$@"
204
- ;;
205
- wake)
206
- shift
207
- wake_mode "$@"
208
- ;;
209
- report)
210
- shift
211
- report_mode "$@"
212
- ;;
213
- collect)
214
- shift
215
- collect_mode "$@"
216
- ;;
217
- *)
218
- log_error "Usage: $0 {wait|wake|report|collect} [options]"
219
- ;;
220
- esac
@@ -1,283 +0,0 @@
1
- #!/bin/bash
2
- #
3
- # Redis Waiting Mode CLI Wrapper for Agents
4
- #
5
- # Usage:
6
- # ./invoke-waiting-mode.sh report --task-id <task> --agent-id <agent> --confidence <score> [--iteration <n>]
7
- # ./invoke-waiting-mode.sh collect --task-id <task> --agent-ids <id1,id2,id3>
8
- # ./invoke-waiting-mode.sh shutdown --task-id <task> [--reason <reason>]
9
- #
10
- # DEPRECATION NOTICE:
11
- # - 'enter' and 'wake' subcommands are DEPRECATED
12
- # - This script now only supports 'report', 'collect', and 'shutdown' subcommands
13
- # - Agents are expected to exit cleanly without waiting mode
14
- #
15
- # Priority Levels (0-100, higher = more urgent, default = 50):
16
- # 90-100: Critical (security patches, system failures)
17
- # 70-89: High (urgent features, blocking bugs)
18
- # 40-60: Medium (normal tasks, default)
19
- # 20-39: Low (optimizations, refactoring)
20
- # 0-19: Minimal (documentation, cleanup)
21
-
22
- set -euo pipefail
23
-
24
- # Debug mode (set DEBUG=true for verbose output)
25
- DEBUG="${DEBUG:-false}"
26
-
27
- # Parse command
28
- COMMAND="${1:-}"
29
- shift || true
30
-
31
- # Parse arguments
32
- TASK_ID=""
33
- AGENT_ID=""
34
- AGENT_IDS=""
35
- REASON=""
36
- ITERATION=""
37
- CONFIDENCE=""
38
- FEEDBACK=""
39
- PRIORITY=50 # Default medium priority (0-100, higher = more urgent)
40
- MIN_QUORUM="" # Minimum quorum for consensus validation
41
-
42
- while [[ $# -gt 0 ]]; do
43
- case $1 in
44
- --task-id)
45
- TASK_ID="$2"
46
- shift 2
47
- ;;
48
- --agent-id)
49
- AGENT_ID="$2"
50
- shift 2
51
- ;;
52
- --agent-ids)
53
- AGENT_IDS="$2"
54
- shift 2
55
- ;;
56
- --reason)
57
- REASON="$2"
58
- shift 2
59
- ;;
60
- --iteration)
61
- ITERATION="$2"
62
- shift 2
63
- ;;
64
- --confidence)
65
- CONFIDENCE="$2"
66
- shift 2
67
- ;;
68
- --feedback)
69
- FEEDBACK="$2"
70
- shift 2
71
- ;;
72
- --priority)
73
- PRIORITY="$2"
74
- shift 2
75
- ;;
76
- --min-quorum)
77
- MIN_QUORUM="$2"
78
- shift 2
79
- ;;
80
- *)
81
- echo "Unknown argument: $1"
82
- exit 1
83
- ;;
84
- esac
85
- done
86
-
87
- case "$COMMAND" in
88
- enter)
89
- echo "[DEPRECATED] 'enter' subcommand is no longer supported."
90
- echo "Agents should no longer use waiting mode. Exit cleanly."
91
- exit 1
92
- ;;
93
-
94
- wake)
95
- echo "[DEPRECATED] 'wake' subcommand is no longer supported."
96
- echo "Coordinator should spawn agents directly without waiting mode."
97
- exit 1
98
- ;;
99
-
100
- report)
101
- if [ -z "$TASK_ID" ] || [ -z "$AGENT_ID" ] || [ -z "$CONFIDENCE" ]; then
102
- echo "Error: report requires --task-id, --agent-id, and --confidence"
103
- exit 1
104
- fi
105
-
106
- RESULT_KEY="swarm:${TASK_ID}:${AGENT_ID}:result"
107
-
108
- # Build result message with optional feedback
109
- RESULT_MSG=$(jq -n \
110
- --arg confidence "$CONFIDENCE" \
111
- --arg iteration "${ITERATION:-0}" \
112
- --arg feedback "${FEEDBACK:-}" \
113
- --arg ts "$(date +%s)" \
114
- '{
115
- confidence: ($confidence | tonumber),
116
- iteration: ($iteration | tonumber),
117
- feedback: ($feedback | split(",") | map(select(length > 0))),
118
- timestamp: ($ts | tonumber)
119
- }')
120
-
121
- echo "$RESULT_MSG" | redis-cli -x LPUSH "$RESULT_KEY" >/dev/null
122
-
123
- echo "[$AGENT_ID] ✅ Result reported"
124
- echo " Confidence: $CONFIDENCE"
125
- [ -n "$ITERATION" ] && echo " Iteration: $ITERATION"
126
- if [ -n "$FEEDBACK" ]; then
127
- echo " Feedback items: $(echo "$FEEDBACK" | tr ',' '\n' | wc -l)"
128
- fi
129
- ;;
130
-
131
- collect)
132
- if [ -z "$TASK_ID" ] || [ -z "$AGENT_IDS" ]; then
133
- echo "Error: collect requires --task-id and --agent-ids" >&2
134
- exit 1
135
- fi
136
-
137
- # Output verbose messages to stderr
138
- echo "[Coordinator] Collecting results from agents..." >&2
139
- echo "" >&2
140
-
141
- # Split agent IDs
142
- IFS=',' read -ra AGENTS <<< "$AGENT_IDS"
143
-
144
- RESULTS=()
145
- CONFIDENCES=()
146
- ALL_FEEDBACK=()
147
-
148
- for AGENT in "${AGENTS[@]}"; do
149
- RESULT_KEY="swarm:${TASK_ID}:${AGENT}:result"
150
-
151
- # Get latest result (non-blocking, non-destructive)
152
- # Use LINDEX instead of LPOP to preserve results for multiple reads
153
- RESULT=$(redis-cli LINDEX "$RESULT_KEY" 0)
154
-
155
- if [ -n "$RESULT" ] && [ "$RESULT" != "(nil)" ]; then
156
- # Handle both simple numeric format and JSON format
157
- # Try to parse as JSON first, fall back to simple number
158
- if CONF=$(echo "$RESULT" | jq -r '.confidence' 2>/dev/null) && [ "$CONF" != "null" ]; then
159
- # JSON format: {"confidence":0.85,"iteration":1,...}
160
- echo " [$AGENT] Confidence: $CONF" >&2
161
- RESULTS+=("$RESULT")
162
- CONFIDENCES+=("$CONF")
163
-
164
- # Check if result includes feedback array
165
- FEEDBACK=$(echo "$RESULT" | jq -r '.feedback // empty | .[]?' 2>/dev/null)
166
- if [ -n "$FEEDBACK" ]; then
167
- echo " [$AGENT] Feedback provided:" >&2
168
- echo "$RESULT" | jq -r '.feedback[]' | sed 's/^/ - /' >&2
169
-
170
- # Collect all feedback items
171
- while IFS= read -r ITEM; do
172
- ALL_FEEDBACK+=("$ITEM")
173
- done < <(echo "$RESULT" | jq -r '.feedback[]')
174
- fi
175
- elif [[ "$RESULT" =~ ^[0-9]+\.?[0-9]*$ ]]; then
176
- # Simple numeric format: "0.85"
177
- CONF="$RESULT"
178
- echo " [$AGENT] Confidence: $CONF" >&2
179
- CONFIDENCES+=("$CONF")
180
- else
181
- echo " [$AGENT] ⚠️ Invalid result format: $RESULT" >&2
182
- fi
183
- else
184
- echo " [$AGENT] ⚠️ No result found" >&2
185
- fi
186
- done
187
-
188
- # Validate quorum if specified
189
- TOTAL_AGENTS=${#AGENTS[@]}
190
- RESPONDING_AGENTS=${#CONFIDENCES[@]}
191
-
192
- if [ -n "$MIN_QUORUM" ]; then
193
- # Parse min-quorum (supports: absolute number, percentage, or decimal)
194
- if [[ "$MIN_QUORUM" =~ ^[0-9]+%$ ]]; then
195
- # Percentage format: "66%"
196
- PCT=${MIN_QUORUM%\%}
197
- REQUIRED=$(echo "scale=0; ($TOTAL_AGENTS * $PCT) / 100" | bc)
198
- elif [[ "$MIN_QUORUM" =~ ^0\.[0-9]+$ ]]; then
199
- # Decimal format: "0.66"
200
- REQUIRED=$(echo "scale=0; ($TOTAL_AGENTS * $MIN_QUORUM) / 1" | bc)
201
- else
202
- # Absolute number format: "2"
203
- REQUIRED=$MIN_QUORUM
204
- fi
205
-
206
- if [ "$RESPONDING_AGENTS" -lt "$REQUIRED" ]; then
207
- echo "" >&2
208
- echo "[Coordinator] ❌ Quorum not met" >&2
209
- echo " Required: $REQUIRED agents" >&2
210
- echo " Responding: $RESPONDING_AGENTS agents" >&2
211
- exit 1
212
- fi
213
- fi
214
-
215
- # Calculate consensus
216
- if [ ${#CONFIDENCES[@]} -gt 0 ]; then
217
- SUM=0
218
- for CONF in "${CONFIDENCES[@]}"; do
219
- SUM=$(echo "$SUM + $CONF" | bc)
220
- done
221
- COUNT=${#CONFIDENCES[@]}
222
- CONSENSUS=$(echo "scale=2; $SUM / $COUNT" | bc)
223
-
224
- # Ensure leading zero for bc output (handles .87 -> 0.87)
225
- if [[ "$CONSENSUS" =~ ^\. ]]; then
226
- CONSENSUS="0$CONSENSUS"
227
- fi
228
-
229
- echo "" >&2
230
- echo "[Coordinator] Consensus: $CONSENSUS" >&2
231
-
232
- # Print aggregated feedback if available
233
- if [ ${#ALL_FEEDBACK[@]} -gt 0 ]; then
234
- echo "[Coordinator] Aggregated Feedback (${#ALL_FEEDBACK[@]} items):" >&2
235
- printf '%s\n' "${ALL_FEEDBACK[@]}" | sort -u | sed 's/^/ - /' >&2
236
- fi
237
-
238
- # Output only consensus value to stdout for callers
239
- echo "$CONSENSUS"
240
- else
241
- echo "" >&2
242
- echo "[Coordinator] No results to calculate consensus" >&2
243
- echo "0.0"
244
- fi
245
- ;;
246
-
247
- shutdown)
248
- if [ -z "$TASK_ID" ]; then
249
- echo "Error: shutdown requires --task-id"
250
- exit 1
251
- fi
252
-
253
- SHUTDOWN_KEY="swarm:${TASK_ID}:shutdown"
254
-
255
- # Build shutdown message
256
- SHUTDOWN_MSG=$(jq -n \
257
- --arg reason "${REASON:-task_complete}" \
258
- --arg ts "$(date +%s)" \
259
- '{
260
- reason: $reason,
261
- timestamp: ($ts | tonumber)
262
- }')
263
-
264
- # Broadcast shutdown signal
265
- echo "$SHUTDOWN_MSG" | redis-cli -x LPUSH "$SHUTDOWN_KEY" >/dev/null
266
-
267
- echo "[Coordinator] 🛑 Shutdown signal broadcasted"
268
- echo " Task ID: $TASK_ID"
269
- echo " Reason: ${REASON:-task_complete}"
270
- ;;
271
-
272
- *)
273
- echo "Usage: $0 <command> [options]"
274
- echo ""
275
- echo "Commands:"
276
- echo " report - Agent reports result"
277
- echo " collect - Coordinator collects results"
278
- echo " shutdown - Coordinator broadcasts shutdown signal"
279
- echo ""
280
- echo "Note: 'enter' and 'wake' subcommands are DEPRECATED"
281
- exit 1
282
- ;;
283
- esac
@@ -1,147 +0,0 @@
1
- #!/usr/bin/env bash
2
-
3
- ##############################################################################
4
- # List Active Swarms - Redis Coordination
5
- #
6
- # Queries Redis for all active swarm metadata to help track multiple
7
- # concurrent CFN Loop sessions.
8
- #
9
- # Usage:
10
- # ./list-active-swarms.sh [--task-id <id>] [--mode <mode>] [--json]
11
- ##############################################################################
12
-
13
- set -euo pipefail
14
-
15
- # Configuration
16
- TASK_ID_FILTER=""
17
- MODE_FILTER=""
18
- JSON_OUTPUT=false
19
-
20
- # Parse arguments
21
- while [[ $# -gt 0 ]]; do
22
- case $1 in
23
- --task-id)
24
- TASK_ID_FILTER="$2"
25
- shift 2
26
- ;;
27
- --mode)
28
- MODE_FILTER="$2"
29
- shift 2
30
- ;;
31
- --json)
32
- JSON_OUTPUT=true
33
- shift
34
- ;;
35
- *)
36
- echo "Unknown option: $1"
37
- echo "Usage: $0 [--task-id <id>] [--mode <mode>] [--json]"
38
- exit 1
39
- ;;
40
- esac
41
- done
42
-
43
- # Get all swarm metadata keys
44
- SWARM_KEYS=$(redis-cli --scan --pattern "swarm:*:metadata" 2>/dev/null || echo "")
45
-
46
- if [ -z "$SWARM_KEYS" ]; then
47
- if [ "$JSON_OUTPUT" = true ]; then
48
- echo '{"swarms": [], "count": 0}'
49
- else
50
- echo "No active swarms found"
51
- fi
52
- exit 0
53
- fi
54
-
55
- # Initialize JSON array
56
- if [ "$JSON_OUTPUT" = true ]; then
57
- echo '{"swarms": ['
58
- FIRST=true
59
- fi
60
-
61
- # Process each swarm
62
- while IFS= read -r KEY; do
63
- if [ -z "$KEY" ]; then
64
- continue
65
- fi
66
-
67
- # Extract swarm ID from key (swarm:swarm-<task-id>:metadata)
68
- SWARM_ID=$(echo "$KEY" | sed 's/swarm:\(.*\):metadata/\1/')
69
-
70
- # Get metadata
71
- TASK_ID=$(redis-cli hget "$KEY" task_id 2>/dev/null || echo "")
72
- MODE=$(redis-cli hget "$KEY" mode 2>/dev/null || echo "")
73
- MAX_AGENTS=$(redis-cli hget "$KEY" max_agents 2>/dev/null || echo "")
74
- LOOP3_AGENTS=$(redis-cli hget "$KEY" loop3_agents 2>/dev/null || echo "")
75
- LOOP2_AGENTS=$(redis-cli hget "$KEY" loop2_agents 2>/dev/null || echo "")
76
- PRODUCT_OWNER=$(redis-cli hget "$KEY" product_owner 2>/dev/null || echo "")
77
- CREATED_AT=$(redis-cli hget "$KEY" created_at 2>/dev/null || echo "")
78
- STATUS=$(redis-cli hget "$KEY" status 2>/dev/null || echo "in_progress")
79
- FINAL_CONSENSUS=$(redis-cli hget "$KEY" final_consensus 2>/dev/null || echo "")
80
- TOTAL_ITERATIONS=$(redis-cli hget "$KEY" total_iterations 2>/dev/null || echo "")
81
- COMPLETED_AT=$(redis-cli hget "$KEY" completed_at 2>/dev/null || echo "")
82
-
83
- # Apply filters
84
- if [ -n "$TASK_ID_FILTER" ] && [ "$TASK_ID" != "$TASK_ID_FILTER" ]; then
85
- continue
86
- fi
87
-
88
- if [ -n "$MODE_FILTER" ] && [ "$MODE" != "$MODE_FILTER" ]; then
89
- continue
90
- fi
91
-
92
- # Output
93
- if [ "$JSON_OUTPUT" = true ]; then
94
- if [ "$FIRST" = false ]; then
95
- echo ","
96
- fi
97
- FIRST=false
98
-
99
- cat <<EOF
100
- {
101
- "swarm_id": "$SWARM_ID",
102
- "task_id": "$TASK_ID",
103
- "mode": "$MODE",
104
- "status": "$STATUS",
105
- "max_agents": $MAX_AGENTS,
106
- "loop3_agents": "$LOOP3_AGENTS",
107
- "loop2_agents": "$LOOP2_AGENTS",
108
- "product_owner": "$PRODUCT_OWNER",
109
- "created_at": "$CREATED_AT",
110
- "final_consensus": "$FINAL_CONSENSUS",
111
- "total_iterations": "$TOTAL_ITERATIONS",
112
- "completed_at": "$COMPLETED_AT"
113
- }
114
- EOF
115
- else
116
- echo "========================================="
117
- echo "Swarm ID: $SWARM_ID"
118
- echo "Task ID: $TASK_ID"
119
- echo "Mode: $MODE"
120
- echo "Status: $STATUS"
121
- echo "Agents: $MAX_AGENTS total"
122
- echo " Loop 3: $LOOP3_AGENTS"
123
- echo " Loop 2: $LOOP2_AGENTS"
124
- echo " Product Owner: $PRODUCT_OWNER"
125
- echo "Created: $CREATED_AT"
126
-
127
- if [ -n "$COMPLETED_AT" ]; then
128
- echo "Completed: $COMPLETED_AT"
129
- echo "Final Consensus: $FINAL_CONSENSUS"
130
- echo "Total Iterations: $TOTAL_ITERATIONS"
131
- fi
132
-
133
- echo ""
134
- fi
135
-
136
- done <<< "$SWARM_KEYS"
137
-
138
- # Close JSON array
139
- if [ "$JSON_OUTPUT" = true ]; then
140
- echo ""
141
- echo "],"
142
-
143
- # Count swarms
144
- COUNT=$(echo "$SWARM_KEYS" | wc -l)
145
- echo "\"count\": $COUNT"
146
- echo "}"
147
- fi