claude-flow-novice 2.14.28 → 2.14.30
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/cfn-agents-ignore/cfn-seo-team/AGENT_CREATION_REPORT.md +4 -14
- package/.claude/cfn-agents-ignore/cfn-seo-team/AGENT_CREATION_REPORT.md.backup +481 -0
- package/.claude/cfn-agents-ignore/cfn-seo-team/DELEGATION_MATRIX.md +3 -4
- package/.claude/cfn-agents-ignore/cfn-seo-team/DELEGATION_MATRIX.md.backup +371 -0
- package/.claude/cfn-agents-ignore/cfn-seo-team/INTEGRATION_REQUIREMENTS.md +20 -26
- package/.claude/cfn-agents-ignore/cfn-seo-team/INTEGRATION_REQUIREMENTS.md.backup +637 -0
- package/.claude/cfn-agents-ignore/cfn-seo-team/cfn-seo-coordinator.md +295 -50
- package/.claude/cfn-agents-ignore/cfn-seo-team/cfn-seo-coordinator.md.backup +398 -0
- package/.claude/cfn-agents-ignore/cfn-seo-team/competitive-seo-analyst.md +27 -25
- package/.claude/cfn-agents-ignore/cfn-seo-team/competitive-seo-analyst.md.backup +401 -0
- package/.claude/cfn-agents-ignore/cfn-seo-team/content-atomization-specialist.md +5 -106
- package/.claude/cfn-agents-ignore/cfn-seo-team/content-atomization-specialist.md.backup +552 -0
- package/.claude/cfn-agents-ignore/cfn-seo-team/content-seo-strategist.md +5 -25
- package/.claude/cfn-agents-ignore/cfn-seo-team/content-seo-strategist.md.backup +223 -0
- package/.claude/cfn-agents-ignore/cfn-seo-team/eeat-content-auditor.md +5 -27
- package/.claude/cfn-agents-ignore/cfn-seo-team/eeat-content-auditor.md.backup +367 -0
- package/.claude/cfn-agents-ignore/cfn-seo-team/geo-optimization-expert.md +5 -27
- package/.claude/cfn-agents-ignore/cfn-seo-team/geo-optimization-expert.md.backup +247 -0
- package/.claude/cfn-agents-ignore/cfn-seo-team/link-building-specialist.md +5 -27
- package/.claude/cfn-agents-ignore/cfn-seo-team/link-building-specialist.md.backup +269 -0
- package/.claude/cfn-agents-ignore/cfn-seo-team/local-seo-optimizer.md +5 -25
- package/.claude/cfn-agents-ignore/cfn-seo-team/local-seo-optimizer.md.backup +311 -0
- package/.claude/cfn-agents-ignore/cfn-seo-team/programmatic-seo-engineer.md +6 -26
- package/.claude/cfn-agents-ignore/cfn-seo-team/programmatic-seo-engineer.md.backup +222 -0
- package/.claude/cfn-agents-ignore/cfn-seo-team/schema-markup-engineer.md +5 -25
- package/.claude/cfn-agents-ignore/cfn-seo-team/schema-markup-engineer.md.backup +408 -0
- package/.claude/cfn-agents-ignore/cfn-seo-team/seo-analytics-specialist.md +6 -26
- package/.claude/cfn-agents-ignore/cfn-seo-team/seo-analytics-specialist.md.backup +354 -0
- package/.claude/cfn-agents-ignore/cfn-seo-team/seo-validators/accessibility-validator.md +4 -4
- package/.claude/cfn-agents-ignore/cfn-seo-team/seo-validators/accessibility-validator.md.backup +561 -0
- package/.claude/cfn-agents-ignore/cfn-seo-team/seo-validators/audience-validator.md +2 -2
- package/.claude/cfn-agents-ignore/cfn-seo-team/seo-validators/audience-validator.md.backup +480 -0
- package/.claude/cfn-agents-ignore/cfn-seo-team/seo-validators/branding-validator.md +1 -1
- package/.claude/cfn-agents-ignore/cfn-seo-team/seo-validators/branding-validator.md.backup +448 -0
- package/.claude/cfn-agents-ignore/cfn-seo-team/seo-validators/humanizer-validator.md +2 -2
- package/.claude/cfn-agents-ignore/cfn-seo-team/seo-validators/humanizer-validator.md.backup +329 -0
- package/.claude/cfn-agents-ignore/cfn-seo-team/technical-seo-specialist.md +361 -199
- package/.claude/cfn-agents-ignore/cfn-seo-team/technical-seo-specialist.md.backup +208 -0
- package/.claude/commands/CFN_LOOP_TASK_MODE.md +100 -11
- package/.claude/commands/cfn-mode.md +2 -2
- package/.claude/skills/cfn-agent-spawning/spawn-agent.sh +12 -0
- package/.claude/skills/cfn-agent-spawning/spawn-agent.sh.backup +273 -0
- package/.claude/skills/cfn-hybrid-routing/README.md +1 -1
- package/.claude/skills/cfn-loop-orchestration/orchestrate.sh +95 -15
- package/.claude/skills/cfn-loop-orchestration/orchestrate.sh.backup +76 -11
- package/.claude/skills/cfn-loop-orchestration/orchestrate.sh.backup2 +959 -0
- package/.claude/skills/cfn-loop-orchestration/orchestrate.sh.clean +949 -0
- package/.claude/skills/cfn-product-owner-decision/execute-decision.sh +82 -10
- package/claude-assets/agents/cfn-dev-team/CLAUDE.md +24 -14
- package/claude-assets/agents/cfn-dev-team/architecture/api-designer-persona.md +0 -7
- package/claude-assets/agents/cfn-dev-team/architecture/base-template-generator.md +12 -38
- package/claude-assets/agents/cfn-dev-team/architecture/goal-planner.md +0 -10
- package/claude-assets/agents/cfn-dev-team/architecture/planner.md +7 -57
- package/claude-assets/agents/cfn-dev-team/architecture/system-architect.md +8 -45
- package/claude-assets/agents/cfn-dev-team/coordinators/cfn-frontend-coordinator.md +365 -25
- package/claude-assets/agents/cfn-dev-team/coordinators/cfn-v3-coordinator.md +504 -448
- package/claude-assets/agents/cfn-dev-team/coordinators/consensus-builder.md +428 -167
- package/claude-assets/agents/cfn-dev-team/coordinators/multi-sprint-coordinator.md +472 -20
- package/claude-assets/agents/cfn-dev-team/dev-ops/devops-engineer.md +5 -5
- package/claude-assets/agents/cfn-dev-team/dev-ops/docker-specialist.md +5 -7
- package/claude-assets/agents/cfn-dev-team/dev-ops/kubernetes-specialist.md +0 -6
- package/claude-assets/agents/cfn-dev-team/dev-ops/monitoring-specialist.md +3 -3
- package/claude-assets/agents/cfn-dev-team/developers/api-gateway-specialist.md +13 -14
- package/claude-assets/agents/cfn-dev-team/developers/data/data-engineer.md +0 -6
- package/claude-assets/agents/cfn-dev-team/developers/database/database-architect.md +2 -2
- package/claude-assets/agents/cfn-dev-team/developers/frontend/mobile-dev.md +10 -56
- package/claude-assets/agents/cfn-dev-team/developers/frontend/typescript-specialist.md +7 -26
- package/claude-assets/agents/cfn-dev-team/developers/rust-developer.md +8 -48
- package/claude-assets/agents/cfn-dev-team/documentation/api-documentation.md +1 -1
- package/claude-assets/agents/cfn-dev-team/documentation/pseudocode.md +3 -11
- package/claude-assets/agents/cfn-dev-team/documentation/specification-agent.md +6 -16
- package/claude-assets/agents/cfn-dev-team/product-owners/cto-agent.md +7 -19
- package/claude-assets/agents/cfn-dev-team/product-owners/power-user-persona.md +9 -49
- package/claude-assets/agents/cfn-dev-team/product-owners/product-owner.md +291 -86
- package/claude-assets/agents/cfn-dev-team/reviewers/quality/code-quality-validator.md +9 -81
- package/claude-assets/agents/cfn-dev-team/reviewers/quality/cyclomatic-complexity-reducer.md +4 -64
- package/claude-assets/agents/cfn-dev-team/reviewers/quality/perf-analyzer.md +7 -87
- package/claude-assets/agents/cfn-dev-team/reviewers/quality/performance-benchmarker.md +8 -12
- package/claude-assets/agents/cfn-dev-team/reviewers/quality/security-specialist.md +11 -129
- package/claude-assets/agents/cfn-dev-team/reviewers/reviewer.md +231 -280
- package/claude-assets/agents/cfn-dev-team/testers/api-testing-specialist.md +0 -6
- package/claude-assets/agents/cfn-dev-team/testers/chaos-engineering-specialist.md +0 -6
- package/claude-assets/agents/cfn-dev-team/testers/e2e/playwright-tester.md +7 -32
- package/claude-assets/agents/cfn-dev-team/testers/interaction-tester.md +9 -47
- package/claude-assets/agents/cfn-dev-team/testers/load-testing-specialist.md +0 -6
- package/claude-assets/agents/cfn-dev-team/testers/playwright-tester.md +12 -28
- package/claude-assets/agents/cfn-dev-team/testers/tester.md +167 -236
- package/claude-assets/agents/cfn-dev-team/testers/unit/tdd-london-unit-swarm.md +7 -27
- package/claude-assets/agents/cfn-dev-team/testers/validation/validation-production-validator.md +7 -19
- package/claude-assets/agents/cfn-dev-team/testing/test-validation-agent.md +10 -47
- package/claude-assets/agents/cfn-dev-team/utility/agent-builder.md +40 -116
- package/claude-assets/agents/cfn-dev-team/utility/analyst.md +7 -47
- package/claude-assets/agents/cfn-dev-team/utility/code-booster.md +7 -40
- package/claude-assets/agents/cfn-dev-team/utility/context-curator.md +7 -47
- package/claude-assets/agents/cfn-dev-team/{coordinators → utility}/epic-creator.md +29 -0
- package/claude-assets/cfn-agents-ignore/cfn-seo-team/AGENT_CREATION_REPORT.md +4 -14
- package/claude-assets/cfn-agents-ignore/cfn-seo-team/AGENT_CREATION_REPORT.md.backup +481 -0
- package/claude-assets/cfn-agents-ignore/cfn-seo-team/DELEGATION_MATRIX.md +3 -4
- package/claude-assets/cfn-agents-ignore/cfn-seo-team/DELEGATION_MATRIX.md.backup +371 -0
- package/claude-assets/cfn-agents-ignore/cfn-seo-team/INTEGRATION_REQUIREMENTS.md +20 -26
- package/claude-assets/cfn-agents-ignore/cfn-seo-team/INTEGRATION_REQUIREMENTS.md.backup +637 -0
- package/claude-assets/cfn-agents-ignore/cfn-seo-team/cfn-seo-coordinator.md +295 -50
- package/claude-assets/cfn-agents-ignore/cfn-seo-team/cfn-seo-coordinator.md.backup +398 -0
- package/claude-assets/cfn-agents-ignore/cfn-seo-team/competitive-seo-analyst.md +27 -25
- package/claude-assets/cfn-agents-ignore/cfn-seo-team/competitive-seo-analyst.md.backup +401 -0
- package/claude-assets/cfn-agents-ignore/cfn-seo-team/content-atomization-specialist.md +5 -106
- package/claude-assets/cfn-agents-ignore/cfn-seo-team/content-atomization-specialist.md.backup +552 -0
- package/claude-assets/cfn-agents-ignore/cfn-seo-team/content-seo-strategist.md +5 -25
- package/claude-assets/cfn-agents-ignore/cfn-seo-team/content-seo-strategist.md.backup +223 -0
- package/claude-assets/cfn-agents-ignore/cfn-seo-team/eeat-content-auditor.md +5 -27
- package/claude-assets/cfn-agents-ignore/cfn-seo-team/eeat-content-auditor.md.backup +367 -0
- package/claude-assets/cfn-agents-ignore/cfn-seo-team/geo-optimization-expert.md +5 -27
- package/claude-assets/cfn-agents-ignore/cfn-seo-team/geo-optimization-expert.md.backup +247 -0
- package/claude-assets/cfn-agents-ignore/cfn-seo-team/link-building-specialist.md +5 -27
- package/claude-assets/cfn-agents-ignore/cfn-seo-team/link-building-specialist.md.backup +269 -0
- package/claude-assets/cfn-agents-ignore/cfn-seo-team/local-seo-optimizer.md +5 -25
- package/claude-assets/cfn-agents-ignore/cfn-seo-team/local-seo-optimizer.md.backup +311 -0
- package/claude-assets/cfn-agents-ignore/cfn-seo-team/programmatic-seo-engineer.md +6 -26
- package/claude-assets/cfn-agents-ignore/cfn-seo-team/programmatic-seo-engineer.md.backup +222 -0
- package/claude-assets/cfn-agents-ignore/cfn-seo-team/schema-markup-engineer.md +5 -25
- package/claude-assets/cfn-agents-ignore/cfn-seo-team/schema-markup-engineer.md.backup +408 -0
- package/claude-assets/cfn-agents-ignore/cfn-seo-team/seo-analytics-specialist.md +6 -26
- package/claude-assets/cfn-agents-ignore/cfn-seo-team/seo-analytics-specialist.md.backup +354 -0
- package/claude-assets/cfn-agents-ignore/cfn-seo-team/seo-validators/accessibility-validator.md +4 -4
- package/claude-assets/cfn-agents-ignore/cfn-seo-team/seo-validators/accessibility-validator.md.backup +561 -0
- package/claude-assets/cfn-agents-ignore/cfn-seo-team/seo-validators/audience-validator.md +2 -2
- package/claude-assets/cfn-agents-ignore/cfn-seo-team/seo-validators/audience-validator.md.backup +480 -0
- package/claude-assets/cfn-agents-ignore/cfn-seo-team/seo-validators/branding-validator.md +1 -1
- package/claude-assets/cfn-agents-ignore/cfn-seo-team/seo-validators/branding-validator.md.backup +448 -0
- package/claude-assets/cfn-agents-ignore/cfn-seo-team/seo-validators/humanizer-validator.md +2 -2
- package/claude-assets/cfn-agents-ignore/cfn-seo-team/seo-validators/humanizer-validator.md.backup +329 -0
- package/claude-assets/cfn-agents-ignore/cfn-seo-team/technical-seo-specialist.md +361 -199
- package/claude-assets/cfn-agents-ignore/cfn-seo-team/technical-seo-specialist.md.backup +208 -0
- package/claude-assets/commands/CFN_LOOP_TASK_MODE.md +100 -11
- package/claude-assets/commands/cfn-mode.md +2 -2
- package/claude-assets/skills/cfn-agent-spawning/spawn-agent.sh +12 -0
- package/claude-assets/skills/cfn-agent-spawning/spawn-agent.sh.backup +273 -0
- package/claude-assets/skills/cfn-environment-sanitization/SKILL.md +200 -0
- package/claude-assets/skills/cfn-environment-sanitization/sanitize-environment.sh +244 -0
- package/claude-assets/skills/cfn-hybrid-routing/README.md +1 -1
- package/claude-assets/skills/cfn-loop-orchestration/orchestrate.sh +95 -15
- package/claude-assets/skills/cfn-loop-orchestration/orchestrate.sh.backup +76 -11
- package/claude-assets/skills/cfn-loop-orchestration/orchestrate.sh.backup2 +959 -0
- package/claude-assets/skills/cfn-loop-orchestration/orchestrate.sh.clean +949 -0
- package/claude-assets/skills/cfn-node-heap-sizer/task-mode-heap-limiter.sh +326 -0
- package/claude-assets/skills/cfn-process-instrumentation/SKILL.md +279 -0
- package/claude-assets/skills/cfn-process-instrumentation/instrument-process.sh +323 -0
- package/claude-assets/skills/cfn-product-owner-decision/execute-decision.sh +82 -10
- package/claude-assets/skills/cfn-task-audit/get-audit-data.sh +376 -0
- package/claude-assets/skills/cfn-task-audit/store-task-audit.sh +184 -0
- package/claude-assets/skills/cfn-task-mode-safety/cli-coordination.sh +519 -0
- package/claude-assets/skills/cfn-task-mode-safety/mode-detection.sh +326 -0
- package/claude-assets/skills/cfn-task-mode-sanitize/task-mode-env-sanitizer.sh +224 -0
- package/claude-assets/skills/cfn-telemetry/collect-metrics.sh +249 -0
- package/claude-assets/skills/cfn-telemetry/start-telemetry.sh +111 -0
- package/claude-assets/skills/cfn-validation-runner-instrumentation/wrapped-executor.sh +327 -0
- package/dist/agents/agent-loader.js +146 -165
- package/dist/agents/agent-loader.js.map +1 -1
- package/dist/cli/config-manager.js +109 -91
- package/dist/cli/config-manager.js.map +1 -1
- package/package.json +1 -1
- package/scripts/mode-detection.sh +321 -0
- package/scripts/spawn-worker.sh +8 -0
- package/scripts/track-zai-costs-simple.sh +8 -0
|
@@ -21,6 +21,10 @@
|
|
|
21
21
|
|
|
22
22
|
set -euo pipefail
|
|
23
23
|
|
|
24
|
+
# Determine PROJECT_ROOT first before any other operations
|
|
25
|
+
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
|
26
|
+
PROJECT_ROOT="$(cd "$SCRIPT_DIR/../.." && pwd)"
|
|
27
|
+
|
|
24
28
|
# ⚠️ ANTI-023 MEMORY LEAK PROTECTION: Block Task Mode agents
|
|
25
29
|
# Task Mode agents spawn via Task() tool and should NOT use orchestration scripts
|
|
26
30
|
if [[ -z "${TASK_ID:-}" || -z "${LOOP3_AGENTS:-}" ]]; then
|
|
@@ -31,14 +35,39 @@ if [[ -z "${TASK_ID:-}" || -z "${LOOP3_AGENTS:-}" ]]; then
|
|
|
31
35
|
exit 1
|
|
32
36
|
fi
|
|
33
37
|
|
|
38
|
+
# ⚠️ ANTI-023 MEMORY LEAK PROTECTION: Environment Sanitization
|
|
39
|
+
# Load and apply environment sanitization to prevent memory leaks
|
|
40
|
+
if [[ -f "$PROJECT_ROOT/.claude/skills/cfn-task-mode-sanitize/task-mode-env-sanitizer.sh" ]]; then
|
|
41
|
+
source "$PROJECT_ROOT/.claude/skills/cfn-task-mode-sanitize/task-mode-env-sanitizer.sh"
|
|
42
|
+
sanitize_task_mode_environment "cli"
|
|
43
|
+
echo "✅ Environment sanitization applied" >&2
|
|
44
|
+
else
|
|
45
|
+
echo "⚠️ Environment sanitization not available - proceeding without protection" >&2
|
|
46
|
+
fi
|
|
47
|
+
|
|
48
|
+
# ⚠️ ANTI-023 MEMORY LEAK PROTECTION: Process Instrumentation
|
|
49
|
+
# Load process instrumentation and monitoring for the orchestrator
|
|
50
|
+
if [[ -f "$PROJECT_ROOT/.claude/skills/cfn-validation-runner-instrumentation/wrapped-executor.sh" ]]; then
|
|
51
|
+
source "$PROJECT_ROOT/.claude/skills/cfn-validation-runner-instrumentation/wrapped-executor.sh"
|
|
52
|
+
echo "✅ Orchestrator process instrumentation enabled" >&2
|
|
53
|
+
else
|
|
54
|
+
echo "⚠️ Process instrumentation not available - proceeding without monitoring" >&2
|
|
55
|
+
fi
|
|
56
|
+
|
|
57
|
+
# ⚠️ ANTI-023 MEMORY LEAK PROTECTION: Environment Configuration
|
|
58
|
+
# Set stabilization environment variables with sensible defaults
|
|
59
|
+
export CFN_VALIDATION_TIMEOUT="${CFN_VALIDATION_TIMEOUT:-300}" # 5 minutes
|
|
60
|
+
export CFN_MEMORY_LIMIT="${CFN_MEMORY_LIMIT:-2048}" # 2GB memory limit
|
|
61
|
+
export CFN_CPU_LIMIT="${CFN_CPU_LIMIT:-80}" # 80% CPU limit
|
|
62
|
+
export CFN_TELEMETRY_DIR="${CFN_TELEMETRY_DIR:-$PROJECT_ROOT/.artifacts/telemetry}"
|
|
63
|
+
mkdir -p "$CFN_TELEMETRY_DIR"
|
|
64
|
+
|
|
34
65
|
# Load security utilities
|
|
35
66
|
# shellcheck source=./security_utils.sh
|
|
36
67
|
source "$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)/security_utils.sh"
|
|
37
68
|
|
|
38
|
-
# Determine script directory
|
|
39
|
-
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
|
40
69
|
HELPERS_DIR="$SCRIPT_DIR/helpers"
|
|
41
|
-
|
|
70
|
+
REDIS_COORD_SKILL="$PROJECT_ROOT/.claude/skills/cfn-redis-coordination"
|
|
42
71
|
|
|
43
72
|
# Configuration
|
|
44
73
|
TASK_ID=""
|
|
@@ -250,6 +279,16 @@ if [ -z "$TASK_ID" ] || [ -z "$LOOP3_AGENTS" ] || [ -z "$LOOP2_AGENTS" ] || [ -z
|
|
|
250
279
|
exit 1
|
|
251
280
|
fi
|
|
252
281
|
|
|
282
|
+
# ⚠️ ANTI-023 MEMORY LEAK PROTECTION: Process Instrumentation
|
|
283
|
+
# Load process instrumentation and monitoring for the orchestrator
|
|
284
|
+
# shellcheck source=../cfn-process-instrumentation/instrument-process.sh
|
|
285
|
+
if [[ -f "$PROJECT_ROOT/.claude/skills/cfn-process-instrumentation/instrument-process.sh" ]]; then
|
|
286
|
+
source "$PROJECT_ROOT/.claude/skills/cfn-process-instrumentation/instrument-process.sh"
|
|
287
|
+
echo "✅ Orchestrator process instrumentation enabled" >&2
|
|
288
|
+
else
|
|
289
|
+
echo "⚠️ Process instrumentation not available - proceeding without monitoring" >&2
|
|
290
|
+
fi
|
|
291
|
+
|
|
253
292
|
# Get thresholds for mode
|
|
254
293
|
# Add additional mode validation with safe fallback
|
|
255
294
|
case "$MODE" in
|
|
@@ -435,12 +474,22 @@ function spawn_loop3_agents() {
|
|
|
435
474
|
safe_task_id=$(sanitize_input "$task_id") || continue
|
|
436
475
|
safe_agent_id=$(sanitize_input "$UNIQUE_AGENT_ID") || continue
|
|
437
476
|
|
|
438
|
-
# Spawn agent in background with
|
|
439
|
-
|
|
440
|
-
|
|
441
|
-
|
|
442
|
-
|
|
443
|
-
|
|
477
|
+
# Spawn agent in background with process instrumentation and memory limits
|
|
478
|
+
if command -v execute_instrumented >/dev/null 2>&1; then
|
|
479
|
+
execute_instrumented "npx" "$CFN_VALIDATION_TIMEOUT" "$CFN_MEMORY_LIMIT" \
|
|
480
|
+
claude-flow-novice agent "$safe_agent_type" \
|
|
481
|
+
--task-id "$safe_task_id" \
|
|
482
|
+
--agent-id "$safe_agent_id" \
|
|
483
|
+
--iteration "$iteration" \
|
|
484
|
+
--context "$(build_agent_context "$safe_task_id" "$iteration" "$safe_agent_type" "" "loop3")" &
|
|
485
|
+
else
|
|
486
|
+
# Fallback to raw spawn if instrumentation unavailable
|
|
487
|
+
npx claude-flow-novice agent "$safe_agent_type" \
|
|
488
|
+
--task-id "$safe_task_id" \
|
|
489
|
+
--agent-id "$safe_agent_id" \
|
|
490
|
+
--iteration "$iteration" \
|
|
491
|
+
--context "$(build_agent_context "$safe_task_id" "$iteration" "$safe_agent_type" "" "loop3")" &
|
|
492
|
+
fi
|
|
444
493
|
|
|
445
494
|
# Store PID for monitoring using unique agent ID
|
|
446
495
|
AGENT_PID=$!
|
|
@@ -450,6 +499,17 @@ function spawn_loop3_agents() {
|
|
|
450
499
|
--value "{\"pid\": $AGENT_PID}" \
|
|
451
500
|
--namespace "swarm" >/dev/null
|
|
452
501
|
|
|
502
|
+
# ⚠️ ANTI-023 MEMORY LEAK PROTECTION: Start telemetry monitoring
|
|
503
|
+
if [[ -f "$PROJECT_ROOT/.claude/skills/cfn-telemetry/collect-metrics.sh" ]]; then
|
|
504
|
+
MONITOR_PID=$("$PROJECT_ROOT/.claude/skills/cfn-telemetry/collect-metrics.sh" start-monitoring "$UNIQUE_AGENT_ID" "$AGENT_PID" "$iteration" "$safe_agent_type")
|
|
505
|
+
"$REDIS_COORD_SKILL/store-context.sh" \
|
|
506
|
+
--task-id "$task_id" \
|
|
507
|
+
--key "${UNIQUE_AGENT_ID}:monitor_pid" \
|
|
508
|
+
--value "{\"pid\": $MONITOR_PID}" \
|
|
509
|
+
--namespace "swarm" >/dev/null
|
|
510
|
+
echo "🔍 Started monitoring for $UNIQUE_AGENT_ID (Agent PID: $AGENT_PID, Monitor PID: $MONITOR_PID)" >&2
|
|
511
|
+
fi
|
|
512
|
+
|
|
453
513
|
# Store agent ID mapping for later retrieval using Redis SADD for set storage
|
|
454
514
|
redis-cli SADD "swarm:${task_id}:loop3:agent_ids:iteration${iteration}" "$UNIQUE_AGENT_ID" >/dev/null
|
|
455
515
|
done
|
|
@@ -524,6 +584,16 @@ function wait_for_agents() {
|
|
|
524
584
|
wait "$pid" 2>/dev/null || true
|
|
525
585
|
done
|
|
526
586
|
|
|
587
|
+
# ⚠️ ANTI-023 MEMORY LEAK PROTECTION: Stop monitoring for all agents
|
|
588
|
+
echo " Stopping telemetry monitoring for Loop 3 agents..." >&2
|
|
589
|
+
for unique_agent_id in "${AGENT_IDS[@]}"; do
|
|
590
|
+
local monitor_pid=$("$REDIS_COORD_SKILL/get-context.sh" --task-id "$task_id" --key "${unique_agent_id}:monitor_pid" --namespace "swarm" 2>/dev/null | jq -r '.pid // 0' || echo "0")
|
|
591
|
+
if [[ "$monitor_pid" -gt 0 ]] && kill -0 "$monitor_pid" 2>/dev/null; then
|
|
592
|
+
"$PROJECT_ROOT/.claude/skills/cfn-telemetry/collect-metrics.sh" stop-monitoring "$monitor_pid" >/dev/null 2>&1 || true
|
|
593
|
+
echo " Stopped monitoring for $unique_agent_id (Monitor PID: $monitor_pid)" >&2
|
|
594
|
+
fi
|
|
595
|
+
done
|
|
596
|
+
|
|
527
597
|
# Calculate actual elapsed time
|
|
528
598
|
local end_time=$(date +%s)
|
|
529
599
|
local elapsed=$((end_time - start_time))
|
|
@@ -668,12 +738,22 @@ function spawn_loop2_agents() {
|
|
|
668
738
|
|
|
669
739
|
echo " Spawning: $agent_type (ID: $UNIQUE_VALIDATOR_ID)"
|
|
670
740
|
|
|
671
|
-
# Spawn
|
|
672
|
-
|
|
673
|
-
|
|
674
|
-
|
|
675
|
-
|
|
676
|
-
|
|
741
|
+
# Spawn validator in background with process instrumentation and memory limits
|
|
742
|
+
if command -v execute_instrumented >/dev/null 2>&1; then
|
|
743
|
+
execute_instrumented "npx" "$CFN_VALIDATION_TIMEOUT" "$CFN_MEMORY_LIMIT" \
|
|
744
|
+
claude-flow-novice agent "$agent_type" \
|
|
745
|
+
--task-id "$task_id" \
|
|
746
|
+
--agent-id "$UNIQUE_VALIDATOR_ID" \
|
|
747
|
+
--iteration "$iteration" \
|
|
748
|
+
--context "$(build_agent_context "$task_id" "$iteration" "$agent_type" "" "loop2")" &
|
|
749
|
+
else
|
|
750
|
+
# Fallback to raw spawn if instrumentation unavailable
|
|
751
|
+
npx claude-flow-novice agent "$agent_type" \
|
|
752
|
+
--task-id "$task_id" \
|
|
753
|
+
--agent-id "$UNIQUE_VALIDATOR_ID" \
|
|
754
|
+
--iteration "$iteration" \
|
|
755
|
+
--context "$(build_agent_context "$task_id" "$iteration" "$agent_type" "" "loop2")" &
|
|
756
|
+
fi
|
|
677
757
|
|
|
678
758
|
# Store PID for monitoring using unique agent ID
|
|
679
759
|
AGENT_PID=$!
|
|
@@ -21,6 +21,16 @@
|
|
|
21
21
|
|
|
22
22
|
set -euo pipefail
|
|
23
23
|
|
|
24
|
+
# ⚠️ ANTI-023 MEMORY LEAK PROTECTION: Block Task Mode agents
|
|
25
|
+
# Task Mode agents spawn via Task() tool and should NOT use orchestration scripts
|
|
26
|
+
if [[ -z "${TASK_ID:-}" || -z "${LOOP3_AGENTS:-}" ]]; then
|
|
27
|
+
echo "❌ TASK MODE DETECTED - Orchestration forbidden" >&2
|
|
28
|
+
echo "🚨 ANTI-023: This script is for CLI-spawned coordinators only" >&2
|
|
29
|
+
echo "💡 Task Mode coordination should be handled directly by Main Chat" >&2
|
|
30
|
+
echo "🔧 Coordinator spawned via Task() tool - Main Chat should coordinate directly" >&2
|
|
31
|
+
exit 1
|
|
32
|
+
fi
|
|
33
|
+
|
|
24
34
|
# Load security utilities
|
|
25
35
|
# shellcheck source=./security_utils.sh
|
|
26
36
|
source "$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)/security_utils.sh"
|
|
@@ -317,23 +327,78 @@ function store_context() {
|
|
|
317
327
|
}
|
|
318
328
|
|
|
319
329
|
build_agent_context() {
|
|
320
|
-
local
|
|
321
|
-
local
|
|
322
|
-
local
|
|
323
|
-
local
|
|
330
|
+
local task_id="$1"
|
|
331
|
+
local iteration="$2"
|
|
332
|
+
local agent_type="$3"
|
|
333
|
+
local feedback="$4"
|
|
334
|
+
local loop_type="${5:-}" # NEW: loop3, loop2, or loop4 (optional)
|
|
324
335
|
|
|
325
|
-
#
|
|
336
|
+
# Initialize context variables
|
|
326
337
|
local task_desc="CFN Loop implementation"
|
|
327
|
-
local deliverables
|
|
328
|
-
local acceptance
|
|
338
|
+
local deliverables=""
|
|
339
|
+
local acceptance=""
|
|
340
|
+
local epic_context=""
|
|
341
|
+
local phase_context=""
|
|
342
|
+
local target_files=""
|
|
343
|
+
|
|
344
|
+
# Try to retrieve complete context from Redis
|
|
345
|
+
if command -v "$REDIS_COORD_SKILL/get-context.sh" >/dev/null 2>&1; then
|
|
346
|
+
if redis_context=$("$REDIS_COORD_SKILL/get-context.sh" --task-id "$task_id" --namespace "swarm" 2>/dev/null); then
|
|
347
|
+
echo "📥 Retrieved Redis context for task: $task_id" >&2
|
|
348
|
+
|
|
349
|
+
# Extract fields from Redis context
|
|
350
|
+
task_desc=$(echo "$redis_context" | jq -r '.["epic-context"] // .epic_context // "CFN Loop implementation"' 2>/dev/null || echo "CFN Loop implementation")
|
|
351
|
+
deliverables=$(echo "$redis_context" | jq -r '.deliverables // [] | if type == "array" then join(", ") else . end' 2>/dev/null || echo "")
|
|
352
|
+
acceptance=$(echo "$redis_context" | jq -r '.acceptanceCriteria // .["acceptance-criteria"] // [] | if type == "array" then join(", ") else . end' 2>/dev/null || echo "")
|
|
353
|
+
epic_context=$(echo "$redis_context" | jq -r '.["epic-context"] // ""' 2>/dev/null || echo "")
|
|
354
|
+
phase_context=$(echo "$redis_context" | jq -r '.["phase-context"] // ""' 2>/dev/null || echo "")
|
|
355
|
+
target_files=$(echo "$redis_context" | jq -r '.["target-files"] // ""' 2>/dev/null || echo "")
|
|
356
|
+
|
|
357
|
+
echo "📋 Redis context extracted - Task: $task_desc" >&2
|
|
358
|
+
else
|
|
359
|
+
echo "⚠️ Failed to retrieve Redis context, using local SUCCESS_CRITERIA" >&2
|
|
360
|
+
fi
|
|
361
|
+
else
|
|
362
|
+
echo "⚠️ get-context.sh not found, using local SUCCESS_CRITERIA" >&2
|
|
363
|
+
fi
|
|
364
|
+
|
|
365
|
+
# Fallback to local SUCCESS_CRITERIA if Redis retrieval failed or incomplete
|
|
366
|
+
if [ -z "$deliverables" ] && [ -n "$SUCCESS_CRITERIA" ]; then
|
|
367
|
+
deliverables=$(echo "$SUCCESS_CRITERIA" | jq -r '.deliverables // [] | join(", ")' 2>/dev/null || echo "")
|
|
368
|
+
acceptance=$(echo "$SUCCESS_CRITERIA" | jq -r '.acceptanceCriteria // [] | join(", ")' 2>/dev/null || echo "")
|
|
369
|
+
echo "🔄 Using local SUCCESS_CRITERIA as fallback" >&2
|
|
370
|
+
fi
|
|
371
|
+
|
|
372
|
+
# Build comprehensive context string
|
|
373
|
+
local context="Task: $task_desc"
|
|
374
|
+
|
|
375
|
+
if [ -n "$deliverables" ]; then
|
|
376
|
+
context="$context | Deliverables: $deliverables"
|
|
377
|
+
fi
|
|
378
|
+
|
|
379
|
+
if [ -n "$acceptance" ]; then
|
|
380
|
+
context="$context | Acceptance Criteria: $acceptance"
|
|
381
|
+
fi
|
|
382
|
+
|
|
383
|
+
if [ -n "$target_files" ]; then
|
|
384
|
+
context="$context | Target Files: $target_files"
|
|
385
|
+
fi
|
|
329
386
|
|
|
330
|
-
|
|
331
|
-
local context="Task: $task_desc | Deliverables: $deliverables | Acceptance: $acceptance | Iteration: $iteration"
|
|
387
|
+
context="$context | Iteration: $iteration"
|
|
332
388
|
|
|
333
389
|
if [[ -n "$feedback" ]]; then
|
|
334
390
|
context="$context | Feedback: $feedback"
|
|
335
391
|
fi
|
|
336
392
|
|
|
393
|
+
# Add epic/phase context if available
|
|
394
|
+
if [ -n "$epic_context" ]; then
|
|
395
|
+
context="$context | Epic: $epic_context"
|
|
396
|
+
fi
|
|
397
|
+
|
|
398
|
+
if [ -n "$phase_context" ]; then
|
|
399
|
+
context="$context | Phase: $phase_context"
|
|
400
|
+
fi
|
|
401
|
+
|
|
337
402
|
# Inject CFN Loop context if injection script exists and loop_type provided
|
|
338
403
|
if [[ -n "$loop_type" ]] && [[ -x "$SCRIPT_DIR/inject-loop-context.sh" ]]; then
|
|
339
404
|
context=$("$SCRIPT_DIR/inject-loop-context.sh" "$loop_type" "$context" 2>/dev/null || echo "$context")
|
|
@@ -375,7 +440,7 @@ function spawn_loop3_agents() {
|
|
|
375
440
|
--task-id "$safe_task_id" \
|
|
376
441
|
--agent-id "$safe_agent_id" \
|
|
377
442
|
--iteration "$iteration" \
|
|
378
|
-
--context "$(build_agent_context "$iteration" "$safe_agent_type" "" "loop3")" &
|
|
443
|
+
--context "$(build_agent_context "$safe_task_id" "$iteration" "$safe_agent_type" "" "loop3")" &
|
|
379
444
|
|
|
380
445
|
# Store PID for monitoring using unique agent ID
|
|
381
446
|
AGENT_PID=$!
|
|
@@ -608,7 +673,7 @@ function spawn_loop2_agents() {
|
|
|
608
673
|
--task-id "$task_id" \
|
|
609
674
|
--agent-id "$UNIQUE_VALIDATOR_ID" \
|
|
610
675
|
--iteration "$iteration" \
|
|
611
|
-
--context "$(build_agent_context "$iteration" "$agent_type" "" "loop2")" &
|
|
676
|
+
--context "$(build_agent_context "$task_id" "$iteration" "$agent_type" "" "loop2")" &
|
|
612
677
|
|
|
613
678
|
# Store PID for monitoring using unique agent ID
|
|
614
679
|
AGENT_PID=$!
|