* feat(agents): implement category-based agent organization system - Organize agents into domain categories (core, development, content, data, product, learning) - Move 10 agents to category subdirectories with proper git rename tracking - Update 13 subagents with category and type metadata in frontmatter - Add category metadata files (0-category.json) documenting common patterns - Implement local registry fallback in install script for offline development - Add comprehensive validation suite with 15 automated tests (100% pass rate) - Enhance registry validation with duplicate ID and consistency checks - Update eval framework with intelligent path resolution (backward compatible) - Archive legacy eval structure to _archive/ for reference - Update all documentation to reflect category-based structure - Bump version to 0.5.0 with accurate CHANGELOG Technical Details: - 23 agents organized (10 category agents, 13 subagents) - 6 category directories created - Path resolution supports both agent IDs and category paths - Registry schema updated to v2.0.0 - 159 files changed, 872 insertions(+), 10738 deletions(-) BREAKING CHANGE: Agent file paths now use category structure. Update references from .opencode/agent/openagent.md to .opencode/agent/core/openagent.md. Eval framework maintains backward compatibility via path resolution. * refactor(evals): consolidate documentation and enhance test infrastructure - Remove temporary project tracking files (PHASE_5_COMPLETE, PROJECT_COMPLETE, etc.) - Consolidate evaluation framework docs into main README - Enhance test execution with improved logging and multi-prompt support - Move system-builder from core to meta category - Add comprehensive test suites for openagent with organized structure - Create evaluation test structure for all subagents - Clean up archived workflows and redundant documentation - Update registry to reflect new agent organization - Add shared test templates and golden test patterns * feat(ci): add manual trigger support for bot-created PRs in validate-registry workflow - Add pr_number input to workflow_dispatch for manually triggering validation - Fetch PR details dynamically when triggered manually - Support both automatic (PR event) and manual (workflow_dispatch) triggers - Enable validation of bot-created PRs like automated version bumps - Update branch detection and push logic to handle both trigger types - Add documentation explaining how to manually trigger for bot PRs * feat(evals): add explicit context file validation to test framework - Add expectedContextFiles field to test YAML schema for explicit context file specification - Enhance context-loading-evaluator to support both auto-detect and explicit validation modes - Update documentation with comprehensive guide and examples - Clean up archived legacy test structure (90+ old test files) - Add new example tests demonstrating explicit context validation - Backward compatible with existing tests * feat(evals): add multi-agent logging system and performance optimizations Implement comprehensive multi-agent logging and performance improvements for the eval framework. Task 01: Multi-Agent Logging System - Add complete hierarchical logging module (evals/framework/src/logging/) - SessionTracker: tracks parent-child delegation hierarchies - MultiAgentLogger: pretty-prints logs with visual indentation - Formatters: box characters and emoji formatting - 37 passing unit tests (session-tracker, logger, integration) - Integrate with SDK event stream handler - Hook into session.created, message.updated, message.part.updated events - Real-time child session detection via timestamp heuristics - Message deduplication for cleaner output - Enable in debug mode only (<1% performance overhead) - Add demo script and comprehensive documentation Task 02: Performance Optimizations - Reduce grace period from 5s to 2s (67% reduction, 10-20% faster tests) - Add PerformanceMetricsEvaluator for bottleneck identification - Collects tool latencies, inference time, idle time - Provides full performance visibility - Update smoke test to validate delegation (core feature) - Replace simple read test with multi-agent delegation test - Tests both parent and child agent functionality - Validates multi-agent logging system Results: - 37 unit tests passing - Smoke test passing (95/100 score) - Clean hierarchical logging output - 10-20% faster test execution - Full multi-agent visibility Files changed: 16 files, +2678 lines Time saved: ~6-8 days (completed in 6 hours vs 3-5 day estimate) * feat(evals): show child agent execution in non-debug mode - Enable MultiAgentLogger in both debug and non-debug modes - Add verbose parameter to control output level - Non-verbose mode shows concise child session lifecycle: - Child agent started message - Child agent completed with duration - Verbose mode (--debug) shows full delegation hierarchy - Update documentation to reflect new behavior This provides visibility into delegation without overwhelming output, giving confidence that child agents are actually running. * feat(evals): improve delegation testing and behavior validation Major improvements to eval framework: Test Suite: - Add 00-smoke-test.yaml (basic read operation) - Rename 01-smoke-test.yaml → 02-delegation-test.yaml (delegation test) - Add simple-responder test agent for delegation testing - Add debug test: simple-subagent-call.yaml Evaluators: - Add agent-model-evaluator.ts for agent/model validation - Enhance behavior-evaluator.ts with detailed task tool output - Improve delegation-evaluator.ts with better evidence tracking Schema & Execution: - Add expectedAgent and expectedModel to test schema - Improve test executor with better logging and error handling Documentation: - Update evals/README.md with new features and performance improvements - Remove outdated MULTI_AGENT_LOGGING_COMPLETE.md Registry: - Add simple-responder test agent to registry Fixes: - Fix dashboard.sh path resolution These changes provide better visibility into delegation, improved test coverage, and clearer validation of agent behavior. * chore: add GitHub Actions workflow and plugin documentation - Add .github/workflows/evals/run-evaluations.yml for automated eval testing - Add dev/ai-tools/opencode/plugins/Plugin-inspiration.md for plugin development reference
6.4 KiB
6.4 KiB
Subagent Testing Guide
Quick reference for testing subagents with the evaluation framework.
🎯 Two Testing Modes
1. Standalone Mode (Default)
Tests the subagent directly by forcing mode: primary.
# CLI
npm run eval:sdk -- --subagent=coder-agent
# Makefile
make test-subagent SUBAGENT=coder-agent
What happens:
- ✅ Subagent runs as primary agent (mode override)
- ✅ Tests subagent logic in isolation
- ⚠️ Not how it runs in production (production uses
mode: subagent)
Use when:
- Debugging subagent behavior
- Testing subagent logic independently
- Developing new subagents
2. Delegation Mode
Tests the subagent via its parent agent (real-world usage).
# CLI
npm run eval:sdk -- --subagent=coder-agent --delegate
# Makefile
make test-subagent-delegate SUBAGENT=coder-agent
What happens:
- ✅ Parent agent delegates to subagent
- ✅ Tests real production workflow
- ✅ Validates delegation logic
Use when:
- Testing production workflows
- Validating delegation patterns
- Integration testing
📋 Available Subagents
Code Subagents (Parent: opencoder)
--subagent=coder-agent # Simple task executor
--subagent=tester # Test authoring
--subagent=reviewer # Code review
--subagent=build-agent # Type check & build
--subagent=codebase-pattern-analyst # Pattern analysis
Core Subagents (Parent: openagent)
--subagent=task-manager # Feature breakdown
--subagent=documentation # Doc generation
--subagent=context-retriever # Context search
System-Builder Subagents (Parent: system-builder)
--subagent=agent-generator # Agent creation
--subagent=command-creator # Command creation
--subagent=context-organizer # Context organization
--subagent=domain-analyzer # Domain analysis
--subagent=workflow-designer # Workflow design
Utils Subagents (Parent: openagent)
--subagent=image-specialist # Image editing
🚀 Quick Examples
Test coder-agent standalone
# With npm
npm run eval:sdk -- --subagent=coder-agent --pattern="**/smoke-test.yaml"
# With make
make test-subagent SUBAGENT=coder-agent
Test coder-agent via opencoder delegation
# With npm
npm run eval:sdk -- --subagent=coder-agent --delegate --verbose
# With make
make test-subagent-delegate SUBAGENT=coder-agent
Test with specific model
npm run eval:sdk -- --subagent=tester --model=anthropic/claude-3-5-sonnet-20241022
Debug with verbose output
npm run eval:sdk -- --subagent=reviewer --verbose --debug
📊 Output Examples
Standalone Mode
⚡ Standalone Test Mode
Subagent: coder-agent
Mode: Forced to 'primary' for direct testing
Note: In production, this subagent runs as 'mode: subagent'
Starting test runner...
[TestRunner] Forced mode: primary for standalone subagent testing
✅ Test runner started
Delegation Mode
🔗 Delegation Test Mode
Subagent: coder-agent
Parent: opencoder
Tests will verify delegation from opencoder → coder-agent
Starting test runner...
✅ Test runner started
❌ Error Handling
Unknown Subagent
$ npm run eval:sdk -- --subagent=unknown-agent
❌ Error: Unknown subagent 'unknown-agent'
📋 Available subagents:
Code subagents (parent: opencoder):
- coder-agent, tester, reviewer, build-agent, codebase-pattern-analyst
Core subagents (parent: openagent):
- task-manager, documentation, context-retriever
System-builder subagents (parent: system-builder):
- agent-generator, command-creator, context-organizer
- domain-analyzer, workflow-designer
Utils subagents (parent: openagent):
- image-specialist
Invalid Flag Combination
$ npm run eval:sdk -- --agent=openagent --subagent=coder-agent --delegate
❌ Error: Cannot use --delegate with --agent
Use either:
--subagent=NAME (standalone mode)
--subagent=NAME --delegate (delegation mode)
--agent=NAME (main agent)
Agent File Not Found
$ npm run eval:sdk -- --subagent=missing-agent
❌ Error: Agent file not found: .opencode/agent/subagents/code/missing-agent.md
Available agents: openagent, opencoder, coder-agent, tester, ...
🧪 Creating Subagent Tests
Directory Structure
evals/agents/subagents/
└── coder-agent/
└── tests/
├── standalone/ # For --subagent mode
│ ├── 01-simple-task.yaml
│ └── 02-error-handling.yaml
└── delegation/ # For --subagent --delegate mode
├── 01-opencoder-delegates.yaml
└── 02-task-completion.yaml
Standalone Test Example
id: coder-standalone-01
name: Coder Agent - Simple Function Creation
description: Test coder-agent creates a simple function
prompts:
- text: |
Create a simple add function in src/utils/math.ts
behavior:
mustUseTools: [write]
requiresApproval: true
expectedViolations:
- rule: approval-gate
shouldViolate: false
Delegation Test Example
id: coder-delegation-01
name: OpenCoder Delegates to Coder Agent
description: Test opencoder correctly delegates to coder-agent
prompts:
- text: |
Create a simple utility function.
This is a simple task, delegate it to @coder-agent.
behavior:
mustUseTools: [task] # Must delegate
requiresApproval: true
expectedViolations:
- rule: delegation
shouldViolate: false
💡 Best Practices
- Start with standalone mode for quick iteration
- Use delegation mode for production validation
- Test both modes for comprehensive coverage
- Use --verbose when debugging
- Check parent agent matches your use case
🔧 Troubleshooting
Subagent doesn't respond
- ✅ Check mode was forced to primary (standalone mode)
- ✅ Verify agent file exists
- ✅ Check OpenCode server logs with --debug
Delegation not working
- ✅ Verify parent agent is correct
- ✅ Check delegation syntax in test prompt
- ✅ Use --verbose to see full conversation
Tests failing unexpectedly
- ✅ Run with --verbose to see full output
- ✅ Check evaluator violations
- ✅ Verify test expectations match mode
Questions? See evals/README.md or open an issue.