feat: Add GUI automation client and test workflow generator
- Implemented GuiAutomationClient for gRPC communication with the test harness. - Added methods for various GUI actions: Click, Type, Wait, Assert, and Screenshot. - Created TestWorkflowGenerator to convert natural language prompts into structured test workflows. - Enhanced HandleTestCommand to support new command-line arguments for GUI automation. - Updated CMakeLists.txt to include new source files for GUI automation and workflow generation.
This commit is contained in:
345
docs/z3ed/IMPLEMENTATION_PROGRESS_OCT2.md
Normal file
345
docs/z3ed/IMPLEMENTATION_PROGRESS_OCT2.md
Normal file
@@ -0,0 +1,345 @@
|
||||
# z3ed Implementation Progress - October 2, 2025
|
||||
|
||||
**Date**: October 2, 2025
|
||||
**Status**: Priority 2 Implementation Complete ✅
|
||||
**Next Action**: Execute E2E Validation (Priority 1)
|
||||
|
||||
## Summary
|
||||
|
||||
Today's work completed the **Priority 2: CLI Agent Test Command (IT-02)** implementation, which enables natural language-driven GUI automation. This was implemented alongside preparing comprehensive validation procedures for Priority 1.
|
||||
|
||||
## What Was Implemented
|
||||
|
||||
### 1. GuiAutomationClient (gRPC Wrapper) ✅
|
||||
|
||||
**Files Created**:
|
||||
- `src/cli/service/gui_automation_client.h`
|
||||
- `src/cli/service/gui_automation_client.cc`
|
||||
|
||||
**Features**:
|
||||
- Full gRPC client for ImGuiTestHarness service
|
||||
- Wrapped all 6 RPC methods (Ping, Click, Type, Wait, Assert, Screenshot)
|
||||
- Type-safe C++ API with proper error handling
|
||||
- Connection management with health checks
|
||||
- Conditional compilation for YAZE_WITH_GRPC
|
||||
|
||||
**Example Usage**:
|
||||
```cpp
|
||||
GuiAutomationClient client("localhost:50052");
|
||||
RETURN_IF_ERROR(client.Connect());
|
||||
|
||||
auto result = client.Click("button:Overworld", ClickType::kLeft);
|
||||
if (!result.ok()) return result.status();
|
||||
|
||||
std::cout << "Clicked in " << result->execution_time.count() << "ms\n";
|
||||
```
|
||||
|
||||
### 2. TestWorkflowGenerator (Natural Language Parser) ✅
|
||||
|
||||
**Files Created**:
|
||||
- `src/cli/service/test_workflow_generator.h`
|
||||
- `src/cli/service/test_workflow_generator.cc`
|
||||
|
||||
**Features**:
|
||||
- Pattern matching for common GUI test scenarios
|
||||
- Converts natural language to structured test steps
|
||||
- Extensible pattern system for new prompt types
|
||||
- Helpful error messages with suggestions
|
||||
|
||||
**Supported Patterns**:
|
||||
1. **Open Editor**: "Open Overworld editor"
|
||||
- Click button → Wait for window
|
||||
2. **Open and Verify**: "Open Dungeon editor and verify it loads"
|
||||
- Click button → Wait for window → Assert visible
|
||||
3. **Type Input**: "Type 'zelda3.sfc' in filename input"
|
||||
- Click input → Type text with clear_first
|
||||
4. **Click Button**: "Click Open ROM button"
|
||||
- Single click action
|
||||
|
||||
**Example Usage**:
|
||||
```cpp
|
||||
TestWorkflowGenerator generator;
|
||||
auto workflow = generator.GenerateWorkflow("Open Overworld editor");
|
||||
|
||||
// Returns:
|
||||
// Workflow: Open Overworld Editor
|
||||
// 1. Click(button:Overworld)
|
||||
// 2. Wait(window_visible:Overworld Editor, 5000ms)
|
||||
```
|
||||
|
||||
### 3. Enhanced Agent Handler ✅
|
||||
|
||||
**Files Modified**:
|
||||
- `src/cli/handlers/agent.cc` (added includes, replaced HandleTestCommand)
|
||||
|
||||
**New Implementation**:
|
||||
- Parses `--prompt`, `--host`, `--port`, `--timeout` flags
|
||||
- Generates workflow from natural language prompt
|
||||
- Connects to test harness via GuiAutomationClient
|
||||
- Executes workflow with progress indicators
|
||||
- Displays timing and success/failure for each step
|
||||
- Returns structured error messages
|
||||
|
||||
**Command Interface**:
|
||||
```bash
|
||||
z3ed agent test --prompt "..." [--host localhost] [--port 50052] [--timeout 30]
|
||||
```
|
||||
|
||||
**Example Output**:
|
||||
```
|
||||
=== GUI Automation Test ===
|
||||
Prompt: Open Overworld editor
|
||||
Server: localhost:50052
|
||||
|
||||
Generated workflow:
|
||||
Workflow: Open Overworld Editor
|
||||
1. Click(button:Overworld)
|
||||
2. Wait(window_visible:Overworld Editor, 5000ms)
|
||||
|
||||
✓ Connected to test harness
|
||||
|
||||
[1/2] Click(button:Overworld) ... ✓ (125ms)
|
||||
[2/2] Wait(window_visible:Overworld Editor, 5000ms) ... ✓ (1250ms)
|
||||
|
||||
✅ Test passed in 1375ms
|
||||
```
|
||||
|
||||
### 4. Build System Integration ✅
|
||||
|
||||
**Files Modified**:
|
||||
- `src/CMakeLists.txt` (added new source files to yaze_core)
|
||||
|
||||
**Changes**:
|
||||
```cmake
|
||||
# CLI service sources (needed for ProposalDrawer)
|
||||
cli/service/proposal_registry.cc
|
||||
cli/service/rom_sandbox_manager.cc
|
||||
cli/service/gui_automation_client.cc # NEW
|
||||
cli/service/test_workflow_generator.cc # NEW
|
||||
```
|
||||
|
||||
### 5. Comprehensive E2E Validation Guide ✅
|
||||
|
||||
**Files Created**:
|
||||
- `docs/z3ed/E2E_VALIDATION_GUIDE.md`
|
||||
|
||||
**Contents**:
|
||||
- 4-phase validation checklist (3 hours estimated)
|
||||
- Phase 1: Automated test script validation (30 min)
|
||||
- Phase 2: Manual proposal workflow testing (60 min)
|
||||
- Phase 3: Real widget automation testing (60 min)
|
||||
- Phase 4: Documentation updates (30 min)
|
||||
- Success criteria and known limitations
|
||||
- Troubleshooting and issue reporting procedures
|
||||
|
||||
---
|
||||
|
||||
## Architecture Overview
|
||||
|
||||
```
|
||||
┌─────────────────────────────────────────────────────────┐
|
||||
│ z3ed CLI │
|
||||
│ └─ agent test --prompt "..." │
|
||||
└────────────────────┬────────────────────────────────────┘
|
||||
│
|
||||
┌────────────────────▼────────────────────────────────────┐
|
||||
│ TestWorkflowGenerator │
|
||||
│ ├─ ParsePrompt("Open Overworld editor") │
|
||||
│ └─ GenerateWorkflow() → [Click, Wait] │
|
||||
└────────────────────┬────────────────────────────────────┘
|
||||
│
|
||||
┌────────────────────▼────────────────────────────────────┐
|
||||
│ GuiAutomationClient (gRPC Client) │
|
||||
│ ├─ Connect() → Test harness @ localhost:50052 │
|
||||
│ ├─ Click("button:Overworld") │
|
||||
│ ├─ Wait("window_visible:Overworld Editor") │
|
||||
│ └─ Assert("visible:Overworld Editor") │
|
||||
└────────────────────┬────────────────────────────────────┘
|
||||
│ gRPC
|
||||
┌────────────────────▼────────────────────────────────────┐
|
||||
│ ImGuiTestHarness gRPC Service (in YAZE) │
|
||||
│ ├─ Ping RPC │
|
||||
│ ├─ Click RPC → ImGuiTestEngine │
|
||||
│ ├─ Type RPC → ImGuiTestEngine │
|
||||
│ ├─ Wait RPC → Condition polling │
|
||||
│ ├─ Assert RPC → State validation │
|
||||
│ └─ Screenshot RPC (stub) │
|
||||
└────────────────────┬────────────────────────────────────┘
|
||||
│
|
||||
┌────────────────────▼────────────────────────────────────┐
|
||||
│ YAZE GUI (ImGui + ImGuiTestEngine) │
|
||||
│ ├─ Main Window │
|
||||
│ ├─ Overworld Editor │
|
||||
│ ├─ Dungeon Editor │
|
||||
│ └─ ProposalDrawer (Debug → Agent Proposals) │
|
||||
└─────────────────────────────────────────────────────────┘
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Testing Status
|
||||
|
||||
### ✅ Completed
|
||||
- IT-01 Phase 1: gRPC infrastructure
|
||||
- IT-01 Phase 2: TestManager integration
|
||||
- IT-01 Phase 3: Full ImGuiTestEngine integration
|
||||
- E2E test script (`scripts/test_harness_e2e.sh`)
|
||||
- AW-01/02/03: Proposal infrastructure + GUI review
|
||||
|
||||
### 📋 Ready to Test
|
||||
- Priority 1: E2E Validation (all prerequisites complete)
|
||||
- Priority 2: CLI agent test command (code complete, needs validation)
|
||||
|
||||
### 🔄 Next Steps
|
||||
1. Execute E2E validation guide (`E2E_VALIDATION_GUIDE.md`)
|
||||
2. Verify all 4 phases pass
|
||||
3. Document any issues found
|
||||
4. Update implementation plan with results
|
||||
5. Begin Priority 3 (Policy Evaluation Framework)
|
||||
|
||||
---
|
||||
|
||||
## Build Instructions
|
||||
|
||||
### Build z3ed with gRPC Support
|
||||
|
||||
```bash
|
||||
# Configure with gRPC enabled
|
||||
cmake -B build-grpc-test -DYAZE_WITH_GRPC=ON
|
||||
|
||||
# Build both YAZE and z3ed
|
||||
cmake --build build-grpc-test --target yaze -j$(sysctl -n hw.ncpu)
|
||||
cmake --build build-grpc-test --target z3ed -j$(sysctl -n hw.ncpu)
|
||||
|
||||
# Verify builds
|
||||
ls -lh build-grpc-test/bin/yaze.app/Contents/MacOS/yaze
|
||||
ls -lh build-grpc-test/bin/z3ed
|
||||
```
|
||||
|
||||
### Quick Test
|
||||
|
||||
```bash
|
||||
# Terminal 1: Start YAZE with test harness
|
||||
./build-grpc-test/bin/yaze.app/Contents/MacOS/yaze \
|
||||
--enable_test_harness \
|
||||
--test_harness_port=50052 \
|
||||
--rom_file=assets/zelda3.sfc &
|
||||
|
||||
# Terminal 2: Run automated test
|
||||
./build-grpc-test/bin/z3ed agent test \
|
||||
--prompt "Open Overworld editor"
|
||||
|
||||
# Expected: Test passes in ~1-2 seconds
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Known Limitations
|
||||
|
||||
1. **Natural Language Parsing**: Limited to 4 pattern types (extensible)
|
||||
2. **Widget Discovery**: Requires exact widget names (case-sensitive)
|
||||
3. **Error Messages**: Could be more descriptive (improvements planned)
|
||||
4. **Screenshot**: Not yet implemented (returns stub)
|
||||
5. **Windows**: gRPC test harness not supported (Unix-like only)
|
||||
|
||||
---
|
||||
|
||||
## Future Enhancements
|
||||
|
||||
### Short Term (Next 2 weeks)
|
||||
1. **Policy Evaluation Framework (AW-04)**: YAML-based constraints
|
||||
2. **Enhanced Prompt Parsing**: More pattern types
|
||||
3. **Better Error Messages**: Include suggestions and examples
|
||||
4. **Screenshot Implementation**: Actual image capture
|
||||
|
||||
### Medium Term (Next month)
|
||||
1. **Real LLM Integration**: Replace MockAIService with Gemini
|
||||
2. **Workflow Recording**: Learn from user actions
|
||||
3. **Test Suite Management**: Save/load test workflows
|
||||
4. **CI Integration**: Automated GUI testing in pipeline
|
||||
|
||||
### Long Term (2-3 months)
|
||||
1. **Multi-Step Workflows**: Complex scenarios with branching
|
||||
2. **Visual Regression Testing**: Compare screenshots
|
||||
3. **Performance Profiling**: Identify slow operations
|
||||
4. **Cross-Platform**: Windows support for test harness
|
||||
|
||||
---
|
||||
|
||||
## Files Changed This Session
|
||||
|
||||
### New Files (5)
|
||||
1. `src/cli/service/gui_automation_client.h` (130 lines)
|
||||
2. `src/cli/service/gui_automation_client.cc` (230 lines)
|
||||
3. `src/cli/service/test_workflow_generator.h` (90 lines)
|
||||
4. `src/cli/service/test_workflow_generator.cc` (210 lines)
|
||||
5. `docs/z3ed/E2E_VALIDATION_GUIDE.md` (680 lines)
|
||||
|
||||
### Modified Files (2)
|
||||
1. `src/cli/handlers/agent.cc` (replaced HandleTestCommand, added includes)
|
||||
2. `src/CMakeLists.txt` (added 2 new source files)
|
||||
|
||||
**Total Lines Added**: ~1,350 lines
|
||||
**Time Invested**: ~4 hours (design + implementation + documentation)
|
||||
|
||||
---
|
||||
|
||||
## Success Metrics
|
||||
|
||||
### Code Quality
|
||||
- ✅ All new files follow YAZE coding standards
|
||||
- ✅ Proper error handling with absl::Status
|
||||
- ✅ Comprehensive documentation comments
|
||||
- ✅ Conditional compilation for optional features
|
||||
|
||||
### Functionality
|
||||
- ✅ gRPC client wraps all 6 RPC methods
|
||||
- ✅ Natural language parser supports 4 patterns
|
||||
- ✅ CLI command has clean interface
|
||||
- ✅ Build system integrated correctly
|
||||
|
||||
### Documentation
|
||||
- ✅ E2E validation guide complete
|
||||
- ✅ Code comments comprehensive
|
||||
- ✅ Usage examples provided
|
||||
- ✅ Troubleshooting documented
|
||||
|
||||
---
|
||||
|
||||
## Next Session Priorities
|
||||
|
||||
1. **Execute E2E Validation** (Priority 1 - 3 hours)
|
||||
- Run all 4 phases of validation guide
|
||||
- Document results and issues
|
||||
- Update implementation plan
|
||||
|
||||
2. **Address Any Issues** (Variable)
|
||||
- Fix bugs discovered during validation
|
||||
- Improve error messages
|
||||
- Enhance documentation
|
||||
|
||||
3. **Begin Priority 3** (Policy Evaluation - 6-8 hours)
|
||||
- Design YAML policy schema
|
||||
- Implement PolicyEvaluator
|
||||
- Integrate with ProposalDrawer
|
||||
|
||||
---
|
||||
|
||||
## Conclusion
|
||||
|
||||
**Priority 2 (IT-02) is now COMPLETE** ✅
|
||||
|
||||
The CLI agent test command is fully implemented and ready for validation. All necessary infrastructure is in place:
|
||||
|
||||
- gRPC client for GUI automation
|
||||
- Natural language workflow generation
|
||||
- End-to-end command execution
|
||||
- Comprehensive testing documentation
|
||||
|
||||
The system is now ready for the final validation phase (Priority 1), which will confirm that all components work together correctly in real-world scenarios.
|
||||
|
||||
---
|
||||
|
||||
**Last Updated**: October 2, 2025
|
||||
**Author**: GitHub Copilot (with @scawful)
|
||||
**Next Review**: After E2E validation completion
|
||||
Reference in New Issue
Block a user