mirror of
https://github.com/navidrome/navidrome.git
synced 2026-01-01 11:28:04 -05:00
Compare commits
9 Commits
v0.58.0
...
plugin-spi
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
2a81ec9b5a | ||
|
|
4d4625c766 | ||
|
|
626e5a7bb0 | ||
|
|
41535b54f5 | ||
|
|
7e835b4557 | ||
|
|
67c4fa2c9d | ||
|
|
438fd93d8e | ||
|
|
96f446c4a0 | ||
|
|
449dd53edf |
1037
docs/hld-plugins.md
Normal file
1037
docs/hld-plugins.md
Normal file
File diff suppressed because it is too large
Load Diff
305
docs/plugins-implementation-plan.md
Normal file
305
docs/plugins-implementation-plan.md
Normal file
@@ -0,0 +1,305 @@
|
||||
# Navidrome Plugin System Implementation Plan
|
||||
|
||||
## Progress Tracking
|
||||
|
||||
### Phase 1: Foundational Infrastructure
|
||||
|
||||
- [ ] 1.1: Plugin Manifest and Configuration
|
||||
- [ ] 1.2: Basic WebAssembly Runtime Integration
|
||||
- [ ] 1.3: Permission Management System
|
||||
- [ ] 1.3.1: URL Allowlist Implementation
|
||||
- [ ] 1.3.2: Local Network Access Control
|
||||
- [ ] 1.3.3: Host Function Access Control
|
||||
- [ ] 1.4: Project Structure and CLI Commands
|
||||
- [ ] 1.5: Plugin Verification System
|
||||
|
||||
### Phase 2: Protocol Definition and Host Functions
|
||||
|
||||
- [ ] 2.1: Protocol Buffer Definitions
|
||||
- [ ] 2.2: Host Function Implementation
|
||||
- [ ] 2.3: Plugin Context Management
|
||||
|
||||
### Phase 3: Plugin Loading and Execution
|
||||
|
||||
- [ ] 3.1: WebAssembly Runtime Configuration
|
||||
- [ ] 3.2: Testing Infrastructure
|
||||
- [ ] 3.3: Plugin Developer Tools
|
||||
|
||||
### Phase 4: Agent Plugin Integration
|
||||
|
||||
- [ ] 4.1: Agent Plugin Adapter Implementation
|
||||
- [ ] 4.2: Plugin Registration with Agent System
|
||||
- [ ] 4.3: Last.fm Agent Plugin Implementation
|
||||
- [ ] 4.4: Integration Testing
|
||||
|
||||
### Phase 5: Enhanced Management and User Experience
|
||||
|
||||
- [ ] 5.1: Enhanced CLI Management
|
||||
- [ ] 5.2: Plugin Package Format
|
||||
- [ ] 5.3: Runtime Monitoring
|
||||
- [ ] 5.4: Administrative UI (Optional)
|
||||
|
||||
### Phase 6: Documentation and Release
|
||||
|
||||
- [ ] 6.1: User Documentation
|
||||
- [ ] 6.2: Developer Documentation
|
||||
- [ ] 6.3: Example Plugin Templates
|
||||
- [ ] 6.4: Final Testing and Feature Flags
|
||||
|
||||
## Phase 1: Foundational Infrastructure
|
||||
|
||||
**Goal:** Establish the core plugin infrastructure without affecting existing functionality.
|
||||
|
||||
### 1.1: Plugin Manifest and Configuration
|
||||
|
||||
- Create plugin manifest schema and validation functions
|
||||
- Add plugin-related configuration to `conf` package:
|
||||
- Global plugin settings: enabled, directory, default limits
|
||||
- Per-plugin settings: enabled, limits, configuration
|
||||
- Add tests for manifest validation and configuration parsing
|
||||
|
||||
### 1.2: Basic WebAssembly Runtime Integration
|
||||
|
||||
- Add `knqyf263/go-plugin` dependency
|
||||
- Create initial plugin loader that can:
|
||||
- Discover plugin files in configured directory
|
||||
- Read and validate manifests
|
||||
- Basic security validation (no plugin execution yet)
|
||||
- Add unit tests for plugin discovery and manifest loading
|
||||
|
||||
### 1.3: Permission Management System
|
||||
|
||||
- Implement the `PermissionManager` component:
|
||||
- URL allowlist validation
|
||||
- Host function allowlist validation
|
||||
- Internal network access prevention
|
||||
- Configuration access control
|
||||
- Add comprehensive security tests for all permission rules
|
||||
- Implement local network access control feature:
|
||||
- Add `allowLocalNetwork` flag to manifest schema
|
||||
- Update permission checks in HTTP requests
|
||||
- Add configuration option for default behavior
|
||||
- Add tests for local network access control
|
||||
|
||||
### 1.4: Project Structure and CLI Commands
|
||||
|
||||
- Create plugin-related directory structure:
|
||||
```
|
||||
plugins/
|
||||
├── proto/ # Protocol Buffer definitions
|
||||
├── manager.go # Plugin Manager implementation
|
||||
├── host.go # Host function implementations
|
||||
├── permission.go # Permission manager
|
||||
└── adapters/ # Adapters for different plugin types
|
||||
```
|
||||
- Implement basic CLI commands for plugin management:
|
||||
- `navidrome plugin list`
|
||||
- `navidrome plugin info [name]`
|
||||
|
||||
### 1.5: Plugin Verification System
|
||||
|
||||
- Implement plugin binary integrity verification:
|
||||
- Add hash calculation and storage during installation
|
||||
- Add verification during plugin loading
|
||||
- Create a local store for plugin hashes
|
||||
- Add tests for plugin verification workflow
|
||||
- Update CLI commands to display verification status
|
||||
|
||||
**Deliverable:** Foundation layer with security features including local network control and plugin verification.
|
||||
|
||||
## Phase 2: Protocol Definition and Host Functions
|
||||
|
||||
**Goal:** Define the communication protocol between Navidrome and plugins.
|
||||
|
||||
### 2.1: Protocol Buffer Definitions
|
||||
|
||||
- Define Protocol Buffer specifications for:
|
||||
- Agent plugin interface
|
||||
- Host functions interface
|
||||
- Common request/response structures
|
||||
- Generate Go code from Protocol Buffers
|
||||
- Create test stubs for interface implementations
|
||||
|
||||
### 2.2: Host Function Implementation
|
||||
|
||||
- Implement core host functions:
|
||||
- `GetConfig` for configuration access
|
||||
- `Log` for plugin logging
|
||||
- `HttpDo` for controlled HTTP access
|
||||
- Add comprehensive tests for each host function
|
||||
- Implement permission checks for all host functions
|
||||
|
||||
### 2.3: Plugin Context Management
|
||||
|
||||
- Create plugin context structure to track:
|
||||
- Current plugin name
|
||||
- Permission scope
|
||||
- Runtime state
|
||||
- Implement proper isolation between plugin calls
|
||||
|
||||
**Deliverable:** Complete protocol definition and host function implementations without executing actual plugins.
|
||||
|
||||
## Phase 3: Plugin Loading and Execution (Minimal)
|
||||
|
||||
**Goal:** Enable basic plugin loading and execution in isolation from the rest of the system.
|
||||
|
||||
### 3.1: WebAssembly Runtime Configuration
|
||||
|
||||
- Configure WebAssembly runtime with appropriate security settings
|
||||
- Implement plugin initialization with configuration passing
|
||||
- Add proper error handling for plugin loading failures
|
||||
|
||||
### 3.2: Testing Infrastructure
|
||||
|
||||
- Create test harness for plugin execution
|
||||
- Implement simple test plugins for validation
|
||||
- Add integration tests for plugin loading and execution
|
||||
- Add tests for local network access
|
||||
- Add tests for plugin verification and integrity checks
|
||||
|
||||
### 3.3: Plugin Developer Tools
|
||||
|
||||
- Implement development commands:
|
||||
- `navidrome plugin dev [folder_path]`
|
||||
- `navidrome plugin refresh [name]`
|
||||
- Create basic development documentation
|
||||
|
||||
**Deliverable:** Working plugin loading and execution system that can be tested in isolation.
|
||||
|
||||
## Phase 4: Agent Plugin Integration
|
||||
|
||||
**Goal:** Connect the plugin system to the existing agent architecture.
|
||||
|
||||
### 4.1: Agent Plugin Adapter Implementation
|
||||
|
||||
- Create adapter that implements all agent interfaces:
|
||||
- Convert between Protobuf and agent interfaces
|
||||
- Implement proper error handling and timeouts
|
||||
- Add trace logging for debugging
|
||||
- Add unit tests for all adapter methods
|
||||
- Update adapter to respect plugin's declared capabilities
|
||||
|
||||
### 4.2: Plugin Registration with Agent System
|
||||
|
||||
- Implement plugin registration with the existing agent system
|
||||
- Extend configuration to support plugin agent ordering
|
||||
- Make plugin agents respect the same priority system as built-in agents
|
||||
|
||||
### 4.3: Last.fm Agent Plugin Implementation
|
||||
|
||||
- Implement prototype Last.fm plugin as proof of concept
|
||||
- Create plugin manifest with necessary permissions
|
||||
- Add tests comparing plugin behavior to built-in agent
|
||||
|
||||
### 4.4: Integration Testing
|
||||
|
||||
- Add comprehensive integration tests for:
|
||||
- Plugin discovery and loading
|
||||
- Agent API functionality
|
||||
- Error handling and recovery
|
||||
- Configuration changes
|
||||
|
||||
**Deliverable:** Working plugin system with Last.fm plugin implementation that can be toggled via configuration without breaking existing functionality.
|
||||
|
||||
## Phase 5: Enhanced Management and User Experience
|
||||
|
||||
**Goal:** Improve plugin management and user experience.
|
||||
|
||||
### 5.1: Enhanced CLI Management
|
||||
|
||||
- Complete remaining CLI commands:
|
||||
- `navidrome plugin install [file]`
|
||||
- `navidrome plugin remove [name]`
|
||||
- `navidrome plugin config-template [name]`
|
||||
- Add command validation and error handling
|
||||
|
||||
### 5.2: Plugin Package Format
|
||||
|
||||
- Implement `.ndp` package format:
|
||||
- Package creation
|
||||
- Validation
|
||||
- Installation
|
||||
- Add tests for package integrity checking
|
||||
|
||||
### 5.3: Runtime Monitoring
|
||||
|
||||
- Add runtime statistics:
|
||||
- Plugin execution time
|
||||
- Resource usage
|
||||
- Error tracking
|
||||
- Implement health checks and recovery mechanisms
|
||||
|
||||
### 5.4: Administrative UI (Optional)
|
||||
|
||||
- Create basic admin UI for plugin management:
|
||||
- View installed plugins
|
||||
- Enable/disable plugins
|
||||
- View permissions
|
||||
- Configure plugins
|
||||
|
||||
**Deliverable:** Complete plugin management tooling with good user experience.
|
||||
|
||||
## Phase 6: Documentation and Release
|
||||
|
||||
**Goal:** Prepare the plugin system for production use and developer adoption.
|
||||
|
||||
### 6.1: User Documentation
|
||||
|
||||
- Create comprehensive user documentation:
|
||||
- Plugin installation and management
|
||||
- Configuration options
|
||||
- Security considerations
|
||||
- Troubleshooting
|
||||
|
||||
### 6.2: Developer Documentation
|
||||
|
||||
- Create plugin development guide:
|
||||
- API reference
|
||||
- Development workflow
|
||||
- Best practices
|
||||
- Examples
|
||||
|
||||
### 6.3: Example Plugin Templates
|
||||
|
||||
- Create starter templates for common plugin types:
|
||||
- Basic agent plugin
|
||||
- Custom service plugin
|
||||
- Include CI/CD configurations
|
||||
- Add examples for different permission scenarios:
|
||||
- Standard external API access
|
||||
- Local network access (with `allowLocalNetwork: true`)
|
||||
- Different capability declarations
|
||||
|
||||
### 6.4: Final Testing and Feature Flags
|
||||
|
||||
- Add feature flag to enable/disable plugin system
|
||||
- Perform comprehensive integration testing
|
||||
- Address any final security concerns
|
||||
|
||||
**Deliverable:** Production-ready plugin system with documentation and examples.
|
||||
|
||||
## Risk Assessment and Mitigation
|
||||
|
||||
1. **Security Risks**
|
||||
|
||||
- **Risk**: Plugin execution could compromise system security
|
||||
- **Mitigation**: Strict permission model, WebAssembly sandbox, URL validation
|
||||
|
||||
2. **Performance Impact**
|
||||
|
||||
- **Risk**: WebAssembly execution might be slower than native code
|
||||
- **Mitigation**: Benchmarking, caching mechanisms, performance monitoring
|
||||
|
||||
3. **Backward Compatibility**
|
||||
|
||||
- **Risk**: Changes might break existing functionality
|
||||
- **Mitigation**: Feature flags, phased integration, comprehensive testing
|
||||
|
||||
4. **User Experience**
|
||||
|
||||
- **Risk**: Plugin management could be complex for users
|
||||
- **Mitigation**: Clear documentation, intuitive CLI, potential UI integration
|
||||
|
||||
5. **Developer Adoption**
|
||||
- **Risk**: Plugin development might be too complex
|
||||
- **Mitigation**: Clear documentation, example templates, developer tooling
|
||||
Reference in New Issue
Block a user