- Added plugin base and loader for backend extensibility - Implemented application settings management with config persistence - Created Svelte-based frontend with Dashboard and Settings pages - Added API routes for plugins, tasks, and settings - Updated documentation and specifications - Improved project structure and developer tools
46 lines
2.5 KiB
Markdown
Executable File
46 lines
2.5 KiB
Markdown
Executable File
# Research: Plugin Architecture & Svelte Web UI
|
|
|
|
## Decisions
|
|
|
|
### 1. Web Framework: FastAPI
|
|
- **Decision**: Use FastAPI for the Python backend.
|
|
- **Rationale**:
|
|
- Native support for Pydantic models (crucial for plugin schema validation).
|
|
- Async support (essential for handling long-running tasks and log streaming via WebSockets/SSE).
|
|
- Automatic OpenAPI documentation generation (simplifies frontend integration).
|
|
- High performance and modern ecosystem.
|
|
- **Alternatives Considered**:
|
|
- **Flask**: Mature but requires extensions for validation (Marshmallow) and async support is less native. Slower for high-concurrency API calls.
|
|
- **Django**: Too heavy for this use case; brings unnecessary ORM and template engine overhead.
|
|
|
|
### 2. Plugin System: `importlib` + Abstract Base Classes (ABC)
|
|
- **Decision**: Use Python's built-in `importlib` for dynamic loading and `abc` for defining the plugin interface.
|
|
- **Rationale**:
|
|
- `importlib` provides a standard, secure way to load modules from a path.
|
|
- ABCs ensure plugins implement required methods (`execute`, `get_schema`) at load time.
|
|
- Lightweight, no external dependencies required.
|
|
- **Alternatives Considered**:
|
|
- **Pluggy**: Used by pytest, powerful but adds complexity and dependency overhead.
|
|
- **Stevedore**: OpenStack's plugin loader, too complex for this scope.
|
|
|
|
### 3. Authentication: `authlib` + ADFS (OIDC/SAML)
|
|
- **Decision**: Use `authlib` to handle ADFS authentication via OpenID Connect (OIDC) or SAML.
|
|
- **Rationale**:
|
|
- `authlib` is the modern standard for OAuth/OIDC in Python.
|
|
- Supports integration with FastAPI via middleware.
|
|
- ADFS is the required identity provider (IdP).
|
|
- **Alternatives Considered**:
|
|
- **python-social-auth**: Older, harder to integrate with FastAPI.
|
|
- **Manual JWT implementation**: Risky and reinvents the wheel; ADFS handles the token issuance.
|
|
|
|
### 4. Frontend: Svelte + Vite
|
|
- **Decision**: Use Svelte for the UI framework and Vite as the build tool.
|
|
- **Rationale**:
|
|
- Svelte's compiler-based approach results in small bundles and high performance.
|
|
- Reactive model maps well to real-time log updates.
|
|
- Vite provides a fast development experience and easy integration with backend proxies.
|
|
|
|
## Unknowns Resolved
|
|
|
|
- **Deployment Context**: Hosted multi-user service with ADFS.
|
|
- **Plugin Interface**: Will use Pydantic models to define input schemas, allowing the frontend to generate forms dynamically. |