```python
def run_patrol(width: int, start: int, moves: list) -> dict:
    """
    Simulate the patrol of a bot in a corridor with given width and starting position.
    
    :param width: The width of the corridor as an integer.
    :param start: The starting position of the bot as an integer.
    :param moves: A list of signed integers representing the moves to be applied.
    :return: A dictionary containing the final position, number of bumps, and number of visited cells.
             - 'position': Final cell after all moves.
             - 'bumps': Number of walls cut short in move applications.
             - 'visited': Number of distinct cells visited.
    """
    
    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 within the corridor range.")
    if not all(isinstance(move, int) and move != 0 for move in moves):
        raise ValueError("Moves list must contain non-zero integers.")
    
    position = start
    bumps = 0
    visited = {start}
    
    for delta in moves:
        result = clamp_move(position, delta, width)
        landing_cell, is_wall_cut = result[0], result[1]
        
        if is_wall_cut:
            bumps += 1
        
        if landing_cell not in visited:
            visited.add(landing_cell)
        
        position = landing_cell
    
    return {
        'position': position,
        'bumps': bumps,
        'visited': len(visited) - 1
    }
```