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.
- package/.claude/commands/CFN_LOOP_TASK_MODE.md +4 -47
- package/.claude/skills/cfn-redis-coordination/demos/test-cancel-swarm.sh +0 -276
- package/claude-assets/commands/CFN_LOOP_TASK_MODE.md +4 -47
- package/claude-assets/skills/cfn-redis-coordination/demos/test-cancel-swarm.sh +0 -276
- package/dist/agents/agent-loader.js +165 -146
- package/dist/agents/agent-loader.js.map +1 -1
- package/dist/cli/agent-prompt-builder.js +25 -0
- package/dist/cli/agent-prompt-builder.js.map +1 -1
- package/dist/cli/config-manager.js +91 -109
- package/package.json +1 -1
- package/.claude/skills/cfn-redis-coordination/HEARTBEAT.md +0 -57
- package/.claude/skills/cfn-redis-coordination/HEARTBEAT_MONITORING.md +0 -267
- package/.claude/skills/cfn-redis-coordination/LOGGING.md +0 -260
- package/.claude/skills/cfn-redis-coordination/README.md +0 -65
- package/.claude/skills/cfn-redis-coordination/SECURITY_REVIEW.md +0 -25
- package/.claude/skills/cfn-redis-coordination/SHUTDOWN_HANDLING.md +0 -164
- package/.claude/skills/cfn-redis-coordination/SKILL.md +0 -720
- package/.claude/skills/cfn-redis-coordination/demos/test-dlq.sh +0 -129
- package/.claude/skills/cfn-redis-coordination/demos/test-iteration-feedback.sh +0 -320
- package/.claude/skills/cfn-redis-coordination/demos/test-orchestrator.sh +0 -249
- package/.claude/skills/cfn-redis-coordination/demos/test-priority-wake-phase4-unix.sh +0 -148
- package/.claude/skills/cfn-redis-coordination/demos/test-priority-wake-phase4.sh +0 -163
- package/.claude/skills/cfn-redis-coordination/demos/test-priority-wake.sh +0 -138
- package/.claude/skills/cfn-redis-coordination/demos/test-quick-fix.sh +0 -81
- package/.claude/skills/cfn-redis-coordination/demos/test-quorum-absolute.sh +0 -45
- package/.claude/skills/cfn-redis-coordination/demos/test-quorum-fallback.sh +0 -68
- package/.claude/skills/cfn-redis-coordination/demos/test-quorum-percentage.sh +0 -56
- package/.claude/skills/cfn-redis-coordination/demos/test-quorum-with-retry.sh +0 -81
- package/.claude/skills/cfn-redis-coordination/demos/test-quorum.sh +0 -57
- package/.claude/skills/cfn-redis-coordination/demos/test-shutdown-handling.sh +0 -187
- package/.claude/skills/cfn-redis-coordination/demos/test-shutdown.sh +0 -160
- package/.claude/skills/cfn-redis-coordination/demos/test-utils-unix.sh +0 -97
- package/.claude/skills/cfn-redis-coordination/demos/test-utils.sh +0 -97
- package/.claude/skills/cfn-redis-coordination/demos/test-waiting-mode.sh +0 -59
- package/.claude/skills/cfn-redis-coordination/examples/README.md +0 -73
- package/.claude/skills/cfn-redis-coordination/examples/grafana-dashboard.json +0 -352
- package/.claude/skills/cfn-redis-coordination/examples/hierarchical-pattern.sh +0 -127
- package/.claude/skills/cfn-redis-coordination/examples/mesh-pattern.sh +0 -171
- package/.claude/skills/cfn-redis-coordination/examples/timeout-handling.sh +0 -227
- package/.claude/skills/cfn-redis-coordination/examples/waiting-mode-pattern.sh +0 -239
- package/.claude/skills/cfn-redis-coordination/execute-product-owner-decision.sh +0 -258
- package/.claude/skills/cfn-redis-coordination/get-agent-timeout.sh +0 -177
- package/.claude/skills/cfn-redis-coordination/heartbeat-functions.sh +0 -137
- package/.claude/skills/cfn-redis-coordination/heartbeat-protocol.md +0 -106
- package/.claude/skills/cfn-redis-coordination/heartbeat.sh +0 -126
- package/.claude/skills/cfn-redis-coordination/init-swarm.sh +0 -148
- package/.claude/skills/cfn-redis-coordination/invoke-redis-pattern.sh +0 -220
- package/.claude/skills/cfn-redis-coordination/invoke-waiting-mode.sh +0 -283
- package/.claude/skills/cfn-redis-coordination/list-active-swarms.sh +0 -147
- package/.claude/skills/cfn-redis-coordination/log-event.sh +0 -109
- package/.claude/skills/cfn-redis-coordination/metrics-export.sh +0 -674
- package/.claude/skills/cfn-redis-coordination/metrics-schema.json +0 -66
- package/.claude/skills/cfn-redis-coordination/metrics-storage.md +0 -31
- package/.claude/skills/cfn-redis-coordination/monitor-cfn-violations.sh +0 -391
- package/.claude/skills/cfn-redis-coordination/monitor-heartbeats.sh +0 -101
- package/.claude/skills/cfn-redis-coordination/orchestrate-cfn-loop-v3.sh +0 -141
- package/.claude/skills/cfn-redis-coordination/orchestrate-cfn-loop.sh +0 -31
- package/.claude/skills/cfn-redis-coordination/orchestrate-cfn-loop.sh.bak +0 -0
- package/.claude/skills/cfn-redis-coordination/priority-wake-mechanism.md +0 -75
- package/.claude/skills/cfn-redis-coordination/priority_wake.py +0 -134
- package/.claude/skills/cfn-redis-coordination/query-dlq.sh +0 -162
- package/.claude/skills/cfn-redis-coordination/query-logs.sh +0 -103
- package/.claude/skills/cfn-redis-coordination/redis-pattern.sh +0 -619
- package/.claude/skills/cfn-redis-coordination/retrieve-context.sh +0 -58
- package/.claude/skills/cfn-redis-coordination/select-specialist-agent.sh +0 -371
- package/.claude/skills/cfn-redis-coordination/semantic-match-tfidf.py +0 -252
- package/.claude/skills/cfn-redis-coordination/send-heartbeat.sh +0 -165
- package/.claude/skills/cfn-redis-coordination/signal.sh +0 -38
- package/.claude/skills/cfn-redis-coordination/store-context.sh +0 -86
- package/.claude/skills/cfn-redis-coordination/store-epic-context.sh +0 -123
- package/.claude/skills/cfn-redis-coordination/test-context-injection.sh +0 -354
- package/.claude/skills/cfn-redis-coordination/test-timeout-enforcement.sh +0 -513
- package/.claude/skills/cfn-redis-coordination/tests/convert-line-endings.sh +0 -15
- package/.claude/skills/cfn-redis-coordination/tests/dlq-functionality-test.sh +0 -102
- package/.claude/skills/cfn-redis-coordination/tests/edge-cases-test.sh +0 -99
- package/.claude/skills/cfn-redis-coordination/tests/integration-test.sh +0 -170
- package/.claude/skills/cfn-redis-coordination/tests/retry-mechanism-test.sh +0 -82
- package/.claude/skills/cfn-redis-coordination/tests/run-test-suite.sh +0 -92
- package/.claude/skills/cfn-redis-coordination/tests/run-tests.sh +0 -4
- package/.claude/skills/cfn-redis-coordination/tests/test-heartbeat-monitoring.sh +0 -418
- package/.claude/skills/cfn-redis-coordination/tests/test-heartbeat-simple.sh +0 -124
- package/.claude/skills/cfn-redis-coordination/tests/test-primitives.sh +0 -166
- package/.claude/skills/cfn-redis-coordination/tests/test-utils.sh +0 -54
- package/.claude/skills/cfn-redis-coordination/tests/test_utils.sh +0 -49
- package/.claude/skills/cfn-redis-coordination/v2_modularization/core_orchestration.sh +0 -76
- package/.claude/skills/cfn-redis-coordination/validate-parameters.sh +0 -492
- package/claude-assets/skills/cfn-redis-coordination/HEARTBEAT.md +0 -57
- package/claude-assets/skills/cfn-redis-coordination/HEARTBEAT_MONITORING.md +0 -267
- package/claude-assets/skills/cfn-redis-coordination/LOGGING.md +0 -260
- package/claude-assets/skills/cfn-redis-coordination/README.md +0 -65
- package/claude-assets/skills/cfn-redis-coordination/SECURITY_REVIEW.md +0 -25
- package/claude-assets/skills/cfn-redis-coordination/SHUTDOWN_HANDLING.md +0 -164
- package/claude-assets/skills/cfn-redis-coordination/SKILL.md +0 -720
- package/claude-assets/skills/cfn-redis-coordination/demos/test-dlq.sh +0 -129
- package/claude-assets/skills/cfn-redis-coordination/demos/test-iteration-feedback.sh +0 -320
- package/claude-assets/skills/cfn-redis-coordination/demos/test-orchestrator.sh +0 -249
- package/claude-assets/skills/cfn-redis-coordination/demos/test-priority-wake-phase4-unix.sh +0 -148
- package/claude-assets/skills/cfn-redis-coordination/demos/test-priority-wake-phase4.sh +0 -163
- package/claude-assets/skills/cfn-redis-coordination/demos/test-priority-wake.sh +0 -138
- package/claude-assets/skills/cfn-redis-coordination/demos/test-quick-fix.sh +0 -81
- package/claude-assets/skills/cfn-redis-coordination/demos/test-quorum-absolute.sh +0 -45
- package/claude-assets/skills/cfn-redis-coordination/demos/test-quorum-fallback.sh +0 -68
- package/claude-assets/skills/cfn-redis-coordination/demos/test-quorum-percentage.sh +0 -56
- package/claude-assets/skills/cfn-redis-coordination/demos/test-quorum-with-retry.sh +0 -81
- package/claude-assets/skills/cfn-redis-coordination/demos/test-quorum.sh +0 -57
- package/claude-assets/skills/cfn-redis-coordination/demos/test-shutdown-handling.sh +0 -187
- package/claude-assets/skills/cfn-redis-coordination/demos/test-shutdown.sh +0 -160
- package/claude-assets/skills/cfn-redis-coordination/demos/test-utils-unix.sh +0 -97
- package/claude-assets/skills/cfn-redis-coordination/demos/test-utils.sh +0 -97
- package/claude-assets/skills/cfn-redis-coordination/demos/test-waiting-mode.sh +0 -59
- package/claude-assets/skills/cfn-redis-coordination/examples/README.md +0 -73
- package/claude-assets/skills/cfn-redis-coordination/examples/grafana-dashboard.json +0 -352
- package/claude-assets/skills/cfn-redis-coordination/examples/hierarchical-pattern.sh +0 -127
- package/claude-assets/skills/cfn-redis-coordination/examples/mesh-pattern.sh +0 -171
- package/claude-assets/skills/cfn-redis-coordination/examples/timeout-handling.sh +0 -227
- package/claude-assets/skills/cfn-redis-coordination/examples/waiting-mode-pattern.sh +0 -239
- package/claude-assets/skills/cfn-redis-coordination/execute-product-owner-decision.sh +0 -258
- package/claude-assets/skills/cfn-redis-coordination/get-agent-timeout.sh +0 -177
- package/claude-assets/skills/cfn-redis-coordination/heartbeat-functions.sh +0 -137
- package/claude-assets/skills/cfn-redis-coordination/heartbeat-protocol.md +0 -106
- package/claude-assets/skills/cfn-redis-coordination/heartbeat.sh +0 -126
- package/claude-assets/skills/cfn-redis-coordination/init-swarm.sh +0 -148
- package/claude-assets/skills/cfn-redis-coordination/invoke-redis-pattern.sh +0 -220
- package/claude-assets/skills/cfn-redis-coordination/invoke-waiting-mode.sh +0 -283
- package/claude-assets/skills/cfn-redis-coordination/list-active-swarms.sh +0 -147
- package/claude-assets/skills/cfn-redis-coordination/log-event.sh +0 -109
- package/claude-assets/skills/cfn-redis-coordination/metrics-export.sh +0 -674
- package/claude-assets/skills/cfn-redis-coordination/metrics-schema.json +0 -66
- package/claude-assets/skills/cfn-redis-coordination/metrics-storage.md +0 -31
- package/claude-assets/skills/cfn-redis-coordination/monitor-cfn-violations.sh +0 -391
- package/claude-assets/skills/cfn-redis-coordination/monitor-heartbeats.sh +0 -101
- package/claude-assets/skills/cfn-redis-coordination/orchestrate-cfn-loop-v3.sh +0 -141
- package/claude-assets/skills/cfn-redis-coordination/orchestrate-cfn-loop.sh +0 -31
- package/claude-assets/skills/cfn-redis-coordination/orchestrate-cfn-loop.sh.bak +0 -0
- package/claude-assets/skills/cfn-redis-coordination/priority-wake-mechanism.md +0 -75
- package/claude-assets/skills/cfn-redis-coordination/priority_wake.py +0 -134
- package/claude-assets/skills/cfn-redis-coordination/query-dlq.sh +0 -162
- package/claude-assets/skills/cfn-redis-coordination/query-logs.sh +0 -103
- package/claude-assets/skills/cfn-redis-coordination/redis-pattern.sh +0 -619
- package/claude-assets/skills/cfn-redis-coordination/retrieve-context.sh +0 -58
- package/claude-assets/skills/cfn-redis-coordination/select-specialist-agent.sh +0 -371
- package/claude-assets/skills/cfn-redis-coordination/semantic-match-tfidf.py +0 -252
- package/claude-assets/skills/cfn-redis-coordination/send-heartbeat.sh +0 -165
- package/claude-assets/skills/cfn-redis-coordination/signal.sh +0 -38
- package/claude-assets/skills/cfn-redis-coordination/store-context.sh +0 -86
- package/claude-assets/skills/cfn-redis-coordination/store-epic-context.sh +0 -123
- package/claude-assets/skills/cfn-redis-coordination/test-context-injection.sh +0 -354
- package/claude-assets/skills/cfn-redis-coordination/test-timeout-enforcement.sh +0 -513
- package/claude-assets/skills/cfn-redis-coordination/tests/convert-line-endings.sh +0 -15
- package/claude-assets/skills/cfn-redis-coordination/tests/dlq-functionality-test.sh +0 -102
- package/claude-assets/skills/cfn-redis-coordination/tests/edge-cases-test.sh +0 -99
- package/claude-assets/skills/cfn-redis-coordination/tests/integration-test.sh +0 -170
- package/claude-assets/skills/cfn-redis-coordination/tests/retry-mechanism-test.sh +0 -82
- package/claude-assets/skills/cfn-redis-coordination/tests/run-test-suite.sh +0 -92
- package/claude-assets/skills/cfn-redis-coordination/tests/run-tests.sh +0 -4
- package/claude-assets/skills/cfn-redis-coordination/tests/test-heartbeat-monitoring.sh +0 -418
- package/claude-assets/skills/cfn-redis-coordination/tests/test-heartbeat-simple.sh +0 -124
- package/claude-assets/skills/cfn-redis-coordination/tests/test-primitives.sh +0 -166
- package/claude-assets/skills/cfn-redis-coordination/tests/test-utils.sh +0 -54
- package/claude-assets/skills/cfn-redis-coordination/tests/test_utils.sh +0 -49
- package/claude-assets/skills/cfn-redis-coordination/v2_modularization/core_orchestration.sh +0 -76
- 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
|