claude-flow-novice 2.14.3 → 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 (162) 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/agents/agent-loader.js +165 -146
  6. package/dist/agents/agent-loader.js.map +1 -1
  7. package/dist/cli/agent-prompt-builder.js +25 -0
  8. package/dist/cli/agent-prompt-builder.js.map +1 -1
  9. package/dist/cli/config-manager.js +91 -109
  10. package/package.json +1 -1
  11. package/.claude/skills/cfn-redis-coordination/HEARTBEAT.md +0 -57
  12. package/.claude/skills/cfn-redis-coordination/HEARTBEAT_MONITORING.md +0 -267
  13. package/.claude/skills/cfn-redis-coordination/LOGGING.md +0 -260
  14. package/.claude/skills/cfn-redis-coordination/README.md +0 -65
  15. package/.claude/skills/cfn-redis-coordination/SECURITY_REVIEW.md +0 -25
  16. package/.claude/skills/cfn-redis-coordination/SHUTDOWN_HANDLING.md +0 -164
  17. package/.claude/skills/cfn-redis-coordination/SKILL.md +0 -720
  18. package/.claude/skills/cfn-redis-coordination/demos/test-dlq.sh +0 -129
  19. package/.claude/skills/cfn-redis-coordination/demos/test-iteration-feedback.sh +0 -320
  20. package/.claude/skills/cfn-redis-coordination/demos/test-orchestrator.sh +0 -249
  21. package/.claude/skills/cfn-redis-coordination/demos/test-priority-wake-phase4-unix.sh +0 -148
  22. package/.claude/skills/cfn-redis-coordination/demos/test-priority-wake-phase4.sh +0 -163
  23. package/.claude/skills/cfn-redis-coordination/demos/test-priority-wake.sh +0 -138
  24. package/.claude/skills/cfn-redis-coordination/demos/test-quick-fix.sh +0 -81
  25. package/.claude/skills/cfn-redis-coordination/demos/test-quorum-absolute.sh +0 -45
  26. package/.claude/skills/cfn-redis-coordination/demos/test-quorum-fallback.sh +0 -68
  27. package/.claude/skills/cfn-redis-coordination/demos/test-quorum-percentage.sh +0 -56
  28. package/.claude/skills/cfn-redis-coordination/demos/test-quorum-with-retry.sh +0 -81
  29. package/.claude/skills/cfn-redis-coordination/demos/test-quorum.sh +0 -57
  30. package/.claude/skills/cfn-redis-coordination/demos/test-shutdown-handling.sh +0 -187
  31. package/.claude/skills/cfn-redis-coordination/demos/test-shutdown.sh +0 -160
  32. package/.claude/skills/cfn-redis-coordination/demos/test-utils-unix.sh +0 -97
  33. package/.claude/skills/cfn-redis-coordination/demos/test-utils.sh +0 -97
  34. package/.claude/skills/cfn-redis-coordination/demos/test-waiting-mode.sh +0 -59
  35. package/.claude/skills/cfn-redis-coordination/examples/README.md +0 -73
  36. package/.claude/skills/cfn-redis-coordination/examples/grafana-dashboard.json +0 -352
  37. package/.claude/skills/cfn-redis-coordination/examples/hierarchical-pattern.sh +0 -127
  38. package/.claude/skills/cfn-redis-coordination/examples/mesh-pattern.sh +0 -171
  39. package/.claude/skills/cfn-redis-coordination/examples/timeout-handling.sh +0 -227
  40. package/.claude/skills/cfn-redis-coordination/examples/waiting-mode-pattern.sh +0 -239
  41. package/.claude/skills/cfn-redis-coordination/execute-product-owner-decision.sh +0 -258
  42. package/.claude/skills/cfn-redis-coordination/get-agent-timeout.sh +0 -177
  43. package/.claude/skills/cfn-redis-coordination/heartbeat-functions.sh +0 -137
  44. package/.claude/skills/cfn-redis-coordination/heartbeat-protocol.md +0 -106
  45. package/.claude/skills/cfn-redis-coordination/heartbeat.sh +0 -126
  46. package/.claude/skills/cfn-redis-coordination/init-swarm.sh +0 -148
  47. package/.claude/skills/cfn-redis-coordination/invoke-redis-pattern.sh +0 -220
  48. package/.claude/skills/cfn-redis-coordination/invoke-waiting-mode.sh +0 -283
  49. package/.claude/skills/cfn-redis-coordination/list-active-swarms.sh +0 -147
  50. package/.claude/skills/cfn-redis-coordination/log-event.sh +0 -109
  51. package/.claude/skills/cfn-redis-coordination/metrics-export.sh +0 -674
  52. package/.claude/skills/cfn-redis-coordination/metrics-schema.json +0 -66
  53. package/.claude/skills/cfn-redis-coordination/metrics-storage.md +0 -31
  54. package/.claude/skills/cfn-redis-coordination/monitor-cfn-violations.sh +0 -391
  55. package/.claude/skills/cfn-redis-coordination/monitor-heartbeats.sh +0 -101
  56. package/.claude/skills/cfn-redis-coordination/orchestrate-cfn-loop-v3.sh +0 -141
  57. package/.claude/skills/cfn-redis-coordination/orchestrate-cfn-loop.sh +0 -31
  58. package/.claude/skills/cfn-redis-coordination/orchestrate-cfn-loop.sh.bak +0 -0
  59. package/.claude/skills/cfn-redis-coordination/priority-wake-mechanism.md +0 -75
  60. package/.claude/skills/cfn-redis-coordination/priority_wake.py +0 -134
  61. package/.claude/skills/cfn-redis-coordination/query-dlq.sh +0 -162
  62. package/.claude/skills/cfn-redis-coordination/query-logs.sh +0 -103
  63. package/.claude/skills/cfn-redis-coordination/redis-pattern.sh +0 -619
  64. package/.claude/skills/cfn-redis-coordination/retrieve-context.sh +0 -58
  65. package/.claude/skills/cfn-redis-coordination/select-specialist-agent.sh +0 -371
  66. package/.claude/skills/cfn-redis-coordination/semantic-match-tfidf.py +0 -252
  67. package/.claude/skills/cfn-redis-coordination/send-heartbeat.sh +0 -165
  68. package/.claude/skills/cfn-redis-coordination/signal.sh +0 -38
  69. package/.claude/skills/cfn-redis-coordination/store-context.sh +0 -86
  70. package/.claude/skills/cfn-redis-coordination/store-epic-context.sh +0 -123
  71. package/.claude/skills/cfn-redis-coordination/test-context-injection.sh +0 -354
  72. package/.claude/skills/cfn-redis-coordination/test-timeout-enforcement.sh +0 -513
  73. package/.claude/skills/cfn-redis-coordination/tests/convert-line-endings.sh +0 -15
  74. package/.claude/skills/cfn-redis-coordination/tests/dlq-functionality-test.sh +0 -102
  75. package/.claude/skills/cfn-redis-coordination/tests/edge-cases-test.sh +0 -99
  76. package/.claude/skills/cfn-redis-coordination/tests/integration-test.sh +0 -170
  77. package/.claude/skills/cfn-redis-coordination/tests/retry-mechanism-test.sh +0 -82
  78. package/.claude/skills/cfn-redis-coordination/tests/run-test-suite.sh +0 -92
  79. package/.claude/skills/cfn-redis-coordination/tests/run-tests.sh +0 -4
  80. package/.claude/skills/cfn-redis-coordination/tests/test-heartbeat-monitoring.sh +0 -418
  81. package/.claude/skills/cfn-redis-coordination/tests/test-heartbeat-simple.sh +0 -124
  82. package/.claude/skills/cfn-redis-coordination/tests/test-primitives.sh +0 -166
  83. package/.claude/skills/cfn-redis-coordination/tests/test-utils.sh +0 -54
  84. package/.claude/skills/cfn-redis-coordination/tests/test_utils.sh +0 -49
  85. package/.claude/skills/cfn-redis-coordination/v2_modularization/core_orchestration.sh +0 -76
  86. package/.claude/skills/cfn-redis-coordination/validate-parameters.sh +0 -492
  87. package/claude-assets/skills/cfn-redis-coordination/HEARTBEAT.md +0 -57
  88. package/claude-assets/skills/cfn-redis-coordination/HEARTBEAT_MONITORING.md +0 -267
  89. package/claude-assets/skills/cfn-redis-coordination/LOGGING.md +0 -260
  90. package/claude-assets/skills/cfn-redis-coordination/README.md +0 -65
  91. package/claude-assets/skills/cfn-redis-coordination/SECURITY_REVIEW.md +0 -25
  92. package/claude-assets/skills/cfn-redis-coordination/SHUTDOWN_HANDLING.md +0 -164
  93. package/claude-assets/skills/cfn-redis-coordination/SKILL.md +0 -720
  94. package/claude-assets/skills/cfn-redis-coordination/demos/test-dlq.sh +0 -129
  95. package/claude-assets/skills/cfn-redis-coordination/demos/test-iteration-feedback.sh +0 -320
  96. package/claude-assets/skills/cfn-redis-coordination/demos/test-orchestrator.sh +0 -249
  97. package/claude-assets/skills/cfn-redis-coordination/demos/test-priority-wake-phase4-unix.sh +0 -148
  98. package/claude-assets/skills/cfn-redis-coordination/demos/test-priority-wake-phase4.sh +0 -163
  99. package/claude-assets/skills/cfn-redis-coordination/demos/test-priority-wake.sh +0 -138
  100. package/claude-assets/skills/cfn-redis-coordination/demos/test-quick-fix.sh +0 -81
  101. package/claude-assets/skills/cfn-redis-coordination/demos/test-quorum-absolute.sh +0 -45
  102. package/claude-assets/skills/cfn-redis-coordination/demos/test-quorum-fallback.sh +0 -68
  103. package/claude-assets/skills/cfn-redis-coordination/demos/test-quorum-percentage.sh +0 -56
  104. package/claude-assets/skills/cfn-redis-coordination/demos/test-quorum-with-retry.sh +0 -81
  105. package/claude-assets/skills/cfn-redis-coordination/demos/test-quorum.sh +0 -57
  106. package/claude-assets/skills/cfn-redis-coordination/demos/test-shutdown-handling.sh +0 -187
  107. package/claude-assets/skills/cfn-redis-coordination/demos/test-shutdown.sh +0 -160
  108. package/claude-assets/skills/cfn-redis-coordination/demos/test-utils-unix.sh +0 -97
  109. package/claude-assets/skills/cfn-redis-coordination/demos/test-utils.sh +0 -97
  110. package/claude-assets/skills/cfn-redis-coordination/demos/test-waiting-mode.sh +0 -59
  111. package/claude-assets/skills/cfn-redis-coordination/examples/README.md +0 -73
  112. package/claude-assets/skills/cfn-redis-coordination/examples/grafana-dashboard.json +0 -352
  113. package/claude-assets/skills/cfn-redis-coordination/examples/hierarchical-pattern.sh +0 -127
  114. package/claude-assets/skills/cfn-redis-coordination/examples/mesh-pattern.sh +0 -171
  115. package/claude-assets/skills/cfn-redis-coordination/examples/timeout-handling.sh +0 -227
  116. package/claude-assets/skills/cfn-redis-coordination/examples/waiting-mode-pattern.sh +0 -239
  117. package/claude-assets/skills/cfn-redis-coordination/execute-product-owner-decision.sh +0 -258
  118. package/claude-assets/skills/cfn-redis-coordination/get-agent-timeout.sh +0 -177
  119. package/claude-assets/skills/cfn-redis-coordination/heartbeat-functions.sh +0 -137
  120. package/claude-assets/skills/cfn-redis-coordination/heartbeat-protocol.md +0 -106
  121. package/claude-assets/skills/cfn-redis-coordination/heartbeat.sh +0 -126
  122. package/claude-assets/skills/cfn-redis-coordination/init-swarm.sh +0 -148
  123. package/claude-assets/skills/cfn-redis-coordination/invoke-redis-pattern.sh +0 -220
  124. package/claude-assets/skills/cfn-redis-coordination/invoke-waiting-mode.sh +0 -283
  125. package/claude-assets/skills/cfn-redis-coordination/list-active-swarms.sh +0 -147
  126. package/claude-assets/skills/cfn-redis-coordination/log-event.sh +0 -109
  127. package/claude-assets/skills/cfn-redis-coordination/metrics-export.sh +0 -674
  128. package/claude-assets/skills/cfn-redis-coordination/metrics-schema.json +0 -66
  129. package/claude-assets/skills/cfn-redis-coordination/metrics-storage.md +0 -31
  130. package/claude-assets/skills/cfn-redis-coordination/monitor-cfn-violations.sh +0 -391
  131. package/claude-assets/skills/cfn-redis-coordination/monitor-heartbeats.sh +0 -101
  132. package/claude-assets/skills/cfn-redis-coordination/orchestrate-cfn-loop-v3.sh +0 -141
  133. package/claude-assets/skills/cfn-redis-coordination/orchestrate-cfn-loop.sh +0 -31
  134. package/claude-assets/skills/cfn-redis-coordination/orchestrate-cfn-loop.sh.bak +0 -0
  135. package/claude-assets/skills/cfn-redis-coordination/priority-wake-mechanism.md +0 -75
  136. package/claude-assets/skills/cfn-redis-coordination/priority_wake.py +0 -134
  137. package/claude-assets/skills/cfn-redis-coordination/query-dlq.sh +0 -162
  138. package/claude-assets/skills/cfn-redis-coordination/query-logs.sh +0 -103
  139. package/claude-assets/skills/cfn-redis-coordination/redis-pattern.sh +0 -619
  140. package/claude-assets/skills/cfn-redis-coordination/retrieve-context.sh +0 -58
  141. package/claude-assets/skills/cfn-redis-coordination/select-specialist-agent.sh +0 -371
  142. package/claude-assets/skills/cfn-redis-coordination/semantic-match-tfidf.py +0 -252
  143. package/claude-assets/skills/cfn-redis-coordination/send-heartbeat.sh +0 -165
  144. package/claude-assets/skills/cfn-redis-coordination/signal.sh +0 -38
  145. package/claude-assets/skills/cfn-redis-coordination/store-context.sh +0 -86
  146. package/claude-assets/skills/cfn-redis-coordination/store-epic-context.sh +0 -123
  147. package/claude-assets/skills/cfn-redis-coordination/test-context-injection.sh +0 -354
  148. package/claude-assets/skills/cfn-redis-coordination/test-timeout-enforcement.sh +0 -513
  149. package/claude-assets/skills/cfn-redis-coordination/tests/convert-line-endings.sh +0 -15
  150. package/claude-assets/skills/cfn-redis-coordination/tests/dlq-functionality-test.sh +0 -102
  151. package/claude-assets/skills/cfn-redis-coordination/tests/edge-cases-test.sh +0 -99
  152. package/claude-assets/skills/cfn-redis-coordination/tests/integration-test.sh +0 -170
  153. package/claude-assets/skills/cfn-redis-coordination/tests/retry-mechanism-test.sh +0 -82
  154. package/claude-assets/skills/cfn-redis-coordination/tests/run-test-suite.sh +0 -92
  155. package/claude-assets/skills/cfn-redis-coordination/tests/run-tests.sh +0 -4
  156. package/claude-assets/skills/cfn-redis-coordination/tests/test-heartbeat-monitoring.sh +0 -418
  157. package/claude-assets/skills/cfn-redis-coordination/tests/test-heartbeat-simple.sh +0 -124
  158. package/claude-assets/skills/cfn-redis-coordination/tests/test-primitives.sh +0 -166
  159. package/claude-assets/skills/cfn-redis-coordination/tests/test-utils.sh +0 -54
  160. package/claude-assets/skills/cfn-redis-coordination/tests/test_utils.sh +0 -49
  161. package/claude-assets/skills/cfn-redis-coordination/v2_modularization/core_orchestration.sh +0 -76
  162. package/claude-assets/skills/cfn-redis-coordination/validate-parameters.sh +0 -492
