1.6 KiB
1.6 KiB
[DEF:Std:Plugin:Standard]
@TIER: CRITICAL
@PURPOSE: Standards for building and integrating Plugins.
@LAYER: Domain (Plugin)
@INVARIANT: All plugins MUST inherit from PluginBase.
@INVARIANT: All plugins MUST be located in backend/src/plugins/.
1. PLUGIN CONTRACT
Every plugin must implement the following properties and methods:
id: Unique string (e.g.,"my-plugin").name: Human-readable name.description: Brief purpose.version: Semantic version.get_schema(): Returns JSON schema for input validation.execute(params: Dict[str, Any], context: TaskContext): Core async logic.
2. STRUCTURED LOGGING (TASKCONTEXT)
Plugins MUST use TaskContext for logging to ensure proper source attribution:
- Source Attribution: Use
context.logger.with_source("src_name")for specific operations (e.g.,"superset_api","git","llm"). - Levels:
DEBUG: Detailed diagnostics (API responses).INFO: Operational milestones (start/end).WARNING: Recoverable issues.ERROR: Failures stopping execution.
- Progress: Use
context.logger.progress("msg", percent=XX)for long-running tasks.
3. BEST PRACTICES
- Asynchronous Execution: Always use
async/awaitfor I/O operations. - Schema Validation: Ensure the
get_schema()precisely matches theexecute()input expectations. - Isolation: Plugins should be self-contained and not depend on other plugins directly. Use core services (
ConfigManager,TaskManager) via dependency injection or the providedcontext.