```python
def run_patrol(width: int, start: int, moves: list) -> dict:
    """
    Run a patrol bot on a corridor of width cells numbered 0 to width-1.
    
    Args:
        width (int): The width of the corridor. Must be a positive integer.
        start (int): The starting position of the bot. Must be an integer in [0, width-1].
        moves (list): A list of integers representing moves to be applied. Each move is a non-zero integer.
    
    Returns:
        dict: A dictionary containing the final cell, how many walls cut short, and how many distinct cells visited.
              The start counts as the first visited cell.
    """
    
    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("Start position must be an integer in [0, width-1].")
    if not isinstance(moves, list):
        raise ValueError("Moves argument must be a list of integers.")
    
    final_position = start
    bumps = 0
    visited = set([start])
    
    for delta in moves:
        result = clamp_move(final_position, delta, width)
        new_position, hit_wall = result
        
        if hit_wall:
            bumps += 1
        
        if new_position != final_position:
            visited.add(new_position)
        
        final_position = new_position
    
    return {
        "position": final_position,
        "bumps": bumps,
        "visited": len(visited) - 1
    }
```