Files
cleveragents-core/examples/actors/graph_workflow.yaml
T
aditya e476d2de0e feat(actor): extend hierarchical actor YAML schema and loader
Extend actor YAML schema to support hierarchical graphs with explicit
node types (agent, tool, conditional, subgraph), per-node LSP bindings
(lsp_binding with server, languages, auto, capabilities), and tool-source
references (skills, mcp_servers, agent_skills).

Add schema validation for namespaced actor references, duplicate node IDs,
edge target existence, and graph reachability — all nodes must be reachable
from entry_node via explicit edges or conditional node routing targets.

Update loader to report YAML parse errors with precise line/column positions
and schema validation errors with dotted field paths and remediation hints
pointing to docs/reference/actor_config.md.

Add docs/reference/actor_config.md as the practical configuration reference
covering hierarchical graph examples, node type table, topology rules, and
common error cases with fix guidance.

Refresh examples/actors/graph_workflow.yaml to replace deprecated actor_path
with actor_ref. Add benchmarks/actor_yaml_bench.py for schema load overhead.

Tests: 95 Behave scenarios, 10 Robot smoke tests (including hierarchical
loader smoke test), security scan clean, coverage 99% (threshold 97%).

ISSUES CLOSED: #157
2026-02-25 10:30:42 +00:00

215 lines
5.7 KiB
YAML

# Graph Actor - Test-Driven Development Workflow
# Demonstrates a multi-node graph with conditional routing and subgraphs
name: workflows/test_driven_dev
type: graph
description: Test-driven development workflow with automated testing and feedback loops
version: "1.0"
# LLM model for agent nodes
model: gpt-4
# Graph topology
route:
# Define all nodes in the workflow
nodes:
# Entry point: planning agent
- id: planner
type: agent
name: Test Planner
description: Plans test cases based on requirements
config:
model: gpt-4
prompt: |
You are a test planning expert. Analyze the requirements and create
a comprehensive test plan covering:
- Unit tests for individual functions
- Integration tests for component interactions
- Edge cases and error conditions
tools:
- files/read_file
- files/list_directory
# Write tests first
- id: test_writer
type: agent
name: Test Writer
description: Writes test cases based on the plan
config:
model: gpt-4
prompt: |
You are a test writing expert. Write pytest tests based on the plan.
Follow best practices:
- Use descriptive test names
- Include docstrings
- Use fixtures appropriately
- Test one thing per test
tools:
- files/write_file
- files/read_file
# Run the tests (should fail initially)
- id: run_tests
type: tool
name: Test Runner
description: Executes pytest test suite
config:
tool_name: testing/run_pytest
parameters:
verbose: true
coverage: true
# Check test results
- id: check_results
type: conditional
name: Test Result Checker
description: Routes based on test pass/fail status
config:
conditions:
- check: "state.get('tests_passed') == True"
route_to: code_review
- check: "state.get('tests_passed') == False"
route_to: implementation_writer
# Write implementation to make tests pass
- id: implementation_writer
type: agent
name: Implementation Writer
description: Writes code to make the tests pass
config:
model: gpt-4
prompt: |
You are an implementation expert. Write clean, well-documented code
that makes the failing tests pass. Follow SOLID principles and
write maintainable code.
tools:
- files/write_file
- files/read_file
# Run tests again after implementation
- id: rerun_tests
type: tool
name: Test Rerunner
description: Re-executes tests after implementation
config:
tool_name: testing/run_pytest
parameters:
verbose: true
coverage: true
# Check if tests pass now
- id: verify_tests
type: conditional
name: Test Verification
description: Verify tests pass after implementation
config:
conditions:
- check: "state.get('tests_passed') == True"
route_to: code_review
- check: "state.get('tests_passed') == False and state.get('retry_count', 0) < 3"
route_to: debug_failures
- check: "state.get('tests_passed') == False and state.get('retry_count', 0) >= 3"
route_to: escalate
# Debug test failures
- id: debug_failures
type: agent
name: Debugger
description: Analyzes and fixes test failures
config:
model: gpt-4
prompt: |
You are a debugging expert. Analyze the test failures and fix the
implementation. Look for:
- Logic errors
- Edge cases
- Type mismatches
- Missing error handling
tools:
- files/read_file
- files/write_file
# Code review (subgraph)
- id: code_review
type: subgraph
name: Code Reviewer
description: Runs code review workflow
actor_ref: local/code-reviewer
# Escalate if tests keep failing
- id: escalate
type: tool
name: Escalation Handler
description: Escalates persistent failures to human
config:
tool_name: notifications/send_alert
parameters:
channel: engineering
priority: high
# Define edges (workflow transitions)
edges:
# Linear flow from planner to test writer
- from_node: planner
to_node: test_writer
# Run tests after writing them
- from_node: test_writer
to_node: run_tests
# Check results after running tests
- from_node: run_tests
to_node: check_results
# Conditional routing from check_results
# (handled by the conditional node itself)
# Write implementation if tests fail
- from_node: implementation_writer
to_node: rerun_tests
# Verify tests after rerunning
- from_node: rerun_tests
to_node: verify_tests
# Debug if tests still fail
- from_node: debug_failures
to_node: rerun_tests
# All paths eventually lead to code review or escalation
# (handled by conditional nodes)
# Entry and exit points
entry_node: planner
exit_nodes:
- code_review
- escalate
# Context settings
context_view: strategist
memory:
enabled: true
max_messages: 100
max_tokens: 16000
summarize_old: true
context:
include_files:
- "README.md"
- "requirements.txt"
- "pyproject.toml"
include_dirs:
- "src/"
- "tests/"
exclude_patterns:
- "**/__pycache__/**"
- "*.pyc"
- "**/.pytest_cache/**"
- "**/htmlcov/**"
max_context_tokens: 32000
# Environment variables
env_vars:
PYTEST_ARGS: --verbose --cov --cov-report=html
MAX_RETRIES: "3"