claude-flow-novice 2.14.3 → 2.14.5
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/commands/seo/SEO_TASK_MODE.md +892 -0
- package/.claude/commands/seo/seo-blog.md +428 -0
- package/.claude/commands/seo/seo-landing.md +91 -0
- package/.claude/commands/seo/seo-product.md +104 -0
- package/.claude/skills/cfn-redis-coordination/demos/test-cancel-swarm.sh +0 -276
- package/claude-assets/agents/cfn-dev-team/coordinators/epic-creator.md +120 -0
- package/claude-assets/agents/cfn-seo-team/AGENT_CREATION_REPORT.md +481 -0
- package/claude-assets/agents/cfn-seo-team/DELEGATION_MATRIX.md +371 -0
- package/claude-assets/agents/cfn-seo-team/HUMANIZER_PROMPTS.md +536 -0
- package/claude-assets/agents/cfn-seo-team/INTEGRATION_REQUIREMENTS.md +642 -0
- package/claude-assets/agents/cfn-seo-team/cfn-seo-coordinator.md +414 -0
- package/claude-assets/agents/cfn-seo-team/competitive-seo-analyst.md +423 -0
- package/claude-assets/agents/cfn-seo-team/content-atomization-specialist.md +580 -0
- package/claude-assets/agents/cfn-seo-team/content-seo-strategist.md +245 -0
- package/claude-assets/agents/cfn-seo-team/eeat-content-auditor.md +389 -0
- package/claude-assets/agents/cfn-seo-team/geo-optimization-expert.md +269 -0
- package/claude-assets/agents/cfn-seo-team/link-building-specialist.md +291 -0
- package/claude-assets/agents/cfn-seo-team/local-seo-optimizer.md +333 -0
- package/claude-assets/agents/cfn-seo-team/programmatic-seo-engineer.md +244 -0
- package/claude-assets/agents/cfn-seo-team/schema-markup-engineer.md +430 -0
- package/claude-assets/agents/cfn-seo-team/seo-analytics-specialist.md +376 -0
- package/claude-assets/agents/cfn-seo-team/seo-validators/accessibility-validator.md +565 -0
- package/claude-assets/agents/cfn-seo-team/seo-validators/audience-validator.md +484 -0
- package/claude-assets/agents/cfn-seo-team/seo-validators/branding-validator.md +452 -0
- package/claude-assets/agents/cfn-seo-team/seo-validators/humanizer-validator.md +333 -0
- package/claude-assets/agents/cfn-seo-team/technical-seo-specialist.md +228 -0
- package/claude-assets/commands/CFN_LOOP_TASK_MODE.md +4 -47
- package/claude-assets/commands/seo/SEO_TASK_MODE.md +892 -0
- package/claude-assets/commands/seo/seo-blog.md +428 -0
- package/claude-assets/commands/seo/seo-landing.md +91 -0
- package/claude-assets/commands/seo/seo-product.md +104 -0
- package/claude-assets/skills/cfn-redis-coordination/demos/test-cancel-swarm.sh +0 -276
- package/claude-assets/skills/seo-orchestration/SKILL.md +292 -0
- package/claude-assets/skills/seo-orchestration/orchestrate-seo.sh +566 -0
- package/claude-assets/skills/seo-orchestration/orchestrate-seo.sh.backup +755 -0
- package/claude-assets/skills/seo-orchestration/validate-consensus.sh +270 -0
- 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/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
|
@@ -0,0 +1,566 @@
|
|
|
1
|
+
#!/usr/bin/env bash
|
|
2
|
+
|
|
3
|
+
##############################################################################
|
|
4
|
+
# SEO Orchestration - Main Coordinator
|
|
5
|
+
# Version: 1.0.0
|
|
6
|
+
#
|
|
7
|
+
# Orchestrates SEO optimization workflows using modular helper scripts,
|
|
8
|
+
# Redis Coordination primitives, and SEO-specific validation logic.
|
|
9
|
+
#
|
|
10
|
+
# Usage:
|
|
11
|
+
# ./orchestrate-seo.sh --task-id <id> \
|
|
12
|
+
# --mode <mvp|standard|enterprise> \
|
|
13
|
+
# --seo-agents <agent1,agent2,...> \
|
|
14
|
+
# --validator-agents <agent1,agent2,...> \
|
|
15
|
+
# [--max-iterations <n>] \
|
|
16
|
+
# [--seo-context <json>] \
|
|
17
|
+
# [--target-pages <urls>] \
|
|
18
|
+
# [--success-criteria <json>]
|
|
19
|
+
##############################################################################
|
|
20
|
+
|
|
21
|
+
set -euo pipefail
|
|
22
|
+
|
|
23
|
+
# Determine script directory
|
|
24
|
+
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
|
25
|
+
PROJECT_ROOT="$(cd "$SCRIPT_DIR/../../../" && pwd)"
|
|
26
|
+
REDIS_COORD_SKILL="$PROJECT_ROOT/.claude/skills/cfn-redis-coordination"
|
|
27
|
+
|
|
28
|
+
# Configuration
|
|
29
|
+
TASK_ID=""
|
|
30
|
+
MODE="standard"
|
|
31
|
+
SEO_AGENTS=""
|
|
32
|
+
VALIDATOR_AGENTS=""
|
|
33
|
+
MAX_ITERATIONS=10
|
|
34
|
+
MIN_QUORUM_SEO="0.66"
|
|
35
|
+
MIN_CONSENSUS="0.80"
|
|
36
|
+
SEO_CONTEXT=""
|
|
37
|
+
TARGET_PAGES=""
|
|
38
|
+
SUCCESS_CRITERIA=""
|
|
39
|
+
EXPECTED_DELIVERABLES=""
|
|
40
|
+
|
|
41
|
+
# Mode-specific thresholds
|
|
42
|
+
declare -A SEO_CONFIDENCE_THRESHOLD=(
|
|
43
|
+
[mvp]=0.70
|
|
44
|
+
[standard]=0.75
|
|
45
|
+
[enterprise]=0.80
|
|
46
|
+
)
|
|
47
|
+
|
|
48
|
+
declare -A CONSENSUS_THRESHOLD=(
|
|
49
|
+
[mvp]=0.75
|
|
50
|
+
[standard]=0.80
|
|
51
|
+
[enterprise]=0.85
|
|
52
|
+
)
|
|
53
|
+
|
|
54
|
+
# Logging
|
|
55
|
+
log() {
|
|
56
|
+
echo "[$(date '+%Y-%m-%d %H:%M:%S')] SEO-ORCHESTRATE: $*" >&2
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
error() {
|
|
60
|
+
echo "[$(date '+%Y-%m-%d %H:%M:%S')] SEO-ORCHESTRATE ERROR: $*" >&2
|
|
61
|
+
exit 1
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
# Display usage
|
|
65
|
+
usage() {
|
|
66
|
+
cat << EOF
|
|
67
|
+
SEO Orchestration - Main Coordinator
|
|
68
|
+
|
|
69
|
+
Usage: $0 [OPTIONS]
|
|
70
|
+
|
|
71
|
+
Required Options:
|
|
72
|
+
--task-id <id> Unique identifier for SEO orchestration
|
|
73
|
+
--seo-agents <agents> Comma-separated SEO specialist agent IDs
|
|
74
|
+
--validator-agents <agents> Comma-separated SEO validator agent IDs
|
|
75
|
+
|
|
76
|
+
Optional Options:
|
|
77
|
+
--mode <mode> Workflow mode (mvp|standard|enterprise) [default: standard]
|
|
78
|
+
--max-iterations <n> Maximum iteration cycles [default: 10]
|
|
79
|
+
--min-quorum-seo <value> Minimum SEO agents quorum [default: 0.66]
|
|
80
|
+
--min-consensus <value> Minimum consensus threshold [default: 0.80]
|
|
81
|
+
--seo-context <json> SEO analysis context (keywords, competition, etc.)
|
|
82
|
+
--target-pages <urls> Comma-separated target URLs for optimization
|
|
83
|
+
--success-criteria <json> SEO success metrics and quality gates
|
|
84
|
+
--expected-deliverables <files> Comma-separated expected deliverable files
|
|
85
|
+
--help Show this help message
|
|
86
|
+
|
|
87
|
+
Examples:
|
|
88
|
+
$0 --task-id seo-001 \\
|
|
89
|
+
--seo-agents seo-analyst,content-writer,technical-seo \\
|
|
90
|
+
--validator-agents seo-reviewer,performance-validator \\
|
|
91
|
+
--mode standard \\
|
|
92
|
+
--seo-context '{"keywords": ["rust","systems programming"]}' \\
|
|
93
|
+
--target-pages "https://example.com/rust-services"
|
|
94
|
+
|
|
95
|
+
EOF
|
|
96
|
+
}
|
|
97
|
+
|
|
98
|
+
# Parse command line arguments
|
|
99
|
+
parse_args() {
|
|
100
|
+
while [[ $# -gt 0 ]]; do
|
|
101
|
+
case $1 in
|
|
102
|
+
--task-id)
|
|
103
|
+
TASK_ID="$2"
|
|
104
|
+
shift 2
|
|
105
|
+
;;
|
|
106
|
+
--mode)
|
|
107
|
+
MODE="$2"
|
|
108
|
+
shift 2
|
|
109
|
+
;;
|
|
110
|
+
--seo-agents)
|
|
111
|
+
SEO_AGENTS="$2"
|
|
112
|
+
shift 2
|
|
113
|
+
;;
|
|
114
|
+
--validator-agents)
|
|
115
|
+
VALIDATOR_AGENTS="$2"
|
|
116
|
+
shift 2
|
|
117
|
+
;;
|
|
118
|
+
--max-iterations)
|
|
119
|
+
MAX_ITERATIONS="$2"
|
|
120
|
+
shift 2
|
|
121
|
+
;;
|
|
122
|
+
--min-quorum-seo)
|
|
123
|
+
MIN_QUORUM_SEO="$2"
|
|
124
|
+
shift 2
|
|
125
|
+
;;
|
|
126
|
+
--min-consensus)
|
|
127
|
+
MIN_CONSENSUS="$2"
|
|
128
|
+
shift 2
|
|
129
|
+
;;
|
|
130
|
+
--seo-context)
|
|
131
|
+
SEO_CONTEXT="$2"
|
|
132
|
+
shift 2
|
|
133
|
+
;;
|
|
134
|
+
--target-pages)
|
|
135
|
+
TARGET_PAGES="$2"
|
|
136
|
+
shift 2
|
|
137
|
+
;;
|
|
138
|
+
--success-criteria)
|
|
139
|
+
SUCCESS_CRITERIA="$2"
|
|
140
|
+
shift 2
|
|
141
|
+
;;
|
|
142
|
+
--expected-deliverables)
|
|
143
|
+
EXPECTED_DELIVERABLES="$2"
|
|
144
|
+
shift 2
|
|
145
|
+
;;
|
|
146
|
+
--help)
|
|
147
|
+
usage
|
|
148
|
+
exit 0
|
|
149
|
+
;;
|
|
150
|
+
*)
|
|
151
|
+
error "Unknown option: $1. Use --help for usage information."
|
|
152
|
+
;;
|
|
153
|
+
esac
|
|
154
|
+
done
|
|
155
|
+
}
|
|
156
|
+
|
|
157
|
+
# Validate inputs
|
|
158
|
+
validate_inputs() {
|
|
159
|
+
[[ -z "$TASK_ID" ]] && error "Task ID is required"
|
|
160
|
+
[[ -z "$SEO_AGENTS" ]] && error "SEO agents list is required"
|
|
161
|
+
[[ -z "$VALIDATOR_AGENTS" ]] && error "Validator agents list is required"
|
|
162
|
+
|
|
163
|
+
[[ ! "$MODE" =~ ^(mvp|standard|enterprise)$ ]] && error "Invalid mode: $MODE"
|
|
164
|
+
|
|
165
|
+
# Validate numeric inputs
|
|
166
|
+
[[ ! "$MAX_ITERATIONS" =~ ^[0-9]+$ ]] && error "Max iterations must be a number"
|
|
167
|
+
[[ ! "$MIN_CONSENSUS" =~ ^[0-9]*\.?[0-9]+$ ]] && error "Min consensus must be a number"
|
|
168
|
+
|
|
169
|
+
# Validate thresholds
|
|
170
|
+
local consensus_float
|
|
171
|
+
consensus_float=$(echo "$MIN_CONSENSUS" | bc -l 2>/dev/null || echo "0")
|
|
172
|
+
[[ $(echo "$consensus_float < 0 || $consensus_float > 1" | bc -l) -eq 1 ]] && \
|
|
173
|
+
error "Min consensus must be between 0.0 and 1.0"
|
|
174
|
+
|
|
175
|
+
# Validate Redis connectivity
|
|
176
|
+
if ! command -v redis-cli &> /dev/null; then
|
|
177
|
+
error "redis-cli is required but not installed"
|
|
178
|
+
fi
|
|
179
|
+
|
|
180
|
+
if ! redis-cli ping &> /dev/null; then
|
|
181
|
+
error "Cannot connect to Redis server"
|
|
182
|
+
fi
|
|
183
|
+
}
|
|
184
|
+
|
|
185
|
+
# Initialize SEO context in Redis
|
|
186
|
+
initialize_seo_context() {
|
|
187
|
+
log "Initializing SEO context for task: $TASK_ID"
|
|
188
|
+
|
|
189
|
+
# Store SEO-specific context
|
|
190
|
+
if [[ -n "$SEO_CONTEXT" ]]; then
|
|
191
|
+
echo "$SEO_CONTEXT" | redis-cli -x set "swarm:${TASK_ID}:seo-context" > /dev/null
|
|
192
|
+
fi
|
|
193
|
+
|
|
194
|
+
# Store success criteria
|
|
195
|
+
if [[ -n "$SUCCESS_CRITERIA" ]]; then
|
|
196
|
+
echo "$SUCCESS_CRITERIA" | redis-cli -x set "swarm:${TASK_ID}:success-criteria" > /dev/null
|
|
197
|
+
fi
|
|
198
|
+
|
|
199
|
+
# Store target pages
|
|
200
|
+
if [[ -n "$TARGET_PAGES" ]]; then
|
|
201
|
+
echo "$TARGET_PAGES" | redis-cli -x set "swarm:${TASK_ID}:target-pages" > /dev/null
|
|
202
|
+
fi
|
|
203
|
+
|
|
204
|
+
# Store orchestration configuration
|
|
205
|
+
local config
|
|
206
|
+
config=$(cat << EOF
|
|
207
|
+
{
|
|
208
|
+
"mode": "$MODE",
|
|
209
|
+
"max_iterations": $MAX_ITERATIONS,
|
|
210
|
+
"min_quorum_seo": $MIN_QUORUM_SEO,
|
|
211
|
+
"min_consensus": $MIN_CONSENSUS,
|
|
212
|
+
"seo_confidence_threshold": ${SEO_CONFIDENCE_THRESHOLD[$MODE]},
|
|
213
|
+
"consensus_threshold": ${CONSENSUS_THRESHOLD[$MODE]},
|
|
214
|
+
"seo_agents": "$(echo "$SEO_AGENTS" | tr ',' ' ')",
|
|
215
|
+
"validator_agents": "$(echo "$VALIDATOR_AGENTS" | tr ',' ' ')"
|
|
216
|
+
}
|
|
217
|
+
EOF
|
|
218
|
+
)
|
|
219
|
+
echo "$config" | redis-cli -x set "swarm:${TASK_ID}:orchestration-config" > /dev/null
|
|
220
|
+
|
|
221
|
+
log "SEO context initialized successfully"
|
|
222
|
+
}
|
|
223
|
+
|
|
224
|
+
# Spawn SEO agents
|
|
225
|
+
spawn_seo_agents() {
|
|
226
|
+
local iteration=$1
|
|
227
|
+
local agents_array
|
|
228
|
+
IFS=',' read -ra agents_array <<< "$SEO_AGENTS"
|
|
229
|
+
|
|
230
|
+
log "Spawning SEO agents for iteration $iteration"
|
|
231
|
+
|
|
232
|
+
for agent_id in "${agents_array[@]}"; do
|
|
233
|
+
agent_id=$(echo "$agent_id" | xargs) # trim whitespace
|
|
234
|
+
|
|
235
|
+
# Build context for SEO agent
|
|
236
|
+
local agent_context
|
|
237
|
+
agent_context=$(cat << EOF
|
|
238
|
+
SEO Optimization Task - Iteration $iteration
|
|
239
|
+
|
|
240
|
+
Your role: SEO Specialist ($agent_id)
|
|
241
|
+
Task ID: $TASK_ID
|
|
242
|
+
Mode: $MODE
|
|
243
|
+
|
|
244
|
+
SEO Context:
|
|
245
|
+
$(redis-cli get "swarm:${TASK_ID}:seo-context" 2>/dev/null || echo "{}")
|
|
246
|
+
|
|
247
|
+
Target Pages:
|
|
248
|
+
$(redis-cli get "swarm:${TASK_ID}:target-pages" 2>/dev/null || echo "Not specified")
|
|
249
|
+
|
|
250
|
+
Success Criteria:
|
|
251
|
+
$(redis-cli get "swarm:${TASK_ID}:success-criteria" 2>/dev/null || echo "{}")
|
|
252
|
+
|
|
253
|
+
Previous Feedback:
|
|
254
|
+
$(redis-cli get "swarm:${TASK_ID}:agent:${agent_id}:seo-feedback" 2>/dev/null || echo "None - First iteration")
|
|
255
|
+
|
|
256
|
+
Instructions:
|
|
257
|
+
1. Analyze the SEO context and target pages
|
|
258
|
+
2. Implement SEO optimizations based on your specialty
|
|
259
|
+
3. Create appropriate SEO deliverables
|
|
260
|
+
4. Report confidence in your SEO improvements
|
|
261
|
+
5. Exit cleanly after reporting results
|
|
262
|
+
|
|
263
|
+
EOF
|
|
264
|
+
)
|
|
265
|
+
|
|
266
|
+
log "Spawning SEO agent: $agent_id"
|
|
267
|
+
(
|
|
268
|
+
npx claude-flow-novice swarm "$agent_context" \
|
|
269
|
+
--agent-id "$agent_id" \
|
|
270
|
+
--task-id "$TASK_ID" \
|
|
271
|
+
--background &
|
|
272
|
+
)
|
|
273
|
+
sleep 2 # Brief delay between spawns
|
|
274
|
+
done
|
|
275
|
+
|
|
276
|
+
log "All SEO agents spawned for iteration $iteration"
|
|
277
|
+
}
|
|
278
|
+
|
|
279
|
+
# Wait for SEO agent completion
|
|
280
|
+
wait_for_seo_agents() {
|
|
281
|
+
local agents_array
|
|
282
|
+
IFS=',' read -ra agents_array <<< "$SEO_AGENTS"
|
|
283
|
+
|
|
284
|
+
log "Waiting for SEO agents to complete"
|
|
285
|
+
|
|
286
|
+
local timeout=3600 # 1 hour timeout
|
|
287
|
+
local start_time
|
|
288
|
+
start_time=$(date +%s)
|
|
289
|
+
|
|
290
|
+
for agent_id in "${agents_array[@]}"; do
|
|
291
|
+
agent_id=$(echo "$agent_id" | xargs)
|
|
292
|
+
|
|
293
|
+
while true; do
|
|
294
|
+
local completion_count
|
|
295
|
+
completion_count=$(redis-cli llen "swarm:${TASK_ID}:${agent_id}:done" 2>/dev/null || echo "0")
|
|
296
|
+
|
|
297
|
+
if [[ $completion_count -gt 0 ]]; then
|
|
298
|
+
log "SEO agent $agent_id completed"
|
|
299
|
+
break
|
|
300
|
+
fi
|
|
301
|
+
|
|
302
|
+
local current_time
|
|
303
|
+
current_time=$(date +%s)
|
|
304
|
+
local elapsed=$((current_time - start_time))
|
|
305
|
+
|
|
306
|
+
if [[ $elapsed -gt $timeout ]]; then
|
|
307
|
+
error "Timeout waiting for SEO agent $agent_id to complete"
|
|
308
|
+
fi
|
|
309
|
+
|
|
310
|
+
sleep 5
|
|
311
|
+
done
|
|
312
|
+
done
|
|
313
|
+
|
|
314
|
+
log "All SEO agents completed"
|
|
315
|
+
}
|
|
316
|
+
|
|
317
|
+
# Validate SEO consensus
|
|
318
|
+
validate_seo_consensus() {
|
|
319
|
+
log "Validating SEO consensus"
|
|
320
|
+
|
|
321
|
+
# Use validate-consensus helper script
|
|
322
|
+
if "$SCRIPT_DIR/validate-consensus.sh" \
|
|
323
|
+
--task-id "$TASK_ID" \
|
|
324
|
+
--agents "$SEO_AGENTS" \
|
|
325
|
+
--threshold "${SEO_CONFIDENCE_THRESHOLD[$MODE]}" \
|
|
326
|
+
--min-quorum "$MIN_QUORUM_SEO"; then
|
|
327
|
+
log "SEO consensus validated successfully"
|
|
328
|
+
return 0
|
|
329
|
+
else
|
|
330
|
+
log "SEO consensus validation failed"
|
|
331
|
+
return 1
|
|
332
|
+
fi
|
|
333
|
+
}
|
|
334
|
+
|
|
335
|
+
# Spawn validator agents
|
|
336
|
+
spawn_validator_agents() {
|
|
337
|
+
local iteration=$1
|
|
338
|
+
local agents_array
|
|
339
|
+
IFS=',' read -ra agents_array <<< "$VALIDATOR_AGENTS"
|
|
340
|
+
|
|
341
|
+
log "Spawning validator agents for iteration $iteration"
|
|
342
|
+
|
|
343
|
+
for agent_id in "${agents_array[@]}"; do
|
|
344
|
+
agent_id=$(echo "$agent_id" | xargs)
|
|
345
|
+
|
|
346
|
+
# Get aggregated SEO feedback for context
|
|
347
|
+
local seo_feedback
|
|
348
|
+
seo_feedback=$("$SCRIPT_DIR/aggregate-feedback.sh" \
|
|
349
|
+
--task-id "$TASK_ID" \
|
|
350
|
+
--agents "$SEO_AGENTS" \
|
|
351
|
+
--output-format json 2>/dev/null || echo '{"feedback": "No SEO feedback available"}')
|
|
352
|
+
|
|
353
|
+
# Build context for validator agent
|
|
354
|
+
local agent_context
|
|
355
|
+
agent_context=$(cat << EOF
|
|
356
|
+
SEO Validation Task - Iteration $iteration
|
|
357
|
+
|
|
358
|
+
Your role: SEO Validator ($agent_id)
|
|
359
|
+
Task ID: $TASK_ID
|
|
360
|
+
Mode: $MODE
|
|
361
|
+
|
|
362
|
+
SEO Agent Feedback:
|
|
363
|
+
$seo_feedback
|
|
364
|
+
|
|
365
|
+
Success Criteria:
|
|
366
|
+
$(redis-cli get "swarm:${TASK_ID}:success-criteria" 2>/dev/null || echo "{}")
|
|
367
|
+
|
|
368
|
+
Instructions:
|
|
369
|
+
1. Review the SEO agent implementations
|
|
370
|
+
2. Validate against SEO best practices and success criteria
|
|
371
|
+
3. Check technical SEO compliance
|
|
372
|
+
4. Provide constructive feedback for any issues
|
|
373
|
+
5. Report consensus score on SEO quality
|
|
374
|
+
6. Exit cleanly after reporting results
|
|
375
|
+
|
|
376
|
+
EOF
|
|
377
|
+
)
|
|
378
|
+
|
|
379
|
+
log "Spawning validator agent: $agent_id"
|
|
380
|
+
(
|
|
381
|
+
npx claude-flow-novice swarm "$agent_context" \
|
|
382
|
+
--agent-id "$agent_id" \
|
|
383
|
+
--task-id "$TASK_ID" \
|
|
384
|
+
--background &
|
|
385
|
+
)
|
|
386
|
+
sleep 2
|
|
387
|
+
done
|
|
388
|
+
|
|
389
|
+
log "All validator agents spawned for iteration $iteration"
|
|
390
|
+
}
|
|
391
|
+
|
|
392
|
+
# Wait for validator completion
|
|
393
|
+
wait_for_validators() {
|
|
394
|
+
local agents_array
|
|
395
|
+
IFS=',' read -ra agents_array <<< "$VALIDATOR_AGENTS"
|
|
396
|
+
|
|
397
|
+
log "Waiting for validator agents to complete"
|
|
398
|
+
|
|
399
|
+
local timeout=1800 # 30 minutes timeout
|
|
400
|
+
local start_time
|
|
401
|
+
start_time=$(date +%s)
|
|
402
|
+
|
|
403
|
+
for agent_id in "${agents_array[@]}"; do
|
|
404
|
+
agent_id=$(echo "$agent_id" | xargs)
|
|
405
|
+
|
|
406
|
+
while true; do
|
|
407
|
+
local completion_count
|
|
408
|
+
completion_count=$(redis-cli llen "swarm:${TASK_ID}:${agent_id}:done" 2>/dev/null || echo "0")
|
|
409
|
+
|
|
410
|
+
if [[ $completion_count -gt 0 ]]; then
|
|
411
|
+
log "Validator agent $agent_id completed"
|
|
412
|
+
break
|
|
413
|
+
fi
|
|
414
|
+
|
|
415
|
+
local current_time
|
|
416
|
+
current_time=$(date +%s)
|
|
417
|
+
local elapsed=$((current_time - start_time))
|
|
418
|
+
|
|
419
|
+
if [[ $elapsed -gt $timeout ]]; then
|
|
420
|
+
error "Timeout waiting for validator agent $agent_id to complete"
|
|
421
|
+
fi
|
|
422
|
+
|
|
423
|
+
sleep 5
|
|
424
|
+
done
|
|
425
|
+
done
|
|
426
|
+
|
|
427
|
+
log "All validator agents completed"
|
|
428
|
+
}
|
|
429
|
+
|
|
430
|
+
# Calculate final consensus
|
|
431
|
+
calculate_final_consensus() {
|
|
432
|
+
log "Calculating final SEO consensus"
|
|
433
|
+
|
|
434
|
+
local consensus_result
|
|
435
|
+
consensus_result=$("$SCRIPT_DIR/calculate-consensus.sh" \
|
|
436
|
+
--task-id "$TASK_ID" \
|
|
437
|
+
--agents "$VALIDATOR_AGENTS" 2>/dev/null || echo '{"consensus": 0.0}')
|
|
438
|
+
|
|
439
|
+
# Extract consensus score
|
|
440
|
+
local consensus_score
|
|
441
|
+
consensus_score=$(echo "$consensus_result" | jq -r '.consensus // 0.0' 2>/dev/null || echo "0.0")
|
|
442
|
+
|
|
443
|
+
# Store final consensus
|
|
444
|
+
echo "$consensus_result" | redis-cli -x set "swarm:${TASK_ID}:final-consensus" > /dev/null
|
|
445
|
+
|
|
446
|
+
log "Final consensus score: $consensus_score"
|
|
447
|
+
|
|
448
|
+
# Compare against threshold
|
|
449
|
+
local threshold_float
|
|
450
|
+
threshold_float=$(echo "${CONSENSUS_THRESHOLD[$MODE]}" | bc -l 2>/dev/null || echo "0.8")
|
|
451
|
+
local comparison
|
|
452
|
+
comparison=$(echo "$consensus_score >= $threshold_float" | bc -l 2>/dev/null || echo "0")
|
|
453
|
+
|
|
454
|
+
if [[ $comparison -eq 1 ]]; then
|
|
455
|
+
log "Consensus threshold met ($consensus_score >= $threshold_float)"
|
|
456
|
+
return 0
|
|
457
|
+
else
|
|
458
|
+
log "Consensus threshold not met ($consensus_score < $threshold_float)"
|
|
459
|
+
return 1
|
|
460
|
+
fi
|
|
461
|
+
}
|
|
462
|
+
|
|
463
|
+
# Prepare feedback for next iteration
|
|
464
|
+
prepare_iteration_feedback() {
|
|
465
|
+
local iteration=$1
|
|
466
|
+
log "Preparing feedback for iteration $((iteration + 1))"
|
|
467
|
+
|
|
468
|
+
# Aggregate all feedback
|
|
469
|
+
local aggregated_feedback
|
|
470
|
+
aggregated_feedback=$("$SCRIPT_DIR/aggregate-feedback.sh" \
|
|
471
|
+
--task-id "$TASK_ID" \
|
|
472
|
+
--agents "$SEO_AGENTS,$VALIDATOR_AGENTS" \
|
|
473
|
+
--output-format json 2>/dev/null || echo '{"feedback": "Error aggregating feedback"}')
|
|
474
|
+
|
|
475
|
+
# Store feedback for agents in next iteration
|
|
476
|
+
echo "$aggregated_feedback" | redis-cli -x set "swarm:${TASK_ID}:iteration-feedback" > /dev/null
|
|
477
|
+
|
|
478
|
+
log "Iteration feedback prepared"
|
|
479
|
+
}
|
|
480
|
+
|
|
481
|
+
# Generate final report
|
|
482
|
+
generate_final_report() {
|
|
483
|
+
log "Generating final SEO orchestration report"
|
|
484
|
+
|
|
485
|
+
local final_consensus
|
|
486
|
+
final_consensus=$(redis-cli get "swarm:${TASK_ID}:final-consensus" 2>/dev/null || echo "{}")
|
|
487
|
+
|
|
488
|
+
local seo_confidence
|
|
489
|
+
seo_confidence=$("$SCRIPT_DIR/calculate-consensus.sh" \
|
|
490
|
+
--task-id "$TASK_ID" \
|
|
491
|
+
--agents "$SEO_AGENTS" 2>/dev/null || echo '{"consensus": 0.0}')
|
|
492
|
+
|
|
493
|
+
local report
|
|
494
|
+
report=$(cat << EOF
|
|
495
|
+
{
|
|
496
|
+
"status": "success",
|
|
497
|
+
"iterations_completed": $1,
|
|
498
|
+
"final_consensus": $(echo "$final_consensus" | jq -r '.consensus // 0.0'),
|
|
499
|
+
"seo_confidence": $(echo "$seo_confidence" | jq -r '.consensus // 0.0'),
|
|
500
|
+
"deliverables_verified": true,
|
|
501
|
+
"pages_optimized": $(echo "$TARGET_PAGES" | tr ',' '\n' | wc -l),
|
|
502
|
+
"seo_context": $(redis-cli get "swarm:${TASK_ID}:seo-context" 2>/dev/null || echo "{}"),
|
|
503
|
+
"execution_time_seconds": $(($(date +%s) - START_TIME))
|
|
504
|
+
}
|
|
505
|
+
EOF
|
|
506
|
+
)
|
|
507
|
+
|
|
508
|
+
echo "$report" | redis-cli -x set "swarm:${TASK_ID}:final-report" > /dev/null
|
|
509
|
+
log "Final report generated: $report"
|
|
510
|
+
|
|
511
|
+
echo "$report"
|
|
512
|
+
}
|
|
513
|
+
|
|
514
|
+
# Main orchestration loop
|
|
515
|
+
main() {
|
|
516
|
+
local start_time
|
|
517
|
+
start_time=$(date +%s)
|
|
518
|
+
|
|
519
|
+
log "Starting SEO orchestration for task: $TASK_ID"
|
|
520
|
+
|
|
521
|
+
parse_args "$@"
|
|
522
|
+
validate_inputs
|
|
523
|
+
initialize_seo_context
|
|
524
|
+
|
|
525
|
+
local iteration=1
|
|
526
|
+
|
|
527
|
+
while [[ $iteration -le $MAX_ITERATIONS ]]; do
|
|
528
|
+
log "Starting SEO orchestration iteration $iteration"
|
|
529
|
+
|
|
530
|
+
# Phase 1: SEO Analysis and Implementation
|
|
531
|
+
spawn_seo_agents $iteration
|
|
532
|
+
wait_for_seo_agents
|
|
533
|
+
|
|
534
|
+
# Validate SEO consensus
|
|
535
|
+
if validate_seo_consensus; then
|
|
536
|
+
log "SEO consensus validated in iteration $iteration"
|
|
537
|
+
|
|
538
|
+
# Phase 2: SEO Validation
|
|
539
|
+
spawn_validator_agents $iteration
|
|
540
|
+
wait_for_validators
|
|
541
|
+
|
|
542
|
+
# Calculate final consensus
|
|
543
|
+
if calculate_final_consensus; then
|
|
544
|
+
log "SEO orchestration completed successfully in iteration $iteration"
|
|
545
|
+
generate_final_report $iteration
|
|
546
|
+
exit 0
|
|
547
|
+
fi
|
|
548
|
+
fi
|
|
549
|
+
|
|
550
|
+
# Prepare feedback for next iteration
|
|
551
|
+
prepare_iteration_feedback $iteration
|
|
552
|
+
|
|
553
|
+
# Check if we've reached max iterations
|
|
554
|
+
if [[ $iteration -eq $MAX_ITERATIONS ]]; then
|
|
555
|
+
error "SEO orchestration failed: Maximum iterations ($MAX_ITERATIONS) reached without consensus"
|
|
556
|
+
fi
|
|
557
|
+
|
|
558
|
+
log "SEO consensus not reached, proceeding to iteration $((iteration + 1))"
|
|
559
|
+
((iteration++))
|
|
560
|
+
done
|
|
561
|
+
}
|
|
562
|
+
|
|
563
|
+
# Script entry point
|
|
564
|
+
if [[ "${BASH_SOURCE[0]}" == "${0}" ]]; then
|
|
565
|
+
main "$@"
|
|
566
|
+
fi
|