feat(pipeline): integrate BorderMode and add UI preset

- params.py: border field now accepts bool | BorderMode
- presets.py: add UI_PRESET with BorderMode.UI, remove SIXEL_PRESET
- __init__.py: export UI_PRESET, drop SIXEL_PRESET
- registry.py: auto-register FrameBufferStage on discovery
- New FrameBufferStage for frame history and intensity maps
- Tests: update test_pipeline for UI preset, add test_framebuffer_stage.py

This sets the foundation for interactive UI panel and modern pipeline composition.
This commit is contained in:
2026-03-18 12:19:10 -07:00
parent 36afbacb6b
commit 21fb210c6e
7 changed files with 449 additions and 20 deletions

View File

@@ -45,7 +45,8 @@ class TestStageRegistry:
assert "pygame" in displays
assert "websocket" in displays
assert "null" in displays
assert "sixel" in displays
# sixel and kitty removed; should not be present
assert "sixel" not in displays
def test_create_source_stage(self):
"""StageRegistry.create creates source stages."""
@@ -546,7 +547,7 @@ class TestPipelinePresets:
FIREHOSE_PRESET,
PIPELINE_VIZ_PRESET,
POETRY_PRESET,
SIXEL_PRESET,
UI_PRESET,
WEBSOCKET_PRESET,
)
@@ -554,8 +555,8 @@ class TestPipelinePresets:
assert POETRY_PRESET.name == "poetry"
assert FIREHOSE_PRESET.name == "firehose"
assert PIPELINE_VIZ_PRESET.name == "pipeline"
assert SIXEL_PRESET.name == "sixel"
assert WEBSOCKET_PRESET.name == "websocket"
assert UI_PRESET.name == "ui"
def test_preset_to_params(self):
"""Presets convert to PipelineParams correctly."""