# 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.