Plugin Type Reference¶
This section provides detailed documentation for each plugin type in Lightfall.
Overview¶
Type |
Base Class |
Purpose |
Singleton |
|---|---|---|---|
|
Add preferences pages |
Yes |
|
|
Add application panels |
Yes |
|
|
Register Bluesky plans |
Yes |
|
|
Provide execution backends |
Yes |
|
|
Define color themes |
Yes |
|
|
Add status bar indicators |
Yes |
|
|
Device-specific control widgets |
Yes |
|
|
Claude assistant tools |
Yes |
|
|
Claude assistant expertise |
Yes |
Common Interface¶
All plugin types inherit from PluginType and share these characteristics:
Class Attributes¶
class PluginType(ABC):
type_name: ClassVar[str] = "base" # Unique type identifier
description: ClassVar[str] = "..." # Human-readable description
is_singleton: ClassVar[bool] = False # One instance per plugin?
Required Property¶
@property
@abstractmethod
def name(self) -> str:
"""Unique identifier within this plugin type."""
...
Optional Methods¶
def get_introspection_data(self) -> dict[str, Any]:
"""Return plugin metadata for debugging/MCP tools."""
return {
"type": self.type_name,
"name": self.name,
"class": self.__class__.__name__,
"module": self.__class__.__module__,
}
Choosing a Plugin Type¶
UI Extensions¶
Goal |
Plugin Type |
|---|---|
Add a preferences page |
|
Add a new panel/dock widget |
|
Add custom device control widget |
|
Add a status indicator |
|
Add a color theme |
Data Acquisition¶
Goal |
Plugin Type |
|---|---|
Add a Bluesky scan plan |
|
Add an execution backend |
Claude Assistant¶
Goal |
Plugin Type |
|---|---|
Add tools Claude can call |
|
Add domain expertise/context |
Documentation Template¶
Each plugin type page follows this structure:
Purpose - What this plugin type is for
Base Class - Import path and class name
Class Attributes - Type-specific class attributes
Required Methods - Methods you must implement
Optional Methods - Methods you can override
Lifecycle - When methods are called
Complete Example - Working implementation
Registration - How to register the plugin