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

Path: /docs/developers/architecture/idempiere-hub/007-plugin-implementation-plan