claude-flow-novice 2.5.2 → 2.6.0

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 (46) hide show
  1. package/.claude/agents/CLAUDE.md +740 -978
  2. package/.claude/agents/core-agents/cost-savings-cfn-loop-coordinator.md +47 -2
  3. package/.claude/agents/custom/agent-builder.md +637 -0
  4. package/.claude/api-configs/config-current-zai-config.env +62 -0
  5. package/.claude/api-configs/config-test-zai-config.env +62 -0
  6. package/.claude/api-configs/env-backups/before-anthropic-20251020-025404.env +62 -0
  7. package/.claude/api-configs/env-backups/before-restore-20251020-025431.env +62 -0
  8. package/.claude/artifacts/reflection-merge-logs/cli-agent-spawning-v2.5.2-merge-report.md +61 -0
  9. package/.claude/commands/cfn-loop-epic.md +41 -17
  10. package/.claude/commands/cfn-loop.md +43 -30
  11. package/.claude/commands/custom-routing-activate.md +37 -123
  12. package/.claude/commands/custom-routing-deactivate.md +27 -124
  13. package/.claude/commands/switch-api.md +41 -16
  14. package/.claude/skills/agent-execution/execute-agent.sh +126 -0
  15. package/.claude/skills/redis-coordination/AGENT_LOGGING.md +280 -0
  16. package/.claude/skills/redis-coordination/agent-log.sh +124 -0
  17. package/.claude/skills/redis-coordination/init-swarm.sh +6 -1
  18. package/.claude/skills/redis-coordination/invoke-waiting-mode.sh +62 -5
  19. package/.claude/skills/redis-coordination/orchestrate-cfn-loop.sh +68 -8
  20. package/.claude/skills/redis-coordination/orchestrate-cfn-loop.sh.backup-1760949407 +933 -0
  21. package/.claude/skills/redis-coordination/store-epic-context.sh +123 -0
  22. package/.claude/skills/redis-coordination/test-iteration-feedback.sh +320 -0
  23. package/.claude/skills/skill-builder/SKILL.md +910 -0
  24. package/CLAUDE.md +76 -2
  25. package/dist/cli/agent-command.js +151 -0
  26. package/dist/cli/agent-command.js.map +1 -0
  27. package/dist/cli/agent-definition-parser.js +176 -0
  28. package/dist/cli/agent-definition-parser.js.map +1 -0
  29. package/dist/cli/agent-executor.js +176 -0
  30. package/dist/cli/agent-executor.js.map +1 -0
  31. package/dist/cli/agent-prompt-builder.js +188 -0
  32. package/dist/cli/agent-prompt-builder.js.map +1 -0
  33. package/dist/cli/agent-spawn.js +46 -1
  34. package/dist/cli/agent-spawn.js.map +1 -1
  35. package/dist/cli/anthropic-client.js +242 -0
  36. package/dist/cli/anthropic-client.js.map +1 -0
  37. package/dist/cli/cli-agent-context.js +353 -0
  38. package/dist/cli/cli-agent-context.js.map +1 -0
  39. package/dist/cli/cli-agent-context.test.js +451 -0
  40. package/dist/cli/cli-agent-context.test.js.map +1 -0
  41. package/dist/cli/index.js +115 -2
  42. package/dist/cli/index.js.map +1 -1
  43. package/dist/cli/iteration-history.js +188 -0
  44. package/dist/cli/iteration-history.js.map +1 -0
  45. package/package.json +3 -1
  46. package/scripts/switch-api.sh +233 -0
