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 b4f22b9f48
commit f8a3093155
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: