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,56 +0,0 @@
1
- #!/bin/bash
2
- # Quorum Percentage Test Case
3
- # Tests percentage-based quorum scenarios
4
-
5
- source "$(dirname "$0")/test-utils.sh"
6
-
7
- # Test Scenario 1: 80% of 10 agents = 8 required, 8/10 complete → SUCCESS
8
- test_percentage_quorum_success() {
9
- local total_agents=10
10
- local quorum_percentage=0.8
11
- local completed_agents=8
12
-
13
- local result=$(check_percentage_quorum "$total_agents" "$quorum_percentage" "$completed_agents")
14
- assert_equals "$result" "SUCCESS" "Quorum not reached when 8/10 agents complete (80% required)"
15
- }
16
-
17
- # Test Scenario 2: 80% of 10 agents = 8 required, 7/10 complete → FAILURE
18
- test_percentage_quorum_failure() {
19
- local total_agents=10
20
- local quorum_percentage=0.8
21
- local completed_agents=7
22
-
23
- local result=$(check_percentage_quorum "$total_agents" "$quorum_percentage" "$completed_agents")
24
- assert_equals "$result" "FAILURE" "Quorum incorrectly reached when only 7/10 agents complete (80% required)"
25
- }
26
-
27
- # Test Scenario 3: 90% of 5 agents = 4.5 → 5 required (round up)
28
- test_percentage_quorum_round_up() {
29
- local total_agents=5
30
- local quorum_percentage=0.9
31
- local completed_agents=5
32
-
33
- local result=$(check_percentage_quorum "$total_agents" "$quorum_percentage" "$completed_agents")
34
- assert_equals "$result" "SUCCESS" "Quorum not reached when all 5/5 agents complete (90% required)"
35
- }
36
-
37
- # Test Scenario 4: 90% of 5 agents = 4.5 → 5 required, 4/5 complete → FAILURE
38
- test_percentage_quorum_insufficient() {
39
- local total_agents=5
40
- local quorum_percentage=0.9
41
- local completed_agents=4
42
-
43
- local result=$(check_percentage_quorum "$total_agents" "$quorum_percentage" "$completed_agents")
44
- assert_equals "$result" "FAILURE" "Quorum incorrectly reached when 4/5 agents complete (90% required)"
45
- }
46
-
47
- # Run the tests
48
- main() {
49
- test_percentage_quorum_success
50
- test_percentage_quorum_failure
51
- test_percentage_quorum_round_up
52
- test_percentage_quorum_insufficient
53
- echo "Percentage Quorum Test Complete"
54
- }
55
-
56
- main
@@ -1,81 +0,0 @@
1
- #!/bin/bash
2
- # Quorum Retry Mechanism Test Case
3
- # Tests retry scenarios for agent completion
4
-
5
- source "$(dirname "$0")/test-utils.sh"
6
-
7
- # Simulated Redis-based retry mechanism
8
- simulate_agent_retry() {
9
- local task_id="$1"
10
- local agent_id="$2"
11
- local max_retries="${3:-3}"
12
- local retry_delay="${4:-5}"
13
-
14
- local attempt=1
15
- local success=false
16
-
17
- while [ $attempt -le "$max_retries" ]; do
18
- # Simulate agent work
19
- if agent_work "$task_id" "$agent_id"; then
20
- success=true
21
- break
22
- fi
23
-
24
- echo "Agent $agent_id - Attempt $attempt failed. Retrying in $retry_delay seconds..."
25
- sleep "$retry_delay"
26
- ((attempt++))
27
- done
28
-
29
- if [ "$success" = true ]; then
30
- echo "SUCCESS"
31
- else
32
- echo "FAILURE"
33
- fi
34
- }
35
-
36
- # Mock agent work function with potential failure
37
- agent_work() {
38
- local task_id="$1"
39
- local agent_id="$2"
40
-
41
- # Simulated 50% chance of failure on first attempt
42
- if [ "$agent_id" == "agent-1" ] && [ -z "$RETRY_COMPLETE" ]; then
43
- RETRY_COMPLETE=1
44
- return 1
45
- fi
46
-
47
- return 0
48
- }
49
-
50
- # Test Scenario: Agent times out on attempt 1, retry succeeds on attempt 2
51
- test_quorum_retry_mechanism() {
52
- local task_id="retry-test-task"
53
- local agent_id="agent-1"
54
-
55
- local result=$(simulate_agent_retry "$task_id" "$agent_id")
56
- assert_equals "$result" "SUCCESS" "Retry mechanism failed to complete agent work"
57
- }
58
-
59
- # Additional retry tests
60
- test_multiple_agent_retries() {
61
- local total_agents=5
62
- local successful_agents=0
63
-
64
- for ((i=1; i<=total_agents; i++)); do
65
- local result=$(simulate_agent_retry "multi-retry-task" "agent-$i")
66
- if [ "$result" == "SUCCESS" ]; then
67
- ((successful_agents++))
68
- fi
69
- done
70
-
71
- assert_greater_than "$successful_agents" 3 "Insufficient agents completed with retry"
72
- }
73
-
74
- # Run the tests
75
- main() {
76
- test_quorum_retry_mechanism
77
- test_multiple_agent_retries
78
- echo "Retry Mechanism Test Complete"
79
- }
80
-
81
- main
@@ -1,57 +0,0 @@
1
- #!/bin/bash
2
- # Master Quorum Validation Test Suite
3
- # Task ID: redis-phase2-1760875940
4
- # Agent ID: tester-2
5
-
6
- set -euo pipefail
7
-
8
- # Source common testing utilities
9
- source "$(dirname "$0")/test-utils.sh"
10
-
11
- # Test Results Tracking
12
- TOTAL_TESTS=4
13
- PASSED_TESTS=0
14
- FAILED_TESTS=0
15
-
16
- # Run Quorum Test Cases
17
- run_test "test-quorum-absolute.sh"
18
- run_test "test-quorum-percentage.sh"
19
- run_test "test-quorum-with-retry.sh"
20
- run_test "test-quorum-fallback.sh"
21
-
22
- # Generate Test Report
23
- generate_test_report
24
-
25
- # Signal Completion to Redis
26
- signal_task_complete() {
27
- local confidence=$(calculate_confidence)
28
- redis-cli lpush "swarm:redis-phase2-1760875940:tester-2:done" "complete"
29
-
30
- # Report to waiting mode
31
- ./.claude/skills/cfn-redis-coordination/invoke-waiting-mode.sh report \
32
- --task-id redis-phase2-1760875940 \
33
- --agent-id tester-2 \
34
- --confidence "$confidence" \
35
- --iteration 1
36
-
37
- # Enter waiting mode
38
- ./.claude/skills/cfn-redis-coordination/invoke-waiting-mode.sh enter \
39
- --task-id redis-phase2-1760875940 \
40
- --agent-id tester-2 \
41
- --context "task-2-3-complete"
42
- }
43
-
44
- # Run main test suite
45
- main() {
46
- # Setup any required test environments
47
- setup_test_environment
48
-
49
- # Execute test cases
50
- run_all_tests
51
-
52
- # Signal completion
53
- signal_task_complete
54
- }
55
-
56
- # Execute main function
57
- main
@@ -1,187 +0,0 @@
1
- #!/usr/bin/env bash
2
-
3
- ##############################################################################
4
- # Test: Shutdown Handling in Orchestrator
5
- # Verifies that orchestrator responds to shutdown signals and cleans up
6
- ##############################################################################
7
-
8
- set -euo pipefail
9
-
10
- SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
11
- TEST_TASK_ID="test-shutdown-$(date +%s)"
12
- CLEANUP_NEEDED=1
13
-
14
- # Cleanup function
15
- cleanup() {
16
- if [ $CLEANUP_NEEDED -eq 1 ]; then
17
- echo ""
18
- echo "=== Cleanup ==="
19
- redis-cli DEL "swarm:${TEST_TASK_ID}:shutdown" >/dev/null 2>&1 || true
20
- redis-cli DEL "swarm:${TEST_TASK_ID}:*" >/dev/null 2>&1 || true
21
- echo "Cleanup complete"
22
- fi
23
- }
24
-
25
- trap cleanup EXIT
26
-
27
- echo "=== Test: Shutdown Handling in Orchestrator ==="
28
- echo "Test Task ID: $TEST_TASK_ID"
29
- echo ""
30
-
31
- # Test 1: Start orchestrator in background
32
- echo "Test 1: Starting orchestrator in background..."
33
-
34
- # Create mock agents (we'll send shutdown before they complete)
35
- MOCK_LOOP3="mock-agent-1,mock-agent-2"
36
- MOCK_LOOP2="mock-validator-1"
37
- MOCK_PO="mock-po"
38
-
39
- # Start orchestrator in background with high timeout (so it doesn't fail quickly)
40
- timeout 30 "$SCRIPT_DIR/orchestrate-cfn-loop.sh" \
41
- --task-id "$TEST_TASK_ID" \
42
- --mode standard \
43
- --loop3-agents "$MOCK_LOOP3" \
44
- --loop2-agents "$MOCK_LOOP2" \
45
- --product-owner "$MOCK_PO" \
46
- --timeout 3600 \
47
- --max-iterations 5 > /tmp/orchestrator-output-${TEST_TASK_ID}.log 2>&1 &
48
-
49
- ORCHESTRATOR_PID=$!
50
- echo "Orchestrator started (PID: $ORCHESTRATOR_PID)"
51
-
52
- # Wait for orchestrator to initialize and start shutdown monitor
53
- sleep 2
54
-
55
- # Verify orchestrator is running
56
- if ! kill -0 $ORCHESTRATOR_PID 2>/dev/null; then
57
- echo "❌ FAIL: Orchestrator process died prematurely"
58
- cat /tmp/orchestrator-output-${TEST_TASK_ID}.log
59
- exit 1
60
- fi
61
-
62
- echo "✅ PASS: Orchestrator is running"
63
- echo ""
64
-
65
- # Test 2: Send shutdown signal via Redis
66
- echo "Test 2: Sending shutdown signal via Redis..."
67
-
68
- SHUTDOWN_PAYLOAD=$(jq -n --arg reason "test_shutdown" '{reason: $reason}')
69
- echo "$SHUTDOWN_PAYLOAD" | redis-cli -x LPUSH "swarm:${TEST_TASK_ID}:shutdown" >/dev/null
70
-
71
- echo "Shutdown signal sent: $SHUTDOWN_PAYLOAD"
72
- echo "Waiting for orchestrator to shutdown..."
73
-
74
- # Wait up to 5 seconds for graceful shutdown
75
- for i in {1..10}; do
76
- if ! kill -0 $ORCHESTRATOR_PID 2>/dev/null; then
77
- echo "✅ PASS: Orchestrator shutdown gracefully"
78
- break
79
- fi
80
- sleep 0.5
81
- done
82
-
83
- # Verify orchestrator has stopped
84
- if kill -0 $ORCHESTRATOR_PID 2>/dev/null; then
85
- echo "❌ FAIL: Orchestrator did not shutdown within 5 seconds"
86
- kill -9 $ORCHESTRATOR_PID 2>/dev/null || true
87
- exit 1
88
- fi
89
-
90
- echo ""
91
-
92
- # Test 3: Verify cleanup happened
93
- echo "Test 3: Verifying cleanup..."
94
-
95
- # Check orchestrator output for shutdown messages
96
- if grep -q "Orchestrator shutting down gracefully" /tmp/orchestrator-output-${TEST_TASK_ID}.log; then
97
- echo "✅ PASS: Found shutdown message in output"
98
- else
99
- echo "❌ FAIL: Shutdown message not found in output"
100
- echo "Output:"
101
- cat /tmp/orchestrator-output-${TEST_TASK_ID}.log
102
- exit 1
103
- fi
104
-
105
- if grep -q "Shutdown complete" /tmp/orchestrator-output-${TEST_TASK_ID}.log; then
106
- echo "✅ PASS: Found completion message in output"
107
- else
108
- echo "⚠️ WARNING: Completion message not found (non-critical)"
109
- fi
110
-
111
- # Check if swarm was marked as cancelled (may not be present if init-swarm never ran)
112
- if grep -q "Marking swarm as cancelled" /tmp/orchestrator-output-${TEST_TASK_ID}.log || grep -q "Failed to mark swarm as cancelled" /tmp/orchestrator-output-${TEST_TASK_ID}.log; then
113
- echo "✅ PASS: Attempted to mark swarm as cancelled"
114
- else
115
- echo "⚠️ INFO: Swarm cancellation not attempted (may not have initialized yet)"
116
- fi
117
-
118
- echo ""
119
-
120
- # Test 4: Send SIGTERM signal
121
- echo "Test 4: Testing SIGTERM signal handling..."
122
-
123
- # Start another orchestrator instance
124
- timeout 30 "$SCRIPT_DIR/orchestrate-cfn-loop.sh" \
125
- --task-id "${TEST_TASK_ID}-sigterm" \
126
- --mode standard \
127
- --loop3-agents "$MOCK_LOOP3" \
128
- --loop2-agents "$MOCK_LOOP2" \
129
- --product-owner "$MOCK_PO" \
130
- --timeout 3600 \
131
- --max-iterations 5 > /tmp/orchestrator-output-${TEST_TASK_ID}-sigterm.log 2>&1 &
132
-
133
- ORCHESTRATOR_PID_2=$!
134
- echo "Second orchestrator started (PID: $ORCHESTRATOR_PID_2)"
135
-
136
- # Wait for initialization
137
- sleep 2
138
-
139
- # Send SIGTERM
140
- echo "Sending SIGTERM to orchestrator..."
141
- kill -TERM $ORCHESTRATOR_PID_2 2>/dev/null || true
142
-
143
- # Wait for shutdown
144
- for i in {1..10}; do
145
- if ! kill -0 $ORCHESTRATOR_PID_2 2>/dev/null; then
146
- echo "✅ PASS: Orchestrator responded to SIGTERM"
147
- break
148
- fi
149
- sleep 0.5
150
- done
151
-
152
- # Verify shutdown
153
- if kill -0 $ORCHESTRATOR_PID_2 2>/dev/null; then
154
- echo "❌ FAIL: Orchestrator did not respond to SIGTERM within 5 seconds"
155
- kill -9 $ORCHESTRATOR_PID_2 2>/dev/null || true
156
- exit 1
157
- fi
158
-
159
- # Check for SIGTERM handling in output
160
- if grep -q "SIGTERM_received" /tmp/orchestrator-output-${TEST_TASK_ID}-sigterm.log; then
161
- echo "✅ PASS: SIGTERM signal was properly caught and handled"
162
- else
163
- echo "⚠️ WARNING: SIGTERM handling message not clear in output"
164
- fi
165
-
166
- echo ""
167
- echo "=== All Tests Passed ==="
168
- echo ""
169
- echo "Orchestrator output (Test 1 - Redis shutdown):"
170
- echo "----------------------------------------------"
171
- cat /tmp/orchestrator-output-${TEST_TASK_ID}.log
172
- echo ""
173
- echo "Orchestrator output (Test 2 - SIGTERM):"
174
- echo "----------------------------------------"
175
- cat /tmp/orchestrator-output-${TEST_TASK_ID}-sigterm.log
176
-
177
- # Cleanup test files
178
- rm -f /tmp/orchestrator-output-${TEST_TASK_ID}.log
179
- rm -f /tmp/orchestrator-output-${TEST_TASK_ID}-sigterm.log
180
- redis-cli DEL "swarm:${TEST_TASK_ID}-sigterm:shutdown" >/dev/null 2>&1 || true
181
- redis-cli DEL "swarm:${TEST_TASK_ID}-sigterm:*" >/dev/null 2>&1 || true
182
-
183
- CLEANUP_NEEDED=0 # Prevent duplicate cleanup
184
-
185
- echo ""
186
- echo "✅ All shutdown handling tests passed successfully"
187
- exit 0
@@ -1,160 +0,0 @@
1
- #!/bin/bash
2
- #
3
- # Test shutdown handling for waiting agents
4
- #
5
-
6
- set -euo pipefail
7
-
8
- SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
9
- WAITING_MODE_SCRIPT="$SCRIPT_DIR/invoke-waiting-mode.sh"
10
-
11
- TASK_ID="test-shutdown-$(date +%s)"
12
- AGENT_ID="test-agent-1"
13
-
14
- echo "=========================================="
15
- echo "Testing Shutdown Handling"
16
- echo "=========================================="
17
- echo ""
18
- echo "Task ID: $TASK_ID"
19
- echo "Agent ID: $AGENT_ID"
20
- echo ""
21
-
22
- # Clean up Redis keys before test
23
- echo "Cleaning up Redis keys..."
24
- redis-cli DEL "swarm:${TASK_ID}:${AGENT_ID}:ready" >/dev/null 2>&1 || true
25
- redis-cli DEL "swarm:${TASK_ID}:${AGENT_ID}:wake-queue" >/dev/null 2>&1 || true
26
- redis-cli DEL "swarm:${TASK_ID}:shutdown" >/dev/null 2>&1 || true
27
-
28
- echo ""
29
- echo "Test 1: Agent enters waiting mode in background"
30
- echo "------------------------------------------------"
31
-
32
- # Start agent in background
33
- {
34
- $WAITING_MODE_SCRIPT enter \
35
- --task-id "$TASK_ID" \
36
- --agent-id "$AGENT_ID" \
37
- --context "test-shutdown"
38
-
39
- EXIT_CODE=$?
40
- echo "Agent exited with code: $EXIT_CODE"
41
-
42
- if [ $EXIT_CODE -eq 130 ]; then
43
- echo "✅ Agent gracefully shutdown with SIGINT code (130)"
44
- else
45
- echo "❌ Expected exit code 130, got $EXIT_CODE"
46
- exit 1
47
- fi
48
- } &
49
-
50
- AGENT_PID=$!
51
- echo "Agent started (PID: $AGENT_PID)"
52
-
53
- # Wait for agent to enter waiting mode
54
- sleep 2
55
-
56
- # Check if agent published ready status
57
- READY_STATUS=$(redis-cli LPOP "swarm:${TASK_ID}:${AGENT_ID}:ready")
58
- if [ -n "$READY_STATUS" ] && [ "$READY_STATUS" != "(nil)" ]; then
59
- echo "✅ Agent published ready status:"
60
- echo "$READY_STATUS" | jq '.'
61
- else
62
- echo "❌ Agent did not publish ready status"
63
- kill $AGENT_PID 2>/dev/null || true
64
- exit 1
65
- fi
66
-
67
- echo ""
68
- echo "Test 2: Send shutdown signal"
69
- echo "-----------------------------"
70
-
71
- $WAITING_MODE_SCRIPT shutdown \
72
- --task-id "$TASK_ID" \
73
- --reason "test_shutdown"
74
-
75
- echo ""
76
- echo "Test 3: Verify agent receives shutdown and exits"
77
- echo "------------------------------------------------"
78
-
79
- # Wait for agent to process shutdown (max 2 seconds for poll cycle)
80
- sleep 3
81
-
82
- # Check if agent process is still running
83
- if ps -p $AGENT_PID >/dev/null 2>&1; then
84
- echo "❌ Agent still running after shutdown signal"
85
- kill $AGENT_PID 2>/dev/null || true
86
- exit 1
87
- else
88
- echo "✅ Agent terminated after shutdown signal"
89
- fi
90
-
91
- # Wait for background process to finish and capture exit code
92
- wait $AGENT_PID 2>/dev/null || true
93
-
94
- echo ""
95
- echo "Test 4: Verify shutdown with wake signal priority"
96
- echo "-------------------------------------------------"
97
-
98
- # Clean up
99
- redis-cli DEL "swarm:${TASK_ID}:${AGENT_ID}:ready" >/dev/null 2>&1 || true
100
- redis-cli DEL "swarm:${TASK_ID}:${AGENT_ID}:wake-queue" >/dev/null 2>&1 || true
101
- redis-cli DEL "swarm:${TASK_ID}:shutdown" >/dev/null 2>&1 || true
102
-
103
- # Start agent in background
104
- {
105
- $WAITING_MODE_SCRIPT enter \
106
- --task-id "$TASK_ID" \
107
- --agent-id "$AGENT_ID" \
108
- --context "test-priority"
109
-
110
- EXIT_CODE=$?
111
- if [ $EXIT_CODE -eq 130 ]; then
112
- echo "✅ Agent prioritized shutdown over wake signal"
113
- else
114
- echo "⚠️ Agent exited with code $EXIT_CODE (may have received wake signal first)"
115
- fi
116
- } &
117
-
118
- AGENT_PID=$!
119
-
120
- # Wait for agent to enter waiting mode
121
- sleep 2
122
-
123
- # Send both wake and shutdown signals (shutdown should take priority)
124
- $WAITING_MODE_SCRIPT wake \
125
- --task-id "$TASK_ID" \
126
- --agent-id "$AGENT_ID" \
127
- --reason "test_wake" \
128
- --priority 50 &
129
-
130
- $WAITING_MODE_SCRIPT shutdown \
131
- --task-id "$TASK_ID" \
132
- --reason "test_shutdown_priority" &
133
-
134
- # Wait for signals to be sent
135
- sleep 1
136
-
137
- # Wait for agent to process
138
- sleep 3
139
-
140
- # Check if agent terminated
141
- if ps -p $AGENT_PID >/dev/null 2>&1; then
142
- echo "⚠️ Agent still running (may have processed wake signal)"
143
- kill $AGENT_PID 2>/dev/null || true
144
- else
145
- echo "✅ Agent terminated (shutdown had priority)"
146
- fi
147
-
148
- wait $AGENT_PID 2>/dev/null || true
149
-
150
- echo ""
151
- echo "=========================================="
152
- echo "✅ All shutdown handling tests passed!"
153
- echo "=========================================="
154
-
155
- # Cleanup
156
- redis-cli DEL "swarm:${TASK_ID}:${AGENT_ID}:ready" >/dev/null 2>&1 || true
157
- redis-cli DEL "swarm:${TASK_ID}:${AGENT_ID}:wake-queue" >/dev/null 2>&1 || true
158
- redis-cli DEL "swarm:${TASK_ID}:shutdown" >/dev/null 2>&1 || true
159
-
160
- exit 0
@@ -1,97 +0,0 @@
1
- #!/bin/bash
2
- # Utility functions for quorum testing
3
-
4
- # Check absolute quorum
5
- check_quorum() {
6
- local total_agents="$1"
7
- local quorum="$2"
8
- local completed_agents="$3"
9
-
10
- if [ "$completed_agents" -ge "$quorum" ]; then
11
- echo "SUCCESS"
12
- else
13
- echo "FAILURE"
14
- fi
15
- }
16
-
17
- # Check percentage-based quorum
18
- check_percentage_quorum() {
19
- local total_agents="$1"
20
- local quorum_percentage="$2"
21
- local completed_agents="$3"
22
-
23
- # Calculate the minimum number of agents required (round up)
24
- local required_agents=$(echo "scale=0; ceil($total_agents * $quorum_percentage)" | bc)
25
-
26
- if [ "$completed_agents" -ge "$required_agents" ]; then
27
- echo "SUCCESS"
28
- else
29
- echo "FAILURE"
30
- fi
31
- }
32
-
33
- # Graceful degradation strategy
34
- simulate_graceful_degradation() {
35
- local total_agents="$1"
36
- local initial_quorum="$2"
37
- local max_failures="$3"
38
-
39
- # Dynamically adjust quorum based on failures
40
- local current_quorum="$initial_quorum"
41
- local adjusted_agents=$((total_agents - max_failures))
42
- local adjusted_quorum_threshold=$(echo "scale=2; $current_quorum * 0.8" | bc)
43
-
44
- if (( $(echo "$adjusted_quorum_threshold <= 0.65" | bc -l) )); then
45
- echo "HALT" # Prevent degradation below minimum viable quorum
46
- else
47
- echo "$(check_percentage_quorum "$adjusted_agents" "$adjusted_quorum_threshold" "$adjusted_agents")"
48
- fi
49
- }
50
-
51
- # Assertion functions
52
- assert_equals() {
53
- local actual="$1"
54
- local expected="$2"
55
- local message="${3:-Assertion failed}"
56
-
57
- if [ "$actual" != "$expected" ]; then
58
- echo "FAIL: $message (Expected: $expected, Got: $actual)"
59
- exit 1
60
- fi
61
- }
62
-
63
- assert_greater_than() {
64
- local actual="$1"
65
- local expected="$2"
66
- local message="${3:-Assertion failed}"
67
-
68
- if [ "$actual" -le "$expected" ]; then
69
- echo "FAIL: $message (Expected > $expected, Got: $actual)"
70
- exit 1
71
- fi
72
- }
73
-
74
- assert_not_empty() {
75
- local value="$1"
76
- local message="${2:-Value is empty}"
77
-
78
- if [ -z "$value" ]; then
79
- echo "FAIL: $message"
80
- exit 1
81
- fi
82
- }
83
-
84
- # Error handling and logging
85
- log_error() {
86
- local message="$1"
87
- echo "[ERROR] $message" >&2
88
- }
89
-
90
- # Cleanup function
91
- cleanup() {
92
- # Remove any temporary files or reset test environments
93
- echo "Cleaning up test environment..."
94
- }
95
-
96
- # Trap to ensure cleanup happens even if script fails
97
- trap cleanup EXIT