```python
def run_patrol(width: int, start: int, moves: list) -> dict:
    """
    Executes a patrol bot's movements in a corridor and returns its final position,
    number of bumps encountered by walls, and the total distinct visited cells.
    """
    if not isinstance(width, int) or width <= 0:
        raise ValueError("Width must be a positive integer.")
    
    if not isinstance(start, int) or start < 0 or start >= width:
        raise ValueError("Starting position must be an integer within the corridor range.")
    
    if not isinstance(moves, list):
        raise ValueError("Moves must be a list of integers.")
    
    visited = set()
    bumps = 0
    current_pos = start
    
    for delta in moves:
        if not isinstance(delta, int) or delta == 0:
            raise ValueError("Move delta must be a non-zero integer.")
        
        [new_pos, is_wall] = clamp_move(current_pos, delta, width)
        
        if is_wall:
            bumps += 1
        
        visited.add(new_pos)
        current_pos = new_pos
    
    return {
        "position": current_pos,
        "bumps": bumps,
        "visited": len(visited) - 1
    }
```