feat: Add DevLoop automation and HTML Reports
## DevLoop - Closed-Loop Development System - Orchestrator for plan → build → test → analyze cycle - Gemini planning via OpenCode CLI - Claude implementation via CLI bridge - Playwright browser testing integration - Test runner with API, filesystem, and browser tests - Persistent state in .devloop/ directory - CLI tool: tools/devloop_cli.py Usage: python tools/devloop_cli.py start 'Create new feature' python tools/devloop_cli.py plan 'Fix bug in X' python tools/devloop_cli.py test --study support_arm python tools/devloop_cli.py browser --level full ## HTML Reports (optimization_engine/reporting/) - Interactive Plotly-based reports - Convergence plot, Pareto front, parallel coordinates - Parameter importance analysis - Self-contained HTML (offline-capable) - Tailwind CSS styling ## Playwright E2E Tests - Home page tests - Test results in test-results/ ## LAC Knowledge Base Updates - Session insights (failures, workarounds, patterns) - Optimization memory for arm support study
This commit is contained in:
68
optimization_engine/devloop/__init__.py
Normal file
68
optimization_engine/devloop/__init__.py
Normal file
@@ -0,0 +1,68 @@
|
||||
"""
|
||||
Atomizer DevLoop - Closed-Loop Development System
|
||||
|
||||
This module provides autonomous development cycle capabilities:
|
||||
1. Gemini Pro for strategic planning and analysis
|
||||
2. Claude Code (Opus 4.5) for implementation
|
||||
3. Dashboard testing for verification
|
||||
4. LAC integration for persistent learning
|
||||
|
||||
The DevLoop orchestrates the full cycle:
|
||||
PLAN (Gemini) -> BUILD (Claude) -> TEST (Dashboard) -> ANALYZE (Gemini) -> FIX (Claude) -> VERIFY
|
||||
|
||||
Example usage:
|
||||
from optimization_engine.devloop import DevLoopOrchestrator
|
||||
|
||||
orchestrator = DevLoopOrchestrator()
|
||||
result = await orchestrator.run_development_cycle(
|
||||
objective="Create support_arm optimization study"
|
||||
)
|
||||
"""
|
||||
|
||||
|
||||
# Lazy imports to avoid circular dependencies
|
||||
def __getattr__(name):
|
||||
if name == "DevLoopOrchestrator":
|
||||
from .orchestrator import DevLoopOrchestrator
|
||||
|
||||
return DevLoopOrchestrator
|
||||
elif name == "LoopPhase":
|
||||
from .orchestrator import LoopPhase
|
||||
|
||||
return LoopPhase
|
||||
elif name == "LoopState":
|
||||
from .orchestrator import LoopState
|
||||
|
||||
return LoopState
|
||||
elif name == "DashboardTestRunner":
|
||||
from .test_runner import DashboardTestRunner
|
||||
|
||||
return DashboardTestRunner
|
||||
elif name == "TestScenario":
|
||||
from .test_runner import TestScenario
|
||||
|
||||
return TestScenario
|
||||
elif name == "GeminiPlanner":
|
||||
from .planning import GeminiPlanner
|
||||
|
||||
return GeminiPlanner
|
||||
elif name == "ProblemAnalyzer":
|
||||
from .analyzer import ProblemAnalyzer
|
||||
|
||||
return ProblemAnalyzer
|
||||
elif name == "ClaudeCodeBridge":
|
||||
from .claude_bridge import ClaudeCodeBridge
|
||||
|
||||
return ClaudeCodeBridge
|
||||
raise AttributeError(f"module {__name__!r} has no attribute {name!r}")
|
||||
|
||||
|
||||
__all__ = [
|
||||
"DevLoopOrchestrator",
|
||||
"LoopPhase",
|
||||
"LoopState",
|
||||
"DashboardTestRunner",
|
||||
"TestScenario",
|
||||
"GeminiPlanner",
|
||||
"ProblemAnalyzer",
|
||||
]
|
||||
Reference in New Issue
Block a user