UNPKG

claude-flow-novice

Version:

Claude Flow Novice - Advanced orchestration platform for multi-agent AI workflows with CFN Loop architecture Includes Local RuVector Accelerator and all CFN skills for complete functionality.

602 lines (483 loc) 18.3 kB
# Shell Helpers Removal Backup - 2025-11-20 **Purpose:** Preserve content of deprecated shell scripts before removal **Total Scripts:** 6 **Total Lines of Code:** 415 LOC **Replacement:** All functionality migrated to TypeScript equivalents **Status:** Safe to delete (TypeScript versions fully compiled and tested) --- ## Summary These 6 shell scripts in `.claude/skills/cfn-loop-orchestration/helpers/` have been fully replaced by TypeScript implementations. The shell versions were: - Thin wrapper scripts delegating to TypeScript (parse-test-results.sh, gate-check.sh) - Legacy implementations with known issues (iteration-manager.sh, consensus.sh, deliverable-verifier.sh, timeout-calculator.sh) All have: 1. Complete TypeScript equivalents in `src/helpers/` 2. Compiled versions in `dist/helpers/` 3. Comprehensive test coverage (88 total tests across 6 test files) 4. No active references in production code (only in SKILL.md documentation) --- ## 1. parse-test-results.sh (56 LOC) **Location:** `.claude/skills/cfn-loop-orchestration/helpers/parse-test-results.sh` **Purpose:** Parse test output from multiple testing frameworks (Jest, Mocha, pytest, TAP, Go) **Type:** Thin wrapper delegating to TypeScript **TS Equivalent:** `src/helpers/parse-test-results.ts` (372 LOC, 26 tests) **Content:** ```bash #!/usr/bin/env bash ############################################################################## # Parse Test Results - TypeScript Wrapper # Parses test output from multiple testing frameworks # # This is a wrapper script that delegates to the TypeScript implementation # for better type safety and maintainability. # # Usage: # parse-test-results.sh <framework|auto> <output_file_or_string> # # Frameworks: # - jest: Jest testing framework # - mocha: Mocha testing framework # - pytest: Python pytest # - tap: TAP (Test Anything Protocol) # - go: Go test output # - auto: Auto-detect framework # # Returns JSON: # { # "framework": "jest", # "total": 10, # "passed": 8, # "failed": 2, # "skipped": 0, # "passRate": 0.8, # "durationMs": 1234, # "failedTestNames": ["test1", "test2"], # "raw": "..." # } ############################################################################## set -euo pipefail SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" SKILL_ROOT="$(cd "$SCRIPT_DIR/.." && pwd)" # Path to compiled TypeScript TS_DIST="$SKILL_ROOT/dist/helpers/parse-test-results.js" # Check if TypeScript implementation exists if [ ! -f "$TS_DIST" ]; then echo "❌ Error: TypeScript implementation not found at: $TS_DIST" >&2 echo " Run 'npm run build' in .claude/skills/cfn-loop-orchestration/" >&2 exit 1 fi # Check if node is available if ! command -v node &>/dev/null; then echo "❌ Error: Node.js is required but not found in PATH" >&2 exit 1 fi # Execute TypeScript implementation exec node "$TS_DIST" "$@" ``` --- ## 2. gate-check.sh (56 LOC) **Location:** `.claude/skills/cfn-loop-orchestration/helpers/gate-check.sh` **Purpose:** Validate Loop 3 self-assessment using test pass rate thresholds (70%, 95%, 98% by mode) **Type:** Thin wrapper delegating to TypeScript **TS Equivalent:** `src/helpers/gate-check.ts` (115 LOC, 28 tests) **Content:** ```bash #!/usr/bin/env bash ############################################################################## # Gate Check - TypeScript Wrapper # Validates Loop 3 self-assessment using test pass rate thresholds # # This is a wrapper script that delegates to the TypeScript implementation # for better type safety and maintainability. # # Usage: # gate-check.sh --pass-rate <0.0-1.0> \ # [--threshold <0.0-1.0>] \ # [--mode <mvp|standard|enterprise>] # # Mode-Specific Thresholds: # - mvp: 0.70 (70% pass rate) # - standard: 0.95 (95% pass rate) [default] # - enterprise: 0.98 (98% pass rate) # # Returns JSON: # { # "passed": true|false, # "passRate": 0.96, # "threshold": 0.95, # "mode": "standard", # "gap": 0.0, # "reason": "Gate PASSED: ..." # } # # Exit Codes: # 0: Gate passed # 1: Gate failed ############################################################################## set -euo pipefail SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" SKILL_ROOT="$(cd "$SCRIPT_DIR/.." && pwd)" # Path to compiled TypeScript TS_DIST="$SKILL_ROOT/dist/helpers/gate-check.js" # Check if TypeScript implementation exists if [ ! -f "$TS_DIST" ]; then echo "❌ Error: TypeScript implementation not found at: $TS_DIST" >&2 echo " Run 'npm run build' in .claude/skills/cfn-loop-orchestration/" >&2 exit 1 fi # Check if node is available if ! command -v node &>/dev/null; then echo "❌ Error: Node.js is required but not found in PATH" >&2 exit 1 fi # Execute TypeScript implementation exec node "$TS_DIST" "$@" ``` --- ## 3. iteration-manager.sh (87 LOC) **Location:** `.claude/skills/cfn-loop-orchestration/helpers/iteration-manager.sh` **Purpose:** Manage iteration cycles and feedback injection (wake agents with context) **Type:** Legacy implementation with Redis coordination calls **TS Equivalent:** `src/helpers/iteration-manager.ts` (45 LOC, 12 tests) **Notes:** - Contains path resolution bug on line 44: `$SCRIPT_DIR/.claude/skills/cfn-cfn-..` - Delegates to Redis coordination skill for wake operations - TypeScript version is cleaner with better error handling **Content:** ```bash #!/usr/bin/env bash ############################################################################## # Iteration Manager # Manages iteration cycles and feedback injection # # Usage: # iteration-manager.sh --task-id <id> \ # --iteration <n> \ # --agents <agent1,agent2,...> \ # --feedback-source <redis-key-prefix> # # Returns: # Exit 0: Agents awakened for next iteration # Exit 1: Error during wake process ############################################################################## set -euo pipefail # Parameters TASK_ID="" ITERATION="" AGENTS="" FEEDBACK_SOURCE="" # Parse arguments while [[ $# -gt 0 ]]; do case $1 in --task-id) TASK_ID="$2"; shift 2 ;; --iteration) ITERATION="$2"; shift 2 ;; --agents) AGENTS="$2"; shift 2 ;; --feedback-source) FEEDBACK_SOURCE="$2"; shift 2 ;; *) echo "Unknown option: $1"; exit 1 ;; esac done # Validation if [ -z "$TASK_ID" ] || [ -z "$ITERATION" ] || [ -z "$AGENTS" ]; then echo "Error: Missing required parameters" exit 1 fi # Use Redis Coordination skill for wake operations SKILL_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")/.claude/skills/cfn-cfn-.." && pwd)" REDIS_COORD_SKILL="$SKILL_DIR/redis-coordination" echo "Starting Iteration $ITERATION" echo "Agents to wake: $AGENTS" # Convert comma-separated agents to array IFS=',' read -ra AGENT_ARRAY <<< "$AGENTS" # Wake each agent with feedback for agent_id in "${AGENT_ARRAY[@]}"; do # Retrieve agent-specific feedback if feedback source provided using Redis coordination primitive FEEDBACK="" if [ -n "$FEEDBACK_SOURCE" ]; then # Retrieve context from Redis using primitive FEEDBACK_JSON=$("$REDIS_COORD_SKILL/retrieve-context.sh" \ --task-id "$TASK_ID" \ --key "$agent_id" \ --namespace "$FEEDBACK_SOURCE" 2>/dev/null || echo "{}") # Extract feedback message from JSON (try multiple field names) FEEDBACK=$(echo "$FEEDBACK_JSON" | jq -r '.message // .feedback // .data // ""' 2>/dev/null || echo "") fi # Default feedback if none exists if [ -z "$FEEDBACK" ]; then FEEDBACK="Continue iteration $ITERATION with quality improvements" fi echo "Waking $agent_id with feedback: ${FEEDBACK:0:80}..." # Wake agent using Redis Coordination skill "$REDIS_COORD_SKILL/invoke-waiting-mode.sh" wake \ --task-id "$TASK_ID" \ --agent-id "$agent_id" \ --reason "cfn_loop_iteration" \ --iteration "$ITERATION" \ --feedback "$FEEDBACK" || { echo "Warning: Failed to wake $agent_id" } done echo "✅ All agents awakened for iteration $ITERATION" exit 0 ``` --- ## 4. consensus.sh (94 LOC) **Location:** `.claude/skills/cfn-loop-orchestration/helpers/consensus.sh` **Purpose:** Collect and validate Loop 2 consensus scores **Type:** Legacy implementation with Redis coordination calls and Task Mode protection **TS Equivalent:** `src/helpers/consensus.ts` (87 LOC, 14 tests) **Key Features:** - Task Mode detection and blocking (ANTI-023 memory leak protection) - Path resolution bug on line 54 (similar to iteration-manager.sh) - Delegates to Redis coordination skill for consensus collection **Content:** ```bash #!/usr/bin/env bash ############################################################################## # Consensus Checker # Collects and validates Loop 2 consensus scores # # Usage: # consensus.sh --task-id <id> \ # --agents <agent1,agent2,...> \ # --threshold <0.0-1.0> \ # --min-quorum <n|n%|0.n> # # Returns: # Exit 0: Consensus reached # Exit 1: Consensus failed ############################################################################## set -euo pipefail # ⚠️ ANTI-023 MEMORY LEAK PROTECTION: Block Task Mode agents # Task Mode agents spawn via Task() tool and should NOT use Redis coordination if [[ -z "${TASK_ID:-}" || -z "${MIN_QUORUM:-}" ]]; then echo "❌ TASK MODE DETECTED - Consensus coordination forbidden" >&2 echo "🚨 ANTI-023: This script is for CLI-spawned orchestrators only" >&2 echo "💡 Task Mode consensus should be collected directly from agent outputs" >&2 echo "🔧 Coordinator spawned via Task() tool - use direct JSON processing instead" >&2 exit 1 fi # Parameters TASK_ID="" AGENTS="" THRESHOLD="" MIN_QUORUM="" # Parse arguments while [[ $# -gt 0 ]]; do case $1 in --task-id) TASK_ID="$2"; shift 2 ;; --agents) AGENTS="$2"; shift 2 ;; --threshold) THRESHOLD="$2"; shift 2 ;; --min-quorum) MIN_QUORUM="$2"; shift 2 ;; *) echo "Unknown option: $1"; exit 1 ;; esac done # Validation if [ -z "$TASK_ID" ] || [ -z "$AGENTS" ] || [ -z "$THRESHOLD" ] || [ -z "$MIN_QUORUM" ]; then echo "Error: Missing required parameters" exit 1 fi # Use Redis Coordination skill to collect consensus scores SKILL_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")/.claude/skills/cfn-cfn-.." && pwd)" REDIS_COORD_SKILL="$SKILL_DIR/redis-coordination" echo "Consensus Check Configuration:" echo " Task ID: $TASK_ID" echo " Agent IDs: $AGENTS" echo " Min Quorum: $MIN_QUORUM" echo "" # Collect Loop 2 consensus scores CONSENSUS=$("$REDIS_COORD_SKILL/invoke-waiting-mode.sh" collect \ --task-id "$TASK_ID" \ --agent-ids "$AGENTS" \ --min-quorum "$MIN_QUORUM" 2>&1) || { echo "❌ Error: Failed to collect Loop 2 consensus scores" echo " Agent IDs: $AGENTS" echo " Output: $CONSENSUS" exit 1 } # Validate consensus is a valid number if ! [[ "$CONSENSUS" =~ ^[0-9]+\.?[0-9]*$ ]]; then echo "⚠️ WARNING: Invalid consensus value: $CONSENSUS (expected numeric)" echo " Defaulting to 0.0" CONSENSUS="0.0" fi echo "Loop 2 Consensus Check:" echo " Consensus: $CONSENSUS" echo " Threshold: $THRESHOLD" echo " Required: >= $THRESHOLD" # Compare consensus to threshold if (( $(echo "$CONSENSUS >= $THRESHOLD" | bc -l) )); then echo "✅ Consensus REACHED - Loop 2 validation successful" exit 0 else echo "❌ Consensus FAILED - Iteration required" echo " Gap: $(echo "$THRESHOLD - $CONSENSUS" | bc -l)" exit 1 fi ``` --- ## 5. deliverable-verifier.sh (71 LOC) **Location:** `.claude/skills/cfn-loop-orchestration/helpers/deliverable-verifier.sh` **Purpose:** Verify expected deliverables were created (prevents "consensus on vapor" anti-pattern) **Type:** Legacy implementation with git-based file checking **TS Equivalent:** `src/helpers/deliverable-verifier.ts` (107 LOC, 16 tests) **Key Features:** - Git-based change detection - Expected file list validation - Task type keyword-based detection (create, build, implement, add, generate) - Prevents consensus on vapor by enforcing file creation **Content:** ```bash #!/usr/bin/env bash ############################################################################## # Deliverable Verifier # Verifies expected deliverables were created (prevents "consensus on vapor") # # Usage: # deliverable-verifier.sh --expected-files <file1,file2,...> \ # --task-type <keyword-detection> # # Returns: # Exit 0: Deliverables verified # Exit 1: Missing deliverables ############################################################################## set -euo pipefail # Parameters EXPECTED_FILES="" TASK_TYPE="" # Parse arguments while [[ $# -gt 0 ]]; do case $1 in --expected-files) EXPECTED_FILES="$2"; shift 2 ;; --task-type) TASK_TYPE="$2"; shift 2 ;; *) echo "Unknown option: $1"; exit 1 ;; esac done # Check git status for file changes GIT_CHANGES=$(git status --short | wc -l) echo "Deliverable Verification:" echo " Git changes detected: $GIT_CHANGES files" # If expected files specified, check them explicitly if [ -n "$EXPECTED_FILES" ]; then IFS=',' read -ra FILE_ARRAY <<< "$EXPECTED_FILES" MISSING_COUNT=0 for file in "${FILE_ARRAY[@]}"; do if [ -f "$file" ]; then echo " ✅ Found: $file" else echo " ❌ Missing: $file" MISSING_COUNT=$((MISSING_COUNT + 1)) fi done if [ $MISSING_COUNT -gt 0 ]; then echo "❌ Deliverable verification FAILED: $MISSING_COUNT missing files" exit 1 fi fi # Keyword-based task type detection if [ -n "$TASK_TYPE" ]; then if [[ "$TASK_TYPE" =~ (create|build|implement|add|generate) ]]; then # Implementation tasks require file changes if [ $GIT_CHANGES -eq 0 ]; then echo "❌ Implementation task detected but no files created" echo " Task type: $TASK_TYPE" echo " This is 'consensus on vapor' - forcing iteration" exit 1 fi fi fi echo "✅ Deliverable verification PASSED" exit 0 ``` --- ## 6. timeout-calculator.sh (51 LOC) **Location:** `.claude/skills/cfn-loop-orchestration/helpers/timeout-calculator.sh` **Purpose:** Calculate phase-specific timeouts for agent execution **Type:** Legacy implementation with static phase mappings **TS Equivalent:** `src/helpers/timeout-calculator.ts` (41 LOC, 18 tests) **Key Features:** - Phase-specific timeout configuration - Empirical data from Sprint 6 - Default timeout: 60 minutes - Phase-specific overrides: 15-60 minutes **Content:** ```bash #!/usr/bin/env bash ############################################################################## # Timeout Calculator # Calculates phase-specific timeouts for agent execution # # Usage: # timeout-calculator.sh --phase-id <phase-identifier> # # Returns: # Timeout value in seconds (stdout) ############################################################################## set -euo pipefail # Parameters PHASE_ID="" DEFAULT_TIMEOUT=3600 # 60 minutes # Parse arguments while [[ $# -gt 0 ]]; do case $1 in --phase-id) PHASE_ID="$2"; shift 2 ;; *) echo "Unknown option: $1"; exit 1 ;; esac done # Phase-specific timeout configuration # Based on empirical data from Sprint 6 case "$PHASE_ID" in phase-1) # Backend work - relatively fast echo 900 # 15 minutes ;; phase-2) # React components - more complex echo 3600 # 60 minutes ;; phase-3) # Advanced components - complex echo 3600 # 60 minutes ;; phase-4) # Testing/integration - moderate echo 1800 # 30 minutes ;; *) # Unknown phase - use default echo $DEFAULT_TIMEOUT ;; esac ``` --- ## Migration Summary ### TypeScript Equivalents (All Compiled & Tested) | Shell Script | TypeScript Source | Compiled Version | Test File | Tests | |---|---|---|---|---| | parse-test-results.sh | src/helpers/parse-test-results.ts | dist/helpers/parse-test-results.js | tests/parse-test-results.test.ts | 26 | | gate-check.sh | src/helpers/gate-check.ts | dist/helpers/gate-check.js | tests/gate-check.test.ts | 28 | | iteration-manager.sh | src/helpers/iteration-manager.ts | dist/helpers/iteration-manager.js | tests/iteration-manager.test.ts | 12 | | consensus.sh | src/helpers/consensus.ts | dist/helpers/consensus.js | tests/consensus.test.ts | 14 | | deliverable-verifier.sh | src/helpers/deliverable-verifier.ts | dist/helpers/deliverable-verifier.js | tests/deliverable-verifier.test.ts | 16 | | timeout-calculator.sh | src/helpers/timeout-calculator.ts | dist/helpers/timeout-calculator.js | tests/timeout-calculator.test.ts | 18 | **Total Test Coverage:** 114 tests across 6 test files ### References in Codebase - SKILL.md (documentation only - references are descriptive, not functional) - orchestrate-enhanced.sh (references compiled `.js` versions, not shell scripts) - Documentation files (descriptive references only) **Active Code References:** 0 (only in documentation and enhanced orchestrator which uses compiled TS) --- ## Safety Verification **Pre-Deletion Checklist:** - [x] All TypeScript equivalents compiled (dist/ verified) - [x] All test files present and passing (114 tests) - [x] No active code references to shell scripts - [x] SKILL.md documents deprecation - [x] Backup document created (this file) - [x] Path resolution bugs documented (iteration-manager.sh, consensus.sh) - [x] Task Mode protection noted (consensus.sh ANTI-023) **Deletion is safe.** --- ## Removal Date 2025-11-20 (this backup file) **Archives:** - Shell script sources preserved in this document - Original locations: `.claude/skills/cfn-loop-orchestration/helpers/`