forked from genewildish/Mainline
- Add for quick startup using first N feeds - Add background thread for full fetch and caching - Update to use fast fetch - Update docs and skills
3.1 KiB
3.1 KiB
name, description, compatibility, metadata
| name | description | compatibility | metadata | ||||
|---|---|---|---|---|---|---|---|
| mainline-architecture | Pipeline stages, capability resolution, and core architecture patterns | opencode |
|
What This Skill Covers
This skill covers Mainline's pipeline architecture - the Stage-based system for dependency resolution, data flow, and component composition.
Key Concepts
Stage Class (engine/pipeline/core.py)
The Stage ABC is the foundation. All pipeline components inherit from it:
class Stage(ABC):
name: str
category: str # "source", "effect", "overlay", "display", "camera"
optional: bool = False
@property
def capabilities(self) -> set[str]:
"""What this stage provides (e.g., 'source.headlines')"""
return set()
@property
def dependencies(self) -> set[str]:
"""What this stage needs (e.g., {'source'})"""
return set()
Capability-Based Dependencies
The Pipeline resolves dependencies using prefix matching:
"source"matches"source.headlines","source.poetry", etc."camera.state"matches the camera state capability- This allows flexible composition without hardcoding specific stage names
Minimum Capabilities
The pipeline requires these minimum capabilities to function:
"source"- Data source capability"render.output"- Rendered content capability"display.output"- Display output capability"camera.state"- Camera state for viewport filtering
These are automatically injected if missing (auto-injection).
DataType Enum
PureData-style data types for inlet/outlet validation:
SOURCE_ITEMS: List[SourceItem] - raw items from sourcesITEM_TUPLES: List[tuple] - (title, source, timestamp) tuplesTEXT_BUFFER: List[str] - rendered ANSI bufferRAW_TEXT: str - raw text stringsPIL_IMAGE: PIL Image object
Pipeline Execution
The Pipeline (engine/pipeline/controller.py):
- Collects all stages from StageRegistry
- Resolves dependencies using prefix matching
- Executes stages in dependency order
- Handles errors for non-optional stages
Canvas & Camera
- Canvas (
engine/canvas.py): 2D rendering surface with dirty region tracking - Camera (
engine/camera.py): Viewport controller for scrolling content
Canvas tracks dirty regions automatically when content is written via put_region, put_text, fill, enabling partial buffer updates.
Adding New Stages
- Create a class inheriting from
Stage - Define
capabilitiesanddependenciesproperties - Implement required abstract methods
- Register in StageRegistry or use as adapter
Common Patterns
- Use adapters (engine/pipeline/adapters.py) to wrap existing components as stages
- Set
optional=Truefor stages that can fail gracefully - Use
stage_typeandrender_orderfor execution ordering - Clock stages update state independently of data flow
Sources
- engine/pipeline/core.py - Stage base class
- engine/pipeline/controller.py - Pipeline implementation
- engine/pipeline/adapters/ - Stage adapters
- docs/PIPELINE.md - Pipeline documentation