Add REPL effect detection and input handling to pipeline runner

- Detect REPL effect in pipeline and enable interactive mode
- Enable raw terminal mode for REPL input capture
- Add keyboard input loop for REPL commands (return, up/down arrows, backspace)
- Process commands and handle pipeline mutations from REPL
- Fix lint issues in graph and REPL modules (type annotations, imports)
This commit is contained in:
2026-03-21 21:19:30 -07:00
parent fb0dd4592f
commit 6646ed78b3
7 changed files with 89 additions and 52 deletions

View File

@@ -18,8 +18,8 @@ providing the same flexibility.
"""
from dataclasses import dataclass, field
from typing import Any, Dict, List, Optional
from pathlib import Path
from typing import Any
from engine.pipeline.graph import Graph, NodeType
from engine.pipeline.graph_adapter import graph_to_pipeline
@@ -32,7 +32,7 @@ class EffectConfig:
name: str
intensity: float = 1.0
enabled: bool = True
params: Dict[str, Any] = field(default_factory=dict)
params: dict[str, Any] = field(default_factory=dict)
@dataclass
@@ -70,9 +70,9 @@ class PipelineConfig:
"""
source: str = "headlines"
camera: Optional[CameraConfig] = None
effects: List[EffectConfig] = field(default_factory=list)
display: Optional[DisplayConfig] = None
camera: CameraConfig | None = None
effects: list[EffectConfig] = field(default_factory=list)
display: DisplayConfig | None = None
viewport_width: int = 80
viewport_height: int = 24
@@ -208,7 +208,7 @@ def load_hybrid_config(toml_path: str | Path) -> PipelineConfig:
return parse_hybrid_config(data)
def parse_hybrid_config(data: Dict[str, Any]) -> PipelineConfig:
def parse_hybrid_config(data: dict[str, Any]) -> PipelineConfig:
"""Parse hybrid configuration from dictionary.
Expected format: