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.

526 lines (407 loc) 15 kB
# TDD Conversation Coordinator Iterative Test-Driven Development with Cerebras LLM and conversation memory for error recovery. ## Overview This coordinator implements a complete TDD workflow (Red-Green-Refactor) with: - **Conversation Memory**: Full history tracked across iterations for context-aware fixes - **Context Gathering**: RuVector pattern queries + explicit context files - **Iterative Refinement**: Failed tests trigger fix loops with error context - **Success Logging**: Successful patterns indexed to RuVector for learning ## Workflow Phases ### Phase 1: Context Gathering - Query RuVector for similar patterns in codebase - Load explicit context files (types, utilities, related code) - Store context in conversation metadata ### Phase 2: RED - Generate Tests - Cerebras generates comprehensive failing tests - Uses Given/When/Then structure - Covers happy path and edge cases - Framework-appropriate (Jest, pytest, Go testing, etc.) ### Phase 3: RED - Verify Failure - Run tests to ensure they fail (no implementation exists) - Validates Red phase before proceeding ### Phase 4: GREEN - Generate Implementation - Cerebras generates minimal implementation - Guided by test requirements - Follows patterns from context ### Phase 5: GREEN - Verify Pass - Run tests to check if implementation works - If pass: success, log to RuVector - If fail: enter fix loop ### Phase 6: FIX - Iterative Refinement - Send full error output + conversation history to Cerebras - Cerebras analyzes previous attempts and errors - Generates fixed implementation - Repeat until tests pass or max iterations reached ### Phase 7: Success Logging - Index successful pattern to RuVector - Save full conversation JSON for learning - Store in `conversations/` directory ## Usage ### Basic Example ```bash ./.claude/skills/cfn-cerebras-coordinator/tdd-conversation-coordinator.sh \ --agent-id tdd-001 \ --feature "Email validation function" \ --file ./src/validators/email.ts \ --test-command "npm test email.test.ts" \ --max-iterations 5 ``` ### With Context Files ```bash ./.claude/skills/cfn-cerebras-coordinator/tdd-conversation-coordinator.sh \ --agent-id tdd-002 \ --feature "User authentication with JWT" \ --file ./src/auth/jwt-validator.ts \ --test-command "npm test jwt-validator.test.ts" \ --context "./src/auth/types.ts,./src/utils/crypto.ts,./src/config/jwt.ts" \ --max-iterations 3 \ --verbose ``` ### Python Example ```bash ./.claude/skills/cfn-cerebras-coordinator/tdd-conversation-coordinator.sh \ --agent-id tdd-003 \ --feature "Data sanitization for SQL injection prevention" \ --file ./src/sanitizers/sql.py \ --test-command "pytest test_sql.py -v" \ --context "./src/types.py,./src/database/connection.py" \ --max-iterations 5 ``` ### Go Example ```bash ./.claude/skills/cfn-cerebras-coordinator/tdd-conversation-coordinator.sh \ --agent-id tdd-004 \ --feature "Rate limiter with token bucket algorithm" \ --file ./pkg/limiter/rate_limiter.go \ --test-command "go test -v ./pkg/limiter/..." \ --context "./pkg/limiter/types.go,./pkg/config/limits.go" \ --max-iterations 5 ``` ## Arguments ### Required - `--agent-id ID` - Unique agent identifier for tracking - `--feature DESCRIPTION` - Clear description of feature to implement - `--file PATH` - Target implementation file path - `--test-command CMD` - Shell command to run tests ### Optional - `--context FILES` - Comma-separated list of context file paths - `--max-iterations N` - Maximum fix iterations (default: 5) - `--verbose` - Enable detailed logging - `--help` - Show usage information ## Environment Variables ### Required - `CEREBRAS_API_KEY` - API key for Cerebras Cloud SDK access - **Auto-loaded by SessionStart hook**: The `.claude/hooks/cfn-load-cerebras-env.sh` hook automatically checks for this variable at session start - Can be set via: `export CEREBRAS_API_KEY=your_key` or in project root `.env` file - Hook will warn if not found and provide setup instructions ### Optional - `CEREBRAS_MODEL` - Model name (default: `zai-glm-4.6`) - Recommended: `zai-glm-4.6` for fast code generation - Alternative: `llama3.1-70b` for complex reasoning - `MAX_TDD_ITERATIONS` - Default max iterations (default: 5) - `RUVECTOR_INDEX_PATH` - RuVector index location (default: `./.claude/skills/cfn-local-ruvector-accelerator`) ### SessionStart Hook Integration The SessionStart hook (`.claude/hooks/cfn-load-cerebras-env.sh`) runs automatically when you start a Claude Code session: 1. **Checks** if `CEREBRAS_API_KEY` is already set in your shell environment 2. **If not found**, attempts to load from `.env` file in project root 3. **Outputs** confirmation message: `"Cerebras API configured: model=zai-glm-4.6, key=22f73578***"` 4. **Or warns** if API key is missing with setup instructions **To set up your API key:** ```bash # Option 1: Export in shell (temporary, session-only) export CEREBRAS_API_KEY=your_api_key_here # Option 2: Add to project .env file (persistent) echo "CEREBRAS_API_KEY=your_api_key_here" >> .env echo "CEREBRAS_MODEL=zai-glm-4.6" >> .env # Option 3: Add to shell profile (global, all sessions) echo 'export CEREBRAS_API_KEY=your_api_key_here' >> ~/.bashrc source ~/.bashrc ``` ## Conversation Memory Format Each TDD session creates a JSON file with full conversation history: ```json { "messages": [ { "role": "system", "content": "You are a TDD expert...", "timestamp": "2025-12-10T10:30:00Z" }, { "role": "user", "content": "# TDD Red Phase: Write Failing Tests...", "timestamp": "2025-12-10T10:30:05Z" }, { "role": "assistant", "content": "describe('EmailValidator', () => { ... })", "timestamp": "2025-12-10T10:30:12Z" } ], "metadata": { "agent_id": "tdd-001", "feature": "Email validation function", "file_path": "./src/validators/email.ts", "test_file": "./src/validators/email.test.ts", "started_at": "2025-12-10T10:30:00Z", "completed_at": "2025-12-10T10:35:42Z", "iterations": 2, "phase": "success", "context_files_count": 1, "patterns_found": 3 } } ``` ## Test File Path Detection The coordinator automatically determines test file paths based on language: | Language | Implementation | Test File | |----------|---------------|-----------| | TypeScript | `src/auth.ts` | `src/auth.test.ts` | | JavaScript | `src/utils.js` | `src/utils.test.js` | | Python | `src/validator.py` | `src/test_validator.py` | | Go | `pkg/handler.go` | `pkg/handler_test.go` | | Other | `path/file.ext` | `path/file.test.ext` | ## Integration with RuVector ### Query Phase (Phase 1) ```bash # Queries RuVector for similar patterns ./.claude/skills/cfn-local-ruvector-accelerator/query-local.sh \ --pattern "Email validation function" \ --limit 3 ``` ### Success Phase (Phase 7) ```bash # Indexes successful implementation ./.claude/skills/cfn-local-ruvector-accelerator/index-code.sh \ --path ./src/validators/email.ts \ --source tdd-cerebras \ --success true ``` ## Error Recovery The conversation memory enables sophisticated error recovery: ### Iteration 1 Failure ``` Tests failed: - Expected valid email to return true - Got false instead ``` ### Cerebras Response (with full context) - Reviews original requirements - Analyzes previous implementation attempt - Identifies regex pattern issue - Generates fix addressing specific failure ### Iteration 2 Failure ``` Tests failed: - Handling of edge case emails (plus signs) ``` ### Cerebras Response (with even more context) - Reviews both previous attempts - Sees pattern of regex issues - Generates more robust regex - Tests pass on iteration 3 ## Output Files ### During Execution - `/tmp/cerebras-tdd-{agent-id}-{timestamp}.json` - Active conversation - `{implementation-file}` - Generated implementation - `{test-file}` - Generated tests ### After Success - `./.claude/skills/cfn-cerebras-coordinator/conversations/{date}-{agent-id}.json` - Saved conversation - RuVector index updated with successful pattern ## Best Practices ### 1. Provide Rich Context ```bash # Good - includes related types and utilities --context "./src/types.ts,./src/utils/validation.ts" # Less helpful - no context # (Cerebras may generate code incompatible with existing patterns) ``` ### 2. Use Descriptive Features ```bash # Good - specific and testable --feature "JWT token validator that checks signature, expiration, and issuer" # Less helpful - too vague --feature "JWT stuff" ``` ### 3. Set Appropriate Iterations ```bash # Simple function --max-iterations 3 # Complex algorithm --max-iterations 5 # Critical security code --max-iterations 7 ``` ### 4. Use Verbose Mode for Debugging ```bash # Enable verbose logging --verbose # Check conversation file during execution cat /tmp/cerebras-tdd-*.json | jq '.messages[-1]' ``` ### 5. Learn from Conversations ```bash # Review successful patterns find ./.claude/skills/cfn-cerebras-coordinator/conversations/ \ -name "*.json" \ -exec jq '.metadata | {feature, iterations, completed_at}' {} \; # Extract lessons jq '.messages[] | select(.role == "assistant") | .content' \ conversations/20251210-tdd-001.json ``` ## Troubleshooting ### Tests Don't Fail in Red Phase **Symptom**: Red phase validation fails because tests pass unexpectedly **Causes**: - Implementation already exists at target path - Test file path detection incorrect - Test command not isolated **Solutions**: ```bash # Remove existing implementation rm ./src/validators/email.ts # Check test file path --verbose # Shows detected test file path # Isolate test command --test-command "npm test -- email.test.ts --testPathPattern=email" ``` ### API Errors **Symptom**: `API returned HTTP 401` or similar **Causes**: - Missing or invalid `ZAI_API_KEY` - Incorrect `ZAI_BASE_URL` - Network issues **Solutions**: ```bash # Verify API key echo $ZAI_API_KEY # Test API directly curl -H "Authorization: Bearer $ZAI_API_KEY" \ ${ZAI_BASE_URL}/models # Check network curl -I https://api.zai.ai ``` ### Max Iterations Reached **Symptom**: Script exits after N iterations without passing tests **Causes**: - Feature too complex for current context - Test command incorrect - Implementation fundamentally flawed **Solutions**: ```bash # Review conversation for patterns cat /tmp/cerebras-tdd-*.json | jq '.messages[] | select(.role == "user") | .content' | tail -20 # Add more context files --context "./src/types.ts,./src/utils/*.ts,./docs/patterns.md" # Simplify feature scope # Instead of: "Complete authentication system" # Try: "JWT signature validation only" # Increase iterations cautiously --max-iterations 10 # May indicate deeper issues ``` ### RuVector Integration Issues **Symptom**: Context gathering or success logging fails **Causes**: - RuVector index not initialized - Incorrect `RUVECTOR_INDEX_PATH` - Permission issues **Solutions**: ```bash # Check RuVector installation ls -la ./.claude/skills/cfn-local-ruvector-accelerator/ # Initialize index if needed ./.claude/skills/cfn-local-ruvector-accelerator/initialize-index.sh # Set custom path export RUVECTOR_INDEX_PATH="/path/to/ruvector" ``` ## Testing Run the test suite: ```bash ./.claude/skills/cfn-cerebras-coordinator/test-tdd-coordinator.sh ``` Tests validate: - Argument parsing and validation - Conversation file structure - Test file path generation logic - Error handling ## Integration with CFN Agents ### Spawn from Agent ```javascript Task("backend-dev", ` Use TDD coordinator to implement feature: ./.claude/skills/cfn-cerebras-coordinator/tdd-conversation-coordinator.sh \\ --agent-id tdd-${Date.now()} \\ --feature "Rate limiter with token bucket" \\ --file ./src/middleware/rate-limiter.ts \\ --test-command "npm test rate-limiter.test.ts" \\ --context "./src/types.ts,./src/config/rate-limits.ts" \\ --max-iterations 5 \\ --verbose After completion: 1. Review generated tests and implementation 2. Run full test suite 3. Report confidence and next steps `) ``` ### CLI Loop Integration ```bash # From CFN Loop CLI coordinator AGENT_ID="tdd-backend-$(date +%s)" ./.claude/skills/cfn-cerebras-coordinator/tdd-conversation-coordinator.sh \ --agent-id "$AGENT_ID" \ --feature "$FEATURE_DESCRIPTION" \ --file "$TARGET_FILE" \ --test-command "$TEST_CMD" \ --context "$CONTEXT_FILES" \ --max-iterations "${MAX_ITERATIONS:-5}" # Check exit code if [[ $? -eq 0 ]]; then echo "TDD cycle completed successfully" # Proceed with Loop 3 validation else echo "TDD cycle failed after max iterations" # Trigger iteration or escalation fi ``` ## Performance Characteristics ### Typical Execution Times | Complexity | Iterations | Duration | Cost Estimate | |------------|-----------|----------|---------------| | Simple validator | 1-2 | 30-60s | ~$0.02-0.05 | | Medium algorithm | 2-3 | 60-120s | ~$0.05-0.10 | | Complex feature | 3-5 | 120-300s | ~$0.10-0.25 | ### Token Usage - Context gathering: 500-2000 tokens - Test generation: 1000-3000 tokens - Implementation: 1000-4000 tokens - Fix iteration: 2000-5000 tokens (includes history) ### Cost Optimization ```bash # Reduce context size --context "./src/types.ts" # Only essential files # Lower max iterations --max-iterations 3 # Use cheaper model if available export ZAI_MODEL="glm-4.6" # vs more expensive alternatives ``` ## Future Enhancements ### Planned Features - [ ] Parallel test generation (multiple test suites) - [ ] Incremental test addition (add tests to existing suite) - [ ] Refactor phase after Green (Red-Green-Refactor complete) - [ ] Performance benchmarking integration - [ ] Security vulnerability scanning - [ ] Code coverage analysis and gap filling ### Experimental Ideas - Adaptive iteration limits based on complexity - Multi-agent collaboration (separate test writer and implementer) - Learning rate optimization (adjust based on past success) - Automated context file discovery via import analysis ## References - [Test-Driven Development](https://en.wikipedia.org/wiki/Test-driven_development) - [Given-When-Then](https://martinfowler.com/bliki/GivenWhenThen.html) - [RuVector Semantic Search](..//cfn-local-ruvector-accelerator/README.md) - [CFN Agent Spawning](../cfn-agent-spawning/SKILL.md) - [Project Tests Guide](../../../tests/CLAUDE.md) ## License Part of Claude Flow Novice (CFN) framework. See project LICENSE.