ADR-007: Plugin Architecture Implementation Plan
Status: Implemented (v1.1.0)
Related: ADR-002: CLI Plugin Architecture
Phase 1: Core Infrastructure
1.1 SPI Interfaces
src/main/java/org/idempiere/cli/plugin/spi/
├── PluginProvider.java # Base plugin interface
├── PluginContext.java # Plugin runtime context
├── CommandProvider.java # Add new CLI commands
├── GeneratorProvider.java # AD element generators
└── AIProvider.java # AI service providers
1.2 Plugin Loader
src/main/java/org/idempiere/cli/plugin/
├── PluginLoader.java # ServiceLoader + JAR loading
├── PluginRegistry.java # Track loaded plugins
└── PluginConfig.java # Plugin configuration
1.3 Configuration
~/.idempiere-cli/
├── config.yaml # Global config
└── plugins/ # Plugin JARs
Phase 2: Plugin Commands
2.1 CLI Commands
idempiere-cli plugin list # List plugins
idempiere-cli plugin install <jar> # Install plugin
idempiere-cli plugin remove <id> # Remove plugin
idempiere-cli plugin info <id> # Plugin details
2.2 Implementation
src/main/java/org/idempiere/cli/commands/
└── PluginCommand.java # Plugin management commands
Phase 3: AI Integration
3.1 AI Service
src/main/java/org/idempiere/cli/plugin/ai/
├── AIService.java # AI abstraction
├── AIRequest.java # Request model
├── AIResponse.java # Response model
└── providers/
├── ClaudeProvider.java # Claude API
└── OpenAIProvider.java # OpenAI API (future)
3.2 AI Commands
idempiere-cli ai generate print-format --description "..."
idempiere-cli ai generate window --description "..."
idempiere-cli ai analyze <file>
File Structure Summary
src/main/java/org/idempiere/cli/
├── plugin/
│ ├── spi/ # Service Provider Interfaces
│ │ ├── PluginProvider.java
│ │ ├── PluginContext.java
│ │ ├── CommandProvider.java
│ │ ├── GeneratorProvider.java
│ │ └── AIProvider.java
│ ├── PluginLoader.java
│ ├── PluginRegistry.java
│ ├── PluginConfig.java
│ └── ai/
│ ├── AIService.java
│ ├── AIRequest.java
│ ├── AIResponse.java
│ └── providers/
│ └── ClaudeProvider.java
└── commands/
├── PluginCommand.java
└── AICommand.java
Implementation Order
| Step | File | Description |
|---|---|---|
| 1 | PluginProvider.java |
Base interface |
| 2 | PluginContext.java |
Runtime context |
| 3 | CommandProvider.java |
Command extension |
| 4 | GeneratorProvider.java |
Generator extension |
| 5 | AIProvider.java |
AI service extension |
| 6 | PluginConfig.java |
YAML configuration |
| 7 | PluginRegistry.java |
Plugin tracking |
| 8 | PluginLoader.java |
Load plugins |
| 9 | PluginCommand.java |
CLI commands |
| 10 | AIService.java |
AI abstraction |
| 11 | ClaudeProvider.java |
Claude integration |
| 12 | AICommand.java |
AI CLI commands |
Configuration Example
# ~/.idempiere-cli/config.yaml
plugins:
directory: ~/.idempiere-cli/plugins
ai:
provider: claude
apiKey: ${CLAUDE_API_KEY}
model: claude-sonnet-4-20250514
generators:
printFormat:
outputDir: ./generated