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.
Files changed (164) hide show
  1. package/.claude/cfn-agents-ignore/cfn-seo-team/AGENT_CREATION_REPORT.md +4 -14
  2. package/.claude/cfn-agents-ignore/cfn-seo-team/AGENT_CREATION_REPORT.md.backup +481 -0
  3. package/.claude/cfn-agents-ignore/cfn-seo-team/DELEGATION_MATRIX.md +3 -4
  4. package/.claude/cfn-agents-ignore/cfn-seo-team/DELEGATION_MATRIX.md.backup +371 -0
  5. package/.claude/cfn-agents-ignore/cfn-seo-team/INTEGRATION_REQUIREMENTS.md +20 -26
  6. package/.claude/cfn-agents-ignore/cfn-seo-team/INTEGRATION_REQUIREMENTS.md.backup +637 -0
  7. package/.claude/cfn-agents-ignore/cfn-seo-team/cfn-seo-coordinator.md +295 -50
  8. package/.claude/cfn-agents-ignore/cfn-seo-team/cfn-seo-coordinator.md.backup +398 -0
  9. package/.claude/cfn-agents-ignore/cfn-seo-team/competitive-seo-analyst.md +27 -25
  10. package/.claude/cfn-agents-ignore/cfn-seo-team/competitive-seo-analyst.md.backup +401 -0
  11. package/.claude/cfn-agents-ignore/cfn-seo-team/content-atomization-specialist.md +5 -106
  12. package/.claude/cfn-agents-ignore/cfn-seo-team/content-atomization-specialist.md.backup +552 -0
  13. package/.claude/cfn-agents-ignore/cfn-seo-team/content-seo-strategist.md +5 -25
  14. package/.claude/cfn-agents-ignore/cfn-seo-team/content-seo-strategist.md.backup +223 -0
  15. package/.claude/cfn-agents-ignore/cfn-seo-team/eeat-content-auditor.md +5 -27
  16. package/.claude/cfn-agents-ignore/cfn-seo-team/eeat-content-auditor.md.backup +367 -0
  17. package/.claude/cfn-agents-ignore/cfn-seo-team/geo-optimization-expert.md +5 -27
  18. package/.claude/cfn-agents-ignore/cfn-seo-team/geo-optimization-expert.md.backup +247 -0
  19. package/.claude/cfn-agents-ignore/cfn-seo-team/link-building-specialist.md +5 -27
  20. package/.claude/cfn-agents-ignore/cfn-seo-team/link-building-specialist.md.backup +269 -0
  21. package/.claude/cfn-agents-ignore/cfn-seo-team/local-seo-optimizer.md +5 -25
  22. package/.claude/cfn-agents-ignore/cfn-seo-team/local-seo-optimizer.md.backup +311 -0
  23. package/.claude/cfn-agents-ignore/cfn-seo-team/programmatic-seo-engineer.md +6 -26
  24. package/.claude/cfn-agents-ignore/cfn-seo-team/programmatic-seo-engineer.md.backup +222 -0
  25. package/.claude/cfn-agents-ignore/cfn-seo-team/schema-markup-engineer.md +5 -25
  26. package/.claude/cfn-agents-ignore/cfn-seo-team/schema-markup-engineer.md.backup +408 -0
  27. package/.claude/cfn-agents-ignore/cfn-seo-team/seo-analytics-specialist.md +6 -26
  28. package/.claude/cfn-agents-ignore/cfn-seo-team/seo-analytics-specialist.md.backup +354 -0
  29. package/.claude/cfn-agents-ignore/cfn-seo-team/seo-validators/accessibility-validator.md +4 -4
  30. package/.claude/cfn-agents-ignore/cfn-seo-team/seo-validators/accessibility-validator.md.backup +561 -0
  31. package/.claude/cfn-agents-ignore/cfn-seo-team/seo-validators/audience-validator.md +2 -2
  32. package/.claude/cfn-agents-ignore/cfn-seo-team/seo-validators/audience-validator.md.backup +480 -0
  33. package/.claude/cfn-agents-ignore/cfn-seo-team/seo-validators/branding-validator.md +1 -1
  34. package/.claude/cfn-agents-ignore/cfn-seo-team/seo-validators/branding-validator.md.backup +448 -0
  35. package/.claude/cfn-agents-ignore/cfn-seo-team/seo-validators/humanizer-validator.md +2 -2
  36. package/.claude/cfn-agents-ignore/cfn-seo-team/seo-validators/humanizer-validator.md.backup +329 -0
  37. package/.claude/cfn-agents-ignore/cfn-seo-team/technical-seo-specialist.md +361 -199
  38. package/.claude/cfn-agents-ignore/cfn-seo-team/technical-seo-specialist.md.backup +208 -0
  39. package/.claude/commands/CFN_LOOP_TASK_MODE.md +100 -11
  40. package/.claude/commands/cfn-mode.md +2 -2
  41. package/.claude/skills/cfn-agent-spawning/spawn-agent.sh +12 -0
  42. package/.claude/skills/cfn-agent-spawning/spawn-agent.sh.backup +273 -0
  43. package/.claude/skills/cfn-hybrid-routing/README.md +1 -1
  44. package/.claude/skills/cfn-loop-orchestration/orchestrate.sh +95 -15
  45. package/.claude/skills/cfn-loop-orchestration/orchestrate.sh.backup +76 -11
  46. package/.claude/skills/cfn-loop-orchestration/orchestrate.sh.backup2 +959 -0
  47. package/.claude/skills/cfn-loop-orchestration/orchestrate.sh.clean +949 -0
  48. package/.claude/skills/cfn-product-owner-decision/execute-decision.sh +82 -10
  49. package/claude-assets/agents/cfn-dev-team/CLAUDE.md +24 -14
  50. package/claude-assets/agents/cfn-dev-team/architecture/api-designer-persona.md +0 -7
  51. package/claude-assets/agents/cfn-dev-team/architecture/base-template-generator.md +12 -38
  52. package/claude-assets/agents/cfn-dev-team/architecture/goal-planner.md +0 -10
  53. package/claude-assets/agents/cfn-dev-team/architecture/planner.md +7 -57
  54. package/claude-assets/agents/cfn-dev-team/architecture/system-architect.md +8 -45
  55. package/claude-assets/agents/cfn-dev-team/coordinators/cfn-frontend-coordinator.md +365 -25
  56. package/claude-assets/agents/cfn-dev-team/coordinators/cfn-v3-coordinator.md +504 -448
  57. package/claude-assets/agents/cfn-dev-team/coordinators/consensus-builder.md +428 -167
  58. package/claude-assets/agents/cfn-dev-team/coordinators/multi-sprint-coordinator.md +472 -20
  59. package/claude-assets/agents/cfn-dev-team/dev-ops/devops-engineer.md +5 -5
  60. package/claude-assets/agents/cfn-dev-team/dev-ops/docker-specialist.md +5 -7
  61. package/claude-assets/agents/cfn-dev-team/dev-ops/kubernetes-specialist.md +0 -6
  62. package/claude-assets/agents/cfn-dev-team/dev-ops/monitoring-specialist.md +3 -3
  63. package/claude-assets/agents/cfn-dev-team/developers/api-gateway-specialist.md +13 -14
  64. package/claude-assets/agents/cfn-dev-team/developers/data/data-engineer.md +0 -6
  65. package/claude-assets/agents/cfn-dev-team/developers/database/database-architect.md +2 -2
  66. package/claude-assets/agents/cfn-dev-team/developers/frontend/mobile-dev.md +10 -56
  67. package/claude-assets/agents/cfn-dev-team/developers/frontend/typescript-specialist.md +7 -26
  68. package/claude-assets/agents/cfn-dev-team/developers/rust-developer.md +8 -48
  69. package/claude-assets/agents/cfn-dev-team/documentation/api-documentation.md +1 -1
  70. package/claude-assets/agents/cfn-dev-team/documentation/pseudocode.md +3 -11
  71. package/claude-assets/agents/cfn-dev-team/documentation/specification-agent.md +6 -16
  72. package/claude-assets/agents/cfn-dev-team/product-owners/cto-agent.md +7 -19
  73. package/claude-assets/agents/cfn-dev-team/product-owners/power-user-persona.md +9 -49
  74. package/claude-assets/agents/cfn-dev-team/product-owners/product-owner.md +291 -86
  75. package/claude-assets/agents/cfn-dev-team/reviewers/quality/code-quality-validator.md +9 -81
  76. package/claude-assets/agents/cfn-dev-team/reviewers/quality/cyclomatic-complexity-reducer.md +4 -64
  77. package/claude-assets/agents/cfn-dev-team/reviewers/quality/perf-analyzer.md +7 -87
  78. package/claude-assets/agents/cfn-dev-team/reviewers/quality/performance-benchmarker.md +8 -12
  79. package/claude-assets/agents/cfn-dev-team/reviewers/quality/security-specialist.md +11 -129
  80. package/claude-assets/agents/cfn-dev-team/reviewers/reviewer.md +231 -280
  81. package/claude-assets/agents/cfn-dev-team/testers/api-testing-specialist.md +0 -6
  82. package/claude-assets/agents/cfn-dev-team/testers/chaos-engineering-specialist.md +0 -6
  83. package/claude-assets/agents/cfn-dev-team/testers/e2e/playwright-tester.md +7 -32
  84. package/claude-assets/agents/cfn-dev-team/testers/interaction-tester.md +9 -47
  85. package/claude-assets/agents/cfn-dev-team/testers/load-testing-specialist.md +0 -6
  86. package/claude-assets/agents/cfn-dev-team/testers/playwright-tester.md +12 -28
  87. package/claude-assets/agents/cfn-dev-team/testers/tester.md +167 -236
  88. package/claude-assets/agents/cfn-dev-team/testers/unit/tdd-london-unit-swarm.md +7 -27
  89. package/claude-assets/agents/cfn-dev-team/testers/validation/validation-production-validator.md +7 -19
  90. package/claude-assets/agents/cfn-dev-team/testing/test-validation-agent.md +10 -47
  91. package/claude-assets/agents/cfn-dev-team/utility/agent-builder.md +40 -116
  92. package/claude-assets/agents/cfn-dev-team/utility/analyst.md +7 -47
  93. package/claude-assets/agents/cfn-dev-team/utility/code-booster.md +7 -40
  94. package/claude-assets/agents/cfn-dev-team/utility/context-curator.md +7 -47
  95. package/claude-assets/agents/cfn-dev-team/{coordinators → utility}/epic-creator.md +29 -0
  96. package/claude-assets/cfn-agents-ignore/cfn-seo-team/AGENT_CREATION_REPORT.md +4 -14
  97. package/claude-assets/cfn-agents-ignore/cfn-seo-team/AGENT_CREATION_REPORT.md.backup +481 -0
  98. package/claude-assets/cfn-agents-ignore/cfn-seo-team/DELEGATION_MATRIX.md +3 -4
  99. package/claude-assets/cfn-agents-ignore/cfn-seo-team/DELEGATION_MATRIX.md.backup +371 -0
  100. package/claude-assets/cfn-agents-ignore/cfn-seo-team/INTEGRATION_REQUIREMENTS.md +20 -26
  101. package/claude-assets/cfn-agents-ignore/cfn-seo-team/INTEGRATION_REQUIREMENTS.md.backup +637 -0
  102. package/claude-assets/cfn-agents-ignore/cfn-seo-team/cfn-seo-coordinator.md +295 -50
  103. package/claude-assets/cfn-agents-ignore/cfn-seo-team/cfn-seo-coordinator.md.backup +398 -0
  104. package/claude-assets/cfn-agents-ignore/cfn-seo-team/competitive-seo-analyst.md +27 -25
  105. package/claude-assets/cfn-agents-ignore/cfn-seo-team/competitive-seo-analyst.md.backup +401 -0
  106. package/claude-assets/cfn-agents-ignore/cfn-seo-team/content-atomization-specialist.md +5 -106
  107. package/claude-assets/cfn-agents-ignore/cfn-seo-team/content-atomization-specialist.md.backup +552 -0
  108. package/claude-assets/cfn-agents-ignore/cfn-seo-team/content-seo-strategist.md +5 -25
  109. package/claude-assets/cfn-agents-ignore/cfn-seo-team/content-seo-strategist.md.backup +223 -0
  110. package/claude-assets/cfn-agents-ignore/cfn-seo-team/eeat-content-auditor.md +5 -27
  111. package/claude-assets/cfn-agents-ignore/cfn-seo-team/eeat-content-auditor.md.backup +367 -0
  112. package/claude-assets/cfn-agents-ignore/cfn-seo-team/geo-optimization-expert.md +5 -27
  113. package/claude-assets/cfn-agents-ignore/cfn-seo-team/geo-optimization-expert.md.backup +247 -0
  114. package/claude-assets/cfn-agents-ignore/cfn-seo-team/link-building-specialist.md +5 -27
  115. package/claude-assets/cfn-agents-ignore/cfn-seo-team/link-building-specialist.md.backup +269 -0
  116. package/claude-assets/cfn-agents-ignore/cfn-seo-team/local-seo-optimizer.md +5 -25
  117. package/claude-assets/cfn-agents-ignore/cfn-seo-team/local-seo-optimizer.md.backup +311 -0
  118. package/claude-assets/cfn-agents-ignore/cfn-seo-team/programmatic-seo-engineer.md +6 -26
  119. package/claude-assets/cfn-agents-ignore/cfn-seo-team/programmatic-seo-engineer.md.backup +222 -0
  120. package/claude-assets/cfn-agents-ignore/cfn-seo-team/schema-markup-engineer.md +5 -25
  121. package/claude-assets/cfn-agents-ignore/cfn-seo-team/schema-markup-engineer.md.backup +408 -0
  122. package/claude-assets/cfn-agents-ignore/cfn-seo-team/seo-analytics-specialist.md +6 -26
  123. package/claude-assets/cfn-agents-ignore/cfn-seo-team/seo-analytics-specialist.md.backup +354 -0
  124. package/claude-assets/cfn-agents-ignore/cfn-seo-team/seo-validators/accessibility-validator.md +4 -4
  125. package/claude-assets/cfn-agents-ignore/cfn-seo-team/seo-validators/accessibility-validator.md.backup +561 -0
  126. package/claude-assets/cfn-agents-ignore/cfn-seo-team/seo-validators/audience-validator.md +2 -2
  127. package/claude-assets/cfn-agents-ignore/cfn-seo-team/seo-validators/audience-validator.md.backup +480 -0
  128. package/claude-assets/cfn-agents-ignore/cfn-seo-team/seo-validators/branding-validator.md +1 -1
  129. package/claude-assets/cfn-agents-ignore/cfn-seo-team/seo-validators/branding-validator.md.backup +448 -0
  130. package/claude-assets/cfn-agents-ignore/cfn-seo-team/seo-validators/humanizer-validator.md +2 -2
  131. package/claude-assets/cfn-agents-ignore/cfn-seo-team/seo-validators/humanizer-validator.md.backup +329 -0
  132. package/claude-assets/cfn-agents-ignore/cfn-seo-team/technical-seo-specialist.md +361 -199
  133. package/claude-assets/cfn-agents-ignore/cfn-seo-team/technical-seo-specialist.md.backup +208 -0
  134. package/claude-assets/commands/CFN_LOOP_TASK_MODE.md +100 -11
  135. package/claude-assets/commands/cfn-mode.md +2 -2
  136. package/claude-assets/skills/cfn-agent-spawning/spawn-agent.sh +12 -0
  137. package/claude-assets/skills/cfn-agent-spawning/spawn-agent.sh.backup +273 -0
  138. package/claude-assets/skills/cfn-environment-sanitization/SKILL.md +200 -0
  139. package/claude-assets/skills/cfn-environment-sanitization/sanitize-environment.sh +244 -0
  140. package/claude-assets/skills/cfn-hybrid-routing/README.md +1 -1
  141. package/claude-assets/skills/cfn-loop-orchestration/orchestrate.sh +95 -15
  142. package/claude-assets/skills/cfn-loop-orchestration/orchestrate.sh.backup +76 -11
  143. package/claude-assets/skills/cfn-loop-orchestration/orchestrate.sh.backup2 +959 -0
  144. package/claude-assets/skills/cfn-loop-orchestration/orchestrate.sh.clean +949 -0
  145. package/claude-assets/skills/cfn-node-heap-sizer/task-mode-heap-limiter.sh +326 -0
  146. package/claude-assets/skills/cfn-process-instrumentation/SKILL.md +279 -0
  147. package/claude-assets/skills/cfn-process-instrumentation/instrument-process.sh +323 -0
  148. package/claude-assets/skills/cfn-product-owner-decision/execute-decision.sh +82 -10
  149. package/claude-assets/skills/cfn-task-audit/get-audit-data.sh +376 -0
  150. package/claude-assets/skills/cfn-task-audit/store-task-audit.sh +184 -0
  151. package/claude-assets/skills/cfn-task-mode-safety/cli-coordination.sh +519 -0
  152. package/claude-assets/skills/cfn-task-mode-safety/mode-detection.sh +326 -0
  153. package/claude-assets/skills/cfn-task-mode-sanitize/task-mode-env-sanitizer.sh +224 -0
  154. package/claude-assets/skills/cfn-telemetry/collect-metrics.sh +249 -0
  155. package/claude-assets/skills/cfn-telemetry/start-telemetry.sh +111 -0
  156. package/claude-assets/skills/cfn-validation-runner-instrumentation/wrapped-executor.sh +327 -0
  157. package/dist/agents/agent-loader.js +146 -165
  158. package/dist/agents/agent-loader.js.map +1 -1
  159. package/dist/cli/config-manager.js +109 -91
  160. package/dist/cli/config-manager.js.map +1 -1
  161. package/package.json +1 -1
  162. package/scripts/mode-detection.sh +321 -0
  163. package/scripts/spawn-worker.sh +8 -0
  164. 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