@@ -1,619 +0,0 @@
1
- #!/bin/bash
2
- #
3
- # Redis Coordination Pattern CLI Wrapper
4
- #
5
- # Enables agents to use Redis coordination patterns via simple CLI interface.
6
- # Supports: chain, hierarchical, mesh, waiting, and wake patterns.
7
- #
8
- # Usage:
9
- # ./redis-pattern.sh --pattern chain --channel task-queue --message "data" --timeout 300
10
- # ./redis-pattern.sh --pattern waiting --channel task-queue --agent-id coder-1
11
- # ./redis-pattern.sh --pattern wake --channel task-queue --message "start"
12
- # ./redis-pattern.sh --pattern hierarchical --channel coordinator --agent-ids agent1,agent2,agent3
13
- # ./redis-pattern.sh --pattern mesh --channel validator --agent-ids agent1,agent2,agent3
14
- #
15
- # Exit codes:
16
- # 0 - Success
17
- # 1 - Error (validation, redis, etc.)
18
- # 2 - Timeout
19
-
20
- set -euo pipefail
21
-
22
- # ============================================================================
23
- # CONFIGURATION
24
- # ============================================================================
25
-
26
- SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
27
- CONFIG_FILE="$SCRIPT_DIR/config.json"
28
-
29
- # Colors for output
30
- RED='\033[0;31m'
31
- GREEN='\033[0;32m'
32
- YELLOW='\033[1;33m'
33
- BLUE='\033[0;34m'
34
- NC='\033[0m' # No Color
35
-
36
- # Default values
37
- DEFAULT_TIMEOUT=300
38
- DEFAULT_BLOCKING_TIMEOUT=0
39
- REDIS_URL="${REDIS_URL:-redis://localhost:6379}"
40
-
41
- # ============================================================================
42
- # HELPER FUNCTIONS
43
- # ============================================================================
44
-
45
- log_info() {
46
- echo -e "${BLUE}[INFO]${NC} $1" >&2
47
- }
48
-
49
- log_success() {
50
- echo -e "${GREEN}[SUCCESS]${NC} $1" >&2
51
- }
52
-
53
- log_warning() {
54
- echo -e "${YELLOW}[WARNING]${NC} $1" >&2
55
- }
56
-
57
- log_error() {
58
- echo -e "${RED}[ERROR]${NC} $1" >&2
59
- }
60
-
61
- output_json() {
62
- local status="$1"
63
- local data="$2"
64
- local error="${3:-}"
65
-
66
- jq -n \
67
- --arg status "$status" \
68
- --argjson data "$data" \
69
- --arg error "$error" \
70
- --arg timestamp "$(date +%s)" \
71
- '{
72
- status: $status,
73
- data: $data,
74
- error: $error,
75
- timestamp: ($timestamp | tonumber)
76
- }'
77
- }
78
-
79
- check_redis() {
80
- if ! command -v redis-cli &> /dev/null; then
81
- log_error "redis-cli not found. Please install Redis."
82
- log_info "Installation: https://redis.io/docs/getting-started/installation/"
83
- exit 1
84
- fi
85
-
86
- if ! redis-cli ping &> /dev/null; then
87
- log_error "Redis server not reachable at $REDIS_URL"
88
- log_info "Start Redis server: redis-server"
89
- exit 1
90
- fi
91
- }
92
-
93
- load_config() {
94
- if [[ -f "$CONFIG_FILE" ]]; then
95
- log_info "Loaded configuration from $CONFIG_FILE"
96
- else
97
- log_warning "Configuration file not found: $CONFIG_FILE"
98
- log_info "Using default configuration"
99
- fi
100
- }
101
-
102
- show_usage() {
103
- cat <<EOF
104
- Redis Coordination Pattern CLI Wrapper
105
-
106
- USAGE:
107
- $(basename "$0") --pattern <pattern> [OPTIONS]
108
-
109
- PATTERNS:
110
- chain Sequential chain coordination (A → B → C)
111
- hierarchical 1:Many broadcast coordination (Coordinator → Multiple Agents)
112
- mesh Many:1 aggregation coordination (Multiple Agents → Validator)
113
- waiting Zero-token waiting mode (agent blocks until woken)
114
- wake Wake up waiting agents
115
-
116
- COMMON OPTIONS:
117
- --pattern <name> Coordination pattern to use (REQUIRED)
118
- --channel <channel> Redis channel/key name (REQUIRED)
119
- --message <data> Message data to send (JSON string)
120
- --timeout <seconds> Timeout in seconds (default: 300, 0 = infinite)
121
- --agent-id <id> Agent identifier
122
- --task-id <id> Task identifier
123
- --config <file> Path to config file (default: ./config.json)
124
- --json Output JSON format
125
- --help Show this help message
126
-
127
- PATTERN-SPECIFIC OPTIONS:
128
-
129
- Chain Pattern:
130
- --channel <channel> Channel to push/pop from
131
- --message <data> Data to push
132
- --timeout <seconds> Wait timeout (default: 300)
133
-
134
- Hierarchical Pattern:
135
- --channel <channel> Coordinator's output channel
136
- --agent-ids <ids> Comma-separated agent IDs to broadcast to
137
- --message <data> Data to broadcast
138
-
139
- Mesh Pattern:
140
- --channel <channel> Aggregation channel
141
- --agent-ids <ids> Comma-separated agent IDs to collect from
142
- --timeout <seconds> Wait timeout per agent (default: 300)
143
-
144
- Waiting Pattern:
145
- --task-id <id> Task identifier
146
- --agent-id <id> Agent identifier
147
- --context <context> Context string (e.g., "iteration-1")
148
- --timeout <seconds> Wait timeout (0 = infinite, default)
149
-
150
- Wake Pattern:
151
- --task-id <id> Task identifier
152
- --agent-id <id> Agent identifier to wake
153
- --reason <reason> Wake reason (cfn_loop_iteration, incomplete_work, etc.)
154
- --iteration <n> Iteration number (optional)
155
- --feedback <items> Comma-separated feedback items (optional)
156
-
157
- EXAMPLES:
158
-
159
- # Chain: Agent pushes data and waits for next agent
160
- $(basename "$0") --pattern chain --channel "auth:coder:done" --message '{"status":"complete"}'
161
-
162
- # Chain: Agent waits for previous agent's data
163
- $(basename "$0") --pattern chain --channel "auth:researcher:done" --timeout 300
164
-
165
- # Hierarchical: Coordinator broadcasts to multiple agents
166
- $(basename "$0") --pattern hierarchical --channel "auth:researcher:done" \\
167
- --agent-ids "analyzer,architect,coder" --message '{"findings":"JWT recommended"}'
168
-
169
- # Mesh: Validator collects results from multiple agents
170
- $(basename "$0") --pattern mesh --channel "auth:validator" \\
171
- --agent-ids "coder,tester,reviewer" --timeout 300
172
-
173
- # Waiting: Agent enters waiting mode (zero token cost)
174
- $(basename "$0") --pattern waiting --task-id auth-system --agent-id coder-1 \\
175
- --context "iteration-1"
176
-
177
- # Wake: Coordinator wakes agent for next iteration
178
- $(basename "$0") --pattern wake --task-id auth-system --agent-id coder-1 \\
179
- --reason cfn_loop_iteration --iteration 2 --feedback "Add error handling,Improve tests"
180
-
181
- EXIT CODES:
182
- 0 - Success
183
- 1 - Error (validation, redis connection, etc.)
184
- 2 - Timeout exceeded
185
-
186
- OUTPUT:
187
- Default: Human-readable text to stderr, data to stdout
188
- --json: JSON object with status, data, error, and timestamp
189
-
190
- EOF
191
- }
192
-
193
- # ============================================================================
194
- # PATTERN IMPLEMENTATIONS
195
- # ============================================================================
196
-
197
- pattern_chain() {
198
- local channel="$1"
199
- local message="${2:-}"
200
- local timeout="${3:-$DEFAULT_TIMEOUT}"
201
-
202
- check_redis
203
-
204
- if [[ -n "$message" ]]; then
205
- # Push mode: Send message to channel
206
- log_info "Chain pattern: Pushing to channel '$channel'"
207
-
208
- echo "$message" | redis-cli -x LPUSH "$channel" >/dev/null
209
-
210
- log_success "Message pushed successfully"
211
-
212
- if [[ "$OUTPUT_JSON" == "true" ]]; then
213
- output_json "success" '{"action":"push","channel":"'"$channel"'"}' ""
214
- else
215
- echo "pushed"
216
- fi
217
- else
218
- # Pop mode: Wait for message from channel
219
- log_info "Chain pattern: Waiting on channel '$channel' (timeout: ${timeout}s)"
220
-
221
- local result
222
- if result=$(timeout "$timeout" redis-cli --csv BLPOP "$channel" 0 2>&1); then
223
- # BLPOP returns: "channel","message"
224
- # Extract message (second element)
225
- local extracted_message
226
- extracted_message=$(echo "$result" | awk -F',' '{print $2}' | sed 's/"//g')
227
-
228
- log_success "Message received from channel '$channel'"
229
-
230
- if [[ "$OUTPUT_JSON" == "true" ]]; then
231
- output_json "success" "$extracted_message" ""
232
- else
233
- echo "$extracted_message"
234
- fi
235
- else
236
- log_error "Timeout waiting for message on channel '$channel'"
237
- if [[ "$OUTPUT_JSON" == "true" ]]; then
238
- output_json "timeout" "null" "Timeout after ${timeout}s"
239
- fi
240
- exit 2
241
- fi
242
- fi
243
- }
244
-
245
- pattern_hierarchical() {
246
- local coordinator_channel="$1"
247
- local agent_ids="$2"
248
- local message="${3:-}"
249
-
250
- check_redis
251
-
252
- if [[ -z "$message" ]]; then
253
- log_error "Hierarchical pattern requires --message"
254
- exit 1
255
- fi
256
-
257
- log_info "Hierarchical pattern: Broadcasting from '$coordinator_channel' to agents"
258
-
259
- # Split agent IDs
260
- IFS=',' read -ra AGENTS <<< "$agent_ids"
261
-
262
- # Broadcast to each agent's inbox
263
- local broadcast_count=0
264
- for agent_id in "${AGENTS[@]}"; do
265
- agent_id=$(echo "$agent_id" | xargs) # Trim whitespace
266
- local inbox_key="${coordinator_channel}:${agent_id}:inbox"
267
-
268
- echo "$message" | redis-cli -x LPUSH "$inbox_key" >/dev/null
269
- log_info " Broadcasted to agent: $agent_id"
270
- ((broadcast_count++))
271
- done
272
-
273
- log_success "Broadcast complete: $broadcast_count agents"
274
-
275
- if [[ "$OUTPUT_JSON" == "true" ]]; then
276
- output_json "success" '{"action":"broadcast","agents":'"$broadcast_count"'}' ""
277
- else
278
- echo "broadcasted:$broadcast_count"
279
- fi
280
- }
281
-
282
- pattern_mesh() {
283
- local aggregation_channel="$1"
284
- local agent_ids="$2"
285
- local timeout="${3:-$DEFAULT_TIMEOUT}"
286
-
287
- check_redis
288
-
289
- log_info "Mesh pattern: Aggregating results from agents (timeout: ${timeout}s per agent)"
290
-
291
- # Split agent IDs
292
- IFS=',' read -ra AGENTS <<< "$agent_ids"
293
-
294
- local results=()
295
- local confidences=()
296
-
297
- for agent_id in "${AGENTS[@]}"; do
298
- agent_id=$(echo "$agent_id" | xargs) # Trim whitespace
299
- local result_key="${aggregation_channel}:${agent_id}:result"
300
-
301
- log_info " Waiting for agent: $agent_id"
302
-
303
- # Try BLPOP first (for first waiter), then fallback to GET (for persistent data)
304
- local result
305
- if result=$(redis-cli BLPOP "$result_key" "$timeout" 2>/dev/null); then
306
- # BLPOP succeeded
307
- local extracted_result
308
- extracted_result=$(echo "$result" | tail -n 1)
309
- results+=("$extracted_result")
310
-
311
- # Extract confidence if available
312
- if confidence=$(echo "$extracted_result" | jq -r '.confidence // empty' 2>/dev/null); then
313
- [[ -n "$confidence" ]] && confidences+=("$confidence")
314
- fi
315
- else
316
- # Fallback to GET (for hybrid LPUSH+SET pattern)
317
- log_info " Trying persistent key: ${result_key}"
318
- local persistent_key="${aggregation_channel}:${agent_id}:result"
319
-
320
- for ((i=1; i<=timeout; i++)); do
321
- if result=$(redis-cli GET "$persistent_key" 2>/dev/null); then
322
- if [[ -n "$result" ]] && [[ "$result" != "(nil)" ]]; then
323
- results+=("$result")
324
-
325
- # Extract confidence if available
326
- if confidence=$(echo "$result" | jq -r '.confidence // empty' 2>/dev/null); then
327
- [[ -n "$confidence" ]] && confidences+=("$confidence")
328
- fi
329
- break
330
- fi
331
- fi
332
- sleep 1
333
- done
334
-
335
- if [[ ${#results[@]} -eq 0 ]] || [[ "${results[-1]}" == "" ]]; then
336
- log_warning " Timeout waiting for agent: $agent_id"
337
- fi
338
- fi
339
- done
340
-
341
- # Calculate consensus if confidences available
342
- local consensus="null"
343
- if [[ ${#confidences[@]} -gt 0 ]]; then
344
- local sum=0
345
- for conf in "${confidences[@]}"; do
346
- sum=$(echo "$sum + $conf" | bc)
347
- done
348
- consensus=$(echo "scale=4; $sum / ${#confidences[@]}" | bc)
349
- log_info "Calculated consensus: $consensus"
350
- fi
351
-
352
- log_success "Aggregation complete: ${#results[@]} results collected"
353
-
354
- if [[ "$OUTPUT_JSON" == "true" ]]; then
355
- local results_json
356
- results_json=$(printf '%s\n' "${results[@]}" | jq -s '.')
357
- jq -n \
358
- --argjson results "$results_json" \
359
- --arg consensus "$consensus" \
360
- --arg count "${#results[@]}" \
361
- '{results: $results, consensus: ($consensus | tonumber), count: ($count | tonumber)}'
362
- else
363
- printf '%s\n' "${results[@]}"
364
- echo "consensus:$consensus"
365
- fi
366
- }
367
-
368
- pattern_waiting() {
369
- local task_id="$1"
370
- local agent_id="$2"
371
- local context="${3:-default}"
372
- local timeout="${4:-$DEFAULT_BLOCKING_TIMEOUT}"
373
-
374
- check_redis
375
-
376
- local ready_key="swarm:${task_id}:${agent_id}:ready"
377
- local wake_key="swarm:${task_id}:${agent_id}:wake"
378
-
379
- log_info "Waiting pattern: Agent '$agent_id' entering waiting mode"
380
- log_info " Task: $task_id"
381
- log_info " Context: $context"
382
- log_info " Timeout: $([ "$timeout" -eq 0 ] && echo "infinite" || echo "${timeout}s")"
383
-
384
- # Publish ready status
385
- local ready_msg
386
- ready_msg=$(jq -n \
387
- --arg status "waiting" \
388
- --arg context "$context" \
389
- --arg ts "$(date +%s)" \
390
- '{status: $status, context: $context, timestamp: ($ts | tonumber)}')
391
-
392
- echo "$ready_msg" | redis-cli -x LPUSH "$ready_key" >/dev/null
393
-
394
- log_info "Agent ready, blocking on wake channel: $wake_key"
395
- log_success "Zero token cost while waiting..."
396
-
397
- # Block on wake channel
398
- local wake_result
399
- if [[ "$timeout" -eq 0 ]]; then
400
- wake_result=$(redis-cli BLPOP "$wake_key" 0 2>&1)
401
- else
402
- if ! wake_result=$(timeout "$timeout" redis-cli BLPOP "$wake_key" 0 2>&1); then
403
- log_error "Wake-up timeout exceeded"
404
- if [[ "$OUTPUT_JSON" == "true" ]]; then
405
- output_json "timeout" "null" "Wake-up timeout after ${timeout}s"
406
- fi
407
- exit 2
408
- fi
409
- fi
410
-
411
- # Parse wake message (BLPOP returns: key \n message)
412
- local wake_msg
413
- wake_msg=$(echo "$wake_result" | tail -n 1)
414
-
415
- log_success "Agent woken up!"
416
-
417
- if [[ "$OUTPUT_JSON" == "true" ]]; then
418
- output_json "success" "$wake_msg" ""
419
- else
420
- echo "$wake_msg"
421
- fi
422
- }
423
-
424
- pattern_wake() {
425
- local task_id="$1"
426
- local agent_id="$2"
427
- local reason="$3"
428
- local iteration="${4:-0}"
429
- local feedback="${5:-}"
430
- local task_desc="${6:-}"
431
-
432
- check_redis
433
-
434
- local wake_key="swarm:${task_id}:${agent_id}:wake"
435
-
436
- log_info "Wake pattern: Waking agent '$agent_id'"
437
- log_info " Task: $task_id"
438
- log_info " Reason: $reason"
439
- [[ -n "$iteration" ]] && [[ "$iteration" != "0" ]] && log_info " Iteration: $iteration"
440
-
441
- # Build wake message
442
- local wake_msg
443
- wake_msg=$(jq -n \
444
- --arg reason "$reason" \
445
- --arg iteration "$iteration" \
446
- --arg task "$task_desc" \
447
- --arg feedback "$feedback" \
448
- --arg ts "$(date +%s)" \
449
- '{
450
- reason: $reason,
451
- iteration: ($iteration | tonumber),
452
- task: $task,
453
- feedback: ($feedback | split(",") | map(select(length > 0))),
454
- timestamp: ($ts | tonumber)
455
- }')
456
-
457
- echo "$wake_msg" | redis-cli -x LPUSH "$wake_key" >/dev/null
458
-
459
- log_success "Wake signal sent to agent '$agent_id'"
460
-
461
- if [[ "$OUTPUT_JSON" == "true" ]]; then
462
- output_json "success" '{"action":"wake","agentId":"'"$agent_id"'"}' ""
463
- else
464
- echo "woken:$agent_id"
465
- fi
466
- }
467
-
468
- # ============================================================================
469
- # MAIN
470
- # ============================================================================
471
-
472
- main() {
473
- # Parse arguments
474
- local pattern=""
475
- local channel=""
476
- local message=""
477
- local timeout="$DEFAULT_TIMEOUT"
478
- local agent_id=""
479
- local agent_ids=""
480
- local task_id=""
481
- local context="default"
482
- local reason=""
483
- local iteration="0"
484
- local feedback=""
485
- local task_desc=""
486
- OUTPUT_JSON="false"
487
-
488
- while [[ $# -gt 0 ]]; do
489
- case $1 in
490
- --pattern)
491
- pattern="$2"
492
- shift 2
493
- ;;
494
- --channel)
495
- channel="$2"
496
- shift 2
497
- ;;
498
- --message)
499
- message="$2"
500
- shift 2
501
- ;;
502
- --timeout)
503
- timeout="$2"
504
- shift 2
505
- ;;
506
- --agent-id)
507
- agent_id="$2"
508
- shift 2
509
- ;;
510
- --agent-ids)
511
- agent_ids="$2"
512
- shift 2
513
- ;;
514
- --task-id)
515
- task_id="$2"
516
- shift 2
517
- ;;
518
- --context)
519
- context="$2"
520
- shift 2
521
- ;;
522
- --reason)
523
- reason="$2"
524
- shift 2
525
- ;;
526
- --iteration)
527
- iteration="$2"
528
- shift 2
529
- ;;
530
- --feedback)
531
- feedback="$2"
532
- shift 2
533
- ;;
534
- --task)
535
- task_desc="$2"
536
- shift 2
537
- ;;
538
- --config)
539
- CONFIG_FILE="$2"
540
- shift 2
541
- ;;
542
- --json)
543
- OUTPUT_JSON="true"
544
- shift
545
- ;;
546
- --help|-h)
547
- show_usage
548
- exit 0
549
- ;;
550
- *)
551
- log_error "Unknown option: $1"
552
- show_usage
553
- exit 1
554
- ;;
555
- esac
556
- done
557
-
558
- # Load configuration
559
- load_config
560
-
561
- # Validate required arguments
562
- if [[ -z "$pattern" ]]; then
563
- log_error "Missing required argument: --pattern"
564
- show_usage
565
- exit 1
566
- fi
567
-
568
- # Execute pattern
569
- case "$pattern" in
570
- chain)
571
- if [[ -z "$channel" ]]; then
572
- log_error "Chain pattern requires --channel"
573
- exit 1
574
- fi
575
- pattern_chain "$channel" "$message" "$timeout"
576
- ;;
577
-
578
- hierarchical)
579
- if [[ -z "$channel" ]] || [[ -z "$agent_ids" ]]; then
580
- log_error "Hierarchical pattern requires --channel and --agent-ids"
581
- exit 1
582
- fi
583
- pattern_hierarchical "$channel" "$agent_ids" "$message"
584
- ;;
585
-
586
- mesh)
587
- if [[ -z "$channel" ]] || [[ -z "$agent_ids" ]]; then
588
- log_error "Mesh pattern requires --channel and --agent-ids"
589
- exit 1
590
- fi
591
- pattern_mesh "$channel" "$agent_ids" "$timeout"
592
- ;;
593
-
594
- waiting)
595
- if [[ -z "$task_id" ]] || [[ -z "$agent_id" ]]; then
596
- log_error "Waiting pattern requires --task-id and --agent-id"
597
- exit 1
598
- fi
599
- pattern_waiting "$task_id" "$agent_id" "$context" "$timeout"
600
- ;;
601
-
602
- wake)
603
- if [[ -z "$task_id" ]] || [[ -z "$agent_id" ]] || [[ -z "$reason" ]]; then
604
- log_error "Wake pattern requires --task-id, --agent-id, and --reason"
605
- exit 1
606
- fi
607
- pattern_wake "$task_id" "$agent_id" "$reason" "$iteration" "$feedback" "$task_desc"
608
- ;;
609
-
610
- *)
611
- log_error "Unknown pattern: $pattern"
612
- log_info "Available patterns: chain, hierarchical, mesh, waiting, wake"
613
- exit 1
614
- ;;
615
- esac
616
- }
617
-
618
- # Run main function
619
- main "$@"
@@ -1,58 +0,0 @@
1
- #!/bin/bash
2
-
3
- # Redis Context Retrieval Primitive
4
- # Updated interface to match orchestrator expectations
5
- # Supports both legacy (--key) and new (--task-id --key --namespace) interfaces
6
-
7
- # Initialize variables
8
- task_id=""
9
- key=""
10
- namespace="swarm"
11
-
12
- # Parse arguments
13
- while [[ $# -gt 0 ]]; do
14
- case "$1" in
15
- --task-id)
16
- task_id="$2"
17
- shift 2
18
- ;;
19
- --key)
20
- key="$2"
21
- shift 2
22
- ;;
23
- --namespace)
24
- namespace="$2"
25
- shift 2
26
- ;;
27
- *)
28
- echo "Unknown argument: $1" >&2
29
- exit 1
30
- ;;
31
- esac
32
- done
33
-
34
- # Construct Redis key based on interface mode
35
- if [[ -n "$task_id" ]]; then
36
- # New interface: {namespace}:{task_id}:{key}
37
- redis_key="${namespace}:${task_id}:${key}"
38
- else
39
- # Legacy interface: key is used directly
40
- redis_key="$key"
41
- fi
42
-
43
- # Validate required arguments
44
- if [[ -z "$redis_key" ]]; then
45
- echo "Error: Key is required" >&2
46
- echo "Usage: $0 --task-id <id> --key <key> [--namespace <ns>]" >&2
47
- echo " or: $0 --key <full-key>" >&2
48
- exit 1
49
- fi
50
-
51
- # Retrieve context from Redis
52
- context=$(redis-cli get "$redis_key" 2>/dev/null)
53
-
54
- # Print the context (if exists)
55
- echo "$context"
56
-
57
- # Exit successfully
58
- exit 0