pub async fn run(workspace: &Path) -> Result<()>
Entry point. Opens terminal, refreshes on WAL changes, handles keys.