- PROJECT_ROOT="$(cd "$SCRIPT_DIR/../../.." && pwd)" && REDIS_COORD_SKILL="$PROJECT_ROOT/.claude/skills/cfn-redis-coordination"
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 explicit agent ID
439
- npx claude-flow-novice agent "$safe_agent_type" \
440
- --task-id "$safe_task_id" \
441
- --agent-id "$safe_agent_id" \
442
- --iteration "$iteration" \
443
- --context "$(build_agent_context "$safe_task_id" "$iteration" "$safe_agent_type" "" "loop3")" &
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 agent in background with explicit agent ID
672
- npx claude-flow-novice agent "$agent_type" \
673
- --task-id "$task_id" \
674
- --agent-id "$UNIQUE_VALIDATOR_ID" \
675
- --iteration "$iteration" \
676
- --context "$(build_agent_context "$task_id" "$iteration" "$agent_type" "" "loop2")" &
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 iteration="$1"
321
- local agent_type="$2"
322
- local feedback="$3"
323
- local loop_type="${4:-}" # NEW: loop3, loop2, or loop4 (optional)
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
- # Extract from SUCCESS_CRITERIA JSON
336
+ # Initialize context variables
326
337
  local task_desc="CFN Loop implementation"
327
- local deliverables=$(echo "$SUCCESS_CRITERIA" | jq -r '.deliverables // [] | join(", ")' 2>/dev/null || echo "")
328
- local acceptance=$(echo "$SUCCESS_CRITERIA" | jq -r '.acceptanceCriteria // [] | join(", ")' 2>/dev/null || echo "")
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
- # Build base context
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=$!