prole/knoe/ui/ncurses_ui.py
chrisfu 4ee2b259c9 Checkpoint: rename installer to knoe + harden db build context
- Add build-context helper to copy Docker context safely (ignore runtime data, keep symlinks)

- Update UI and core actions to use ~/.prole/build and shared copy helper

- Add/adjust tests and scripts; introduce knoe ops helpers and update manifests

Co-authored-by: Junie <junie@jetbrains.com>
2026-03-22 01:45:21 -07:00

47 lines
1.4 KiB
Python

"""Ncurses UI adapter skeleton for the installer runner."""
from __future__ import annotations
from ..runner import InstallerRunner
from ..state import InstallerState
from ..milestone import Milestone
class NcursesUI:
"""Minimal ncurses adapter that listens to runner events."""
def __init__(self, runner: InstallerRunner):
self.runner = runner
self._bind_runner()
def _bind_runner(self) -> None:
self.runner.on("on_enter_milestone", self.on_enter_milestone)
self.runner.on("on_validation_error", self.on_validation_error)
self.runner.on("on_progress", self.on_progress)
self.runner.on("on_complete", self.on_complete)
# Event handlers (override in concrete UI)
def on_enter_milestone(self, milestone: Milestone, state: InstallerState) -> None:
pass
def on_validation_error(
self, milestone: Milestone | None, state: InstallerState, errors: list[str]
) -> None:
pass
def on_progress(
self,
milestone: Milestone,
state: InstallerState,
message: str,
percent: float | None,
) -> None:
pass
def on_complete(self, milestone: Milestone | None, state: InstallerState) -> None:
pass
def start(self, start_id: str | None = None) -> bool:
"""Run the installer without a GUI main loop."""
return self.runner.run(start_id=start_id)