@@ -0,0 +1,123 @@
1
+ #!/usr/bin/env bash
2
+
3
+ ##############################################################################
4
+ # Store Epic Context in Redis
5
+ # Stores epic-level context for CLI-spawned agents to access
6
+ #
7
+ # Usage:
8
+ # ./store-epic-context.sh --task-id <id> \
9
+ # --epic-context <json> \
10
+ # [--phase-context <json>] \
11
+ # [--success-criteria <json>] \
12
+ # [--ttl <seconds>]
13
+ #
14
+ # Example:
15
+ # ./store-epic-context.sh --task-id "epic-auth-123" \
16
+ # --epic-context '{
17
+ # "epicGoal": "Build authentication system",
18
+ # "inScope": ["JWT auth", "RBAC", "Session management"],
19
+ # "outOfScope": ["OAuth", "MFA", "Biometrics"],
20
+ # "phases": ["assessment", "implementation", "validation"]
21
+ # }' \
22
+ # --phase-context '{
23
+ # "currentPhase": "assessment",
24
+ # "dependencies": [],
25
+ # "deliverables": ["Requirements doc", "Architecture design"]
26
+ # }' \
27
+ # --success-criteria '{
28
+ # "acceptanceCriteria": [
29
+ # "Core functionality implemented",
30
+ # "Tests pass >80% coverage",
31
+ # "Security review complete"
32
+ # ],
33
+ # "gateThreshold": 0.75,
34
+ # "consensusThreshold": 0.90
35
+ # }' \
36
+ # --ttl 86400
37
+ #
38
+ # Redis Keys Created:
39
+ # - swarm:<task-id>:epic-context
40
+ # - swarm:<task-id>:phase-context
41
+ # - swarm:<task-id>:success-criteria
42
+ #
43
+ # These keys are automatically read by cfn-spawn and injected as environment
44
+ # variables into spawned agents:
45
+ # - EPIC_CONTEXT
46
+ # - PHASE_CONTEXT
47
+ # - SUCCESS_CRITERIA
48
+ ##############################################################################
49
+
50
+ set -euo pipefail
51
+
52
+ # Configuration
53
+ TASK_ID=""
54
+ EPIC_CONTEXT=""
55
+ PHASE_CONTEXT=""
56
+ SUCCESS_CRITERIA=""
57
+ TTL=86400 # 24 hours default
58
+
59
+ # Parse arguments
60
+ while [[ $# -gt 0 ]]; do
61
+ case $1 in
62
+ --task-id)
63
+ TASK_ID="$2"
64
+ shift 2
65
+ ;;
66
+ --epic-context)
67
+ EPIC_CONTEXT="$2"
68
+ shift 2
69
+ ;;
70
+ --phase-context)
71
+ PHASE_CONTEXT="$2"
72
+ shift 2
73
+ ;;
74
+ --success-criteria)
75
+ SUCCESS_CRITERIA="$2"
76
+ shift 2
77
+ ;;
78
+ --ttl)
79
+ TTL="$2"
80
+ shift 2
81
+ ;;
82
+ *)
83
+ echo "Unknown option: $1"
84
+ exit 1
85
+ ;;
86
+ esac
87
+ done
88
+
89
+ # Validation
90
+ if [ -z "$TASK_ID" ]; then
91
+ echo "Error: --task-id is required"
92
+ exit 1
93
+ fi
94
+
95
+ if [ -z "$EPIC_CONTEXT" ]; then
96
+ echo "Error: --epic-context is required"
97
+ exit 1
98
+ fi
99
+
100
+ # Store epic context
101
+ echo "Storing epic context for task: $TASK_ID"
102
+
103
+ if [ -n "$EPIC_CONTEXT" ]; then
104
+ redis-cli set "swarm:${TASK_ID}:epic-context" "$EPIC_CONTEXT" EX "$TTL" > /dev/null
105
+ echo " ✓ Epic context stored (TTL: ${TTL}s)"
106
+ fi
107
+
108
+ if [ -n "$PHASE_CONTEXT" ]; then
109
+ redis-cli set "swarm:${TASK_ID}:phase-context" "$PHASE_CONTEXT" EX "$TTL" > /dev/null
110
+ echo " ✓ Phase context stored (TTL: ${TTL}s)"
111
+ fi
112
+
113
+ if [ -n "$SUCCESS_CRITERIA" ]; then
114
+ redis-cli set "swarm:${TASK_ID}:success-criteria" "$SUCCESS_CRITERIA" EX "$TTL" > /dev/null
115
+ echo " ✓ Success criteria stored (TTL: ${TTL}s)"
116
+ fi
117
+
118
+ echo "✅ Context storage complete"
119
+ echo ""
120
+ echo "CLI-spawned agents will automatically receive this context via environment variables:"
121
+ echo " - EPIC_CONTEXT"
122
+ echo " - PHASE_CONTEXT"
123
+ echo " - SUCCESS_CRITERIA"
@@ -0,0 +1,320 @@
1
+ #!/bin/bash
2
+ #
3
+ # Test Script: Iteration Feedback Mechanism
4
+ #
5
+ # Validates that:
6
+ # 1. Validators can report feedback with confidence scores
7
+ # 2. Orchestrator collects and aggregates feedback
8
+ # 3. Feedback is passed to Loop 3 agents via wake signal
9
+ # 4. Feedback is stored in Redis with TTL
10
+ # 5. Agents can read feedback for iteration N
11
+
12
+ set -euo pipefail
13
+
14
+ SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
15
+ TASK_ID="test-feedback-$(date +%s)"
16
+
17
+ echo "=========================================="
18
+ echo "Iteration Feedback Mechanism Test"
19
+ echo "=========================================="
20
+ echo "Task ID: $TASK_ID"
21
+ echo ""
22
+
23
+ # Cleanup function
24
+ cleanup() {
25
+ echo ""
26
+ echo "Cleaning up Redis keys..."
27
+ redis-cli --scan --pattern "swarm:${TASK_ID}:*" | xargs -r redis-cli del >/dev/null 2>&1 || true
28
+ echo "✅ Cleanup complete"
29
+ }
30
+
31
+ # Register cleanup on exit
32
+ trap cleanup EXIT
33
+
34
+ # Test 1: Validators report confidence with feedback
35
+ echo "=== Test 1: Validators Report Feedback ==="
36
+ echo ""
37
+
38
+ VALIDATOR_1="reviewer-1"
39
+ VALIDATOR_2="tester-1"
40
+ VALIDATOR_3="security-1"
41
+
42
+ # Validator 1: Low confidence with specific feedback
43
+ echo "[$VALIDATOR_1] Reporting confidence 0.65 with 2 feedback items..."
44
+ $SCRIPT_DIR/invoke-waiting-mode.sh report \
45
+ --task-id "$TASK_ID" \
46
+ --agent-id "$VALIDATOR_1" \
47
+ --confidence 0.65 \
48
+ --iteration 1 \
49
+ --feedback "Add error handling for null inputs,Improve documentation for API endpoints"
50
+
51
+ echo ""
52
+
53
+ # Validator 2: Medium confidence with 3 feedback items
54
+ echo "[$VALIDATOR_2] Reporting confidence 0.72 with 3 feedback items..."
55
+ $SCRIPT_DIR/invoke-waiting-mode.sh report \
56
+ --task-id "$TASK_ID" \
57
+ --agent-id "$VALIDATOR_2" \
58
+ --confidence 0.72 \
59
+ --iteration 1 \
60
+ --feedback "Increase test coverage to 80%,Add edge case tests for empty arrays,Fix flaky timeout test"
61
+
62
+ echo ""
63
+
64
+ # Validator 3: Low confidence with security feedback
65
+ echo "[$VALIDATOR_3] Reporting confidence 0.60 with 2 feedback items..."
66
+ $SCRIPT_DIR/invoke-waiting-mode.sh report \
67
+ --task-id "$TASK_ID" \
68
+ --agent-id "$VALIDATOR_3" \
69
+ --confidence 0.60 \
70
+ --iteration 1 \
71
+ --feedback "Fix SQL injection vulnerability in query builder,Add rate limiting to API endpoints"
72
+
73
+ echo ""
74
+
75
+ # Test 2: Collect feedback from validators
76
+ echo "=== Test 2: Orchestrator Collects Feedback ==="
77
+ echo ""
78
+
79
+ COLLECT_OUTPUT=$($SCRIPT_DIR/invoke-waiting-mode.sh collect \
80
+ --task-id "$TASK_ID" \
81
+ --agent-ids "$VALIDATOR_1,$VALIDATOR_2,$VALIDATOR_3")
82
+
83
+ echo "$COLLECT_OUTPUT"
84
+ echo ""
85
+
86
+ # Extract consensus and feedback
87
+ CONSENSUS=$(echo "$COLLECT_OUTPUT" | tail -1)
88
+ echo "Calculated Consensus: $CONSENSUS"
89
+
90
+ # Verify feedback aggregation
91
+ if echo "$COLLECT_OUTPUT" | grep -q "Aggregated Feedback"; then
92
+ echo "✅ Feedback aggregated successfully"
93
+ FEEDBACK_COUNT=$(echo "$COLLECT_OUTPUT" | grep -c '^\s*-' || echo "0")
94
+ echo " Total feedback items: $FEEDBACK_COUNT"
95
+ else
96
+ echo "❌ No aggregated feedback found"
97
+ exit 1
98
+ fi
99
+
100
+ echo ""
101
+
102
+ # Test 3: Wake Loop 3 agent with validator feedback
103
+ echo "=== Test 3: Wake Loop 3 Agent with Feedback ==="
104
+ echo ""
105
+
106
+ LOOP3_AGENT="backend-dev"
107
+
108
+ # Extract aggregated feedback for passing to Loop 3
109
+ LOOP2_FEEDBACK=$(echo "$COLLECT_OUTPUT" | sed -n '/Aggregated Feedback/,/Consensus:/p' | grep '^\s*-' | sed 's/^\s*-\s*//' | paste -sd ',' -)
110
+
111
+ # Build full feedback message
112
+ FULL_FEEDBACK="Improve consensus from $CONSENSUS to >=0.90,$LOOP2_FEEDBACK"
113
+
114
+ echo "Waking $LOOP3_AGENT with comprehensive feedback..."
115
+ echo "Feedback items: $(echo "$FULL_FEEDBACK" | tr ',' '\n' | wc -l)"
116
+ echo ""
117
+
118
+ $SCRIPT_DIR/invoke-waiting-mode.sh wake \
119
+ --task-id "$TASK_ID" \
120
+ --agent-id "$LOOP3_AGENT" \
121
+ --reason "cfn_loop_iteration" \
122
+ --iteration 2 \
123
+ --priority 30 \
124
+ --feedback "$FULL_FEEDBACK"
125
+
126
+ echo ""
127
+
128
+ # Test 4: Verify feedback stored in Redis
129
+ echo "=== Test 4: Verify Feedback Storage ==="
130
+ echo ""
131
+
132
+ FEEDBACK_KEY="swarm:${TASK_ID}:${LOOP3_AGENT}:feedback:iteration-2"
133
+ echo "Checking Redis key: $FEEDBACK_KEY"
134
+
135
+ STORED_FEEDBACK=$(redis-cli get "$FEEDBACK_KEY")
136
+
137
+ if [ -n "$STORED_FEEDBACK" ] && [ "$STORED_FEEDBACK" != "(nil)" ]; then
138
+ echo "✅ Feedback stored successfully"
139
+ echo ""
140
+ echo "Stored feedback (JSON array):"
141
+ echo "$STORED_FEEDBACK" | jq '.'
142
+ echo ""
143
+
144
+ # Verify TTL
145
+ TTL=$(redis-cli ttl "$FEEDBACK_KEY")
146
+ echo "TTL: $TTL seconds ($(echo "scale=1; $TTL / 3600" | bc) hours)"
147
+
148
+ if [ "$TTL" -gt 0 ] && [ "$TTL" -le 86400 ]; then
149
+ echo "✅ TTL is correct (≤24 hours)"
150
+ else
151
+ echo "❌ TTL is incorrect: $TTL"
152
+ exit 1
153
+ fi
154
+ else
155
+ echo "❌ Feedback not found in Redis"
156
+ exit 1
157
+ fi
158
+
159
+ echo ""
160
+
161
+ # Test 5: Agent reads feedback
162
+ echo "=== Test 5: Agent Reads Feedback ==="
163
+ echo ""
164
+
165
+ echo "Simulating agent reading feedback from Redis..."
166
+ AGENT_FEEDBACK=$(redis-cli get "$FEEDBACK_KEY")
167
+
168
+ if [ -n "$AGENT_FEEDBACK" ] && [ "$AGENT_FEEDBACK" != "(nil)" ]; then
169
+ echo "✅ Agent successfully read feedback"
170
+ echo ""
171
+ echo "Feedback items available to agent:"
172
+ echo "$AGENT_FEEDBACK" | jq -r '.[]' | nl -w2 -s'. '
173
+ echo ""
174
+
175
+ ITEM_COUNT=$(echo "$AGENT_FEEDBACK" | jq '. | length')
176
+ echo "Total actionable items: $ITEM_COUNT"
177
+ else
178
+ echo "❌ Agent failed to read feedback"
179
+ exit 1
180
+ fi
181
+
182
+ echo ""
183
+
184
+ # Test 6: Wake queue contains feedback
185
+ echo "=== Test 6: Verify Wake Queue Feedback ==="
186
+ echo ""
187
+
188
+ WAKE_QUEUE="swarm:${TASK_ID}:${LOOP3_AGENT}:wake-queue"
189
+ echo "Checking wake queue: $WAKE_QUEUE"
190
+
191
+ # Pop wake message from queue
192
+ WAKE_MSG=$(redis-cli ZPOPMIN "$WAKE_QUEUE" 1 | sed -n '1p')
193
+
194
+ if [ -n "$WAKE_MSG" ] && [ "$WAKE_MSG" != "(nil)" ]; then
195
+ echo "✅ Wake message found in queue"
196
+ echo ""
197
+ echo "Wake message contents:"
198
+ echo "$WAKE_MSG" | jq '.'
199
+ echo ""
200
+
201
+ # Verify feedback in wake message
202
+ WAKE_FEEDBACK=$(echo "$WAKE_MSG" | jq -r '.feedback[]' 2>/dev/null | head -3)
203
+ if [ -n "$WAKE_FEEDBACK" ]; then
204
+ echo "✅ Feedback included in wake message"
205
+ echo ""
206
+ echo "First 3 feedback items:"
207
+ echo "$WAKE_MSG" | jq -r '.feedback[]' | head -3 | nl -w2 -s'. '
208
+ else
209
+ echo "❌ No feedback in wake message"
210
+ exit 1
211
+ fi
212
+ else
213
+ echo "❌ No wake message in queue"
214
+ exit 1
215
+ fi
216
+
217
+ echo ""
218
+
219
+ # Test 7: Multiple iterations
220
+ echo "=== Test 7: Multiple Iteration Feedback ==="
221
+ echo ""
222
+
223
+ echo "Simulating iteration 3 feedback..."
224
+ ITERATION_3_FEEDBACK="Address remaining issues from iteration 2,Add integration tests,Update changelog"
225
+
226
+ $SCRIPT_DIR/invoke-waiting-mode.sh wake \
227
+ --task-id "$TASK_ID" \
228
+ --agent-id "$LOOP3_AGENT" \
229
+ --reason "cfn_loop_iteration" \
230
+ --iteration 3 \
231
+ --priority 30 \
232
+ --feedback "$ITERATION_3_FEEDBACK"
233
+
234
+ echo ""
235
+
236
+ # Verify both iteration feedbacks are stored separately
237
+ FEEDBACK_KEY_2="swarm:${TASK_ID}:${LOOP3_AGENT}:feedback:iteration-2"
238
+ FEEDBACK_KEY_3="swarm:${TASK_ID}:${LOOP3_AGENT}:feedback:iteration-3"
239
+
240
+ FEEDBACK_2=$(redis-cli get "$FEEDBACK_KEY_2")
241
+ FEEDBACK_3=$(redis-cli get "$FEEDBACK_KEY_3")
242
+
243
+ if [ -n "$FEEDBACK_2" ] && [ "$FEEDBACK_2" != "(nil)" ]; then
244
+ echo "✅ Iteration 2 feedback persists"
245
+ echo " Items: $(echo "$FEEDBACK_2" | jq '. | length')"
246
+ fi
247
+
248
+ if [ -n "$FEEDBACK_3" ] && [ "$FEEDBACK_3" != "(nil)" ]; then
249
+ echo "✅ Iteration 3 feedback stored"
250
+ echo " Items: $(echo "$FEEDBACK_3" | jq '. | length')"
251
+ fi
252
+
253
+ echo ""
254
+
255
+ # Test 8: Edge cases
256
+ echo "=== Test 8: Edge Cases ==="
257
+ echo ""
258
+
259
+ # Empty feedback
260
+ echo "Testing wake with empty feedback..."
261
+ $SCRIPT_DIR/invoke-waiting-mode.sh wake \
262
+ --task-id "$TASK_ID" \
263
+ --agent-id "test-agent" \
264
+ --reason "test" \
265
+ --iteration 1 \
266
+ --priority 50 \
267
+ --feedback ""
268
+
269
+ EMPTY_FEEDBACK_KEY="swarm:${TASK_ID}:test-agent:feedback:iteration-1"
270
+ EMPTY_RESULT=$(redis-cli get "$EMPTY_FEEDBACK_KEY")
271
+
272
+ if [ -z "$EMPTY_RESULT" ] || [ "$EMPTY_RESULT" = "(nil)" ]; then
273
+ echo "✅ Empty feedback not stored (expected)"
274
+ else
275
+ echo "⚠️ Empty feedback stored: $EMPTY_RESULT"
276
+ fi
277
+
278
+ echo ""
279
+
280
+ # Iteration 0 (no feedback storage)
281
+ echo "Testing wake with iteration 0..."
282
+ $SCRIPT_DIR/invoke-waiting-mode.sh wake \
283
+ --task-id "$TASK_ID" \
284
+ --agent-id "test-agent-2" \
285
+ --reason "initial" \
286
+ --iteration 0 \
287
+ --priority 50 \
288
+ --feedback "This should not be stored"
289
+
290
+ ITER_0_KEY="swarm:${TASK_ID}:test-agent-2:feedback:iteration-0"
291
+ ITER_0_RESULT=$(redis-cli get "$ITER_0_KEY")
292
+
293
+ if [ -z "$ITER_0_RESULT" ] || [ "$ITER_0_RESULT" = "(nil)" ]; then
294
+ echo "✅ Iteration 0 feedback not stored (expected)"
295
+ else
296
+ echo "❌ Iteration 0 feedback should not be stored: '$ITER_0_RESULT'"
297
+ exit 1
298
+ fi
299
+
300
+ echo ""
301
+
302
+ # Summary
303
+ echo "=========================================="
304
+ echo "Test Summary"
305
+ echo "=========================================="
306
+ echo "✅ All tests passed!"
307
+ echo ""
308
+ echo "Validated:"
309
+ echo " 1. Validators can report feedback with confidence"
310
+ echo " 2. Orchestrator collects and aggregates feedback"
311
+ echo " 3. Feedback passed to Loop 3 agents via wake signal"
312
+ echo " 4. Feedback stored in Redis with 24-hour TTL"
313
+ echo " 5. Agents can read feedback for iteration N"
314
+ echo " 6. Wake queue contains feedback in message"
315
+ echo " 7. Multiple iterations maintain separate feedback"
316
+ echo " 8. Edge cases handled correctly"
317
+ echo ""
318
+ echo "Task ID: $TASK_ID"
319
+ echo "Feedback mechanism is fully operational!"
320
+ echo ""