feat: Add fast startup fetch and background caching

- 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
This commit is contained in:
2026-03-19 22:38:55 -07:00
parent 4f2cf49a80
commit 7eaa441574
13 changed files with 393 additions and 220 deletions

View File

@@ -11,11 +11,14 @@ Loading order:
"""
from dataclasses import dataclass, field
from typing import Any
from typing import TYPE_CHECKING, Any
from engine.display import BorderMode
from engine.pipeline.params import PipelineParams
if TYPE_CHECKING:
from engine.pipeline.controller import PipelineConfig
def _load_toml_presets() -> dict[str, Any]:
"""Load presets from TOML file."""
@@ -55,9 +58,10 @@ class PipelinePreset:
viewport_width: int = 80 # Viewport width in columns
viewport_height: int = 24 # Viewport height in rows
source_items: list[dict[str, Any]] | None = None # For ListDataSource
enable_metrics: bool = True # Enable performance metrics collection
def to_params(self) -> PipelineParams:
"""Convert to PipelineParams."""
"""Convert to PipelineParams (runtime configuration)."""
from engine.display import BorderMode
params = PipelineParams()
@@ -72,10 +76,27 @@ class PipelinePreset:
)
params.camera_mode = self.camera
params.effect_order = self.effects.copy()
# Note: camera_speed, viewport_width/height are not stored in PipelineParams
# They are used directly from the preset object in pipeline_runner.py
params.camera_speed = self.camera_speed
# Note: viewport_width/height are read from PipelinePreset directly
# in pipeline_runner.py, not from PipelineParams
return params
def to_config(self) -> "PipelineConfig":
"""Convert to PipelineConfig (static pipeline construction config).
PipelineConfig is used once at pipeline initialization and contains
the core settings that don't change during execution.
"""
from engine.pipeline.controller import PipelineConfig
return PipelineConfig(
source=self.source,
display=self.display,
camera=self.camera,
effects=self.effects.copy(),
enable_metrics=self.enable_metrics,
)
@classmethod
def from_yaml(cls, name: str, data: dict[str, Any]) -> "PipelinePreset":
"""Create a PipelinePreset from YAML data."""
@@ -91,6 +112,7 @@ class PipelinePreset:
viewport_width=data.get("viewport_width", 80),
viewport_height=data.get("viewport_height", 24),
source_items=data.get("source_items"),
enable_metrics=data.get("enable_metrics", True),
)