```python
def run_patrol(width: int, start: int, moves: list) -> dict:
    if width <= 0 or not isinstance(width, int):
        raise ValueError("Width must be a positive integer.")
    if start < 0 or start >= width or not isinstance(start, int):
        raise ValueError("Start position must be an integer inside the corridor.")
    if not isinstance(moves, list) or any(not isinstance(move, int) for move in moves):
        raise ValueError("Moves must be a list of integers.")

    position = start
    bumps = 0
    visited = {start}

    for move in moves:
        new_position, bump = clamp_move(position, move, width)
        if new_position != position:
            if new_position not in visited:
                visited.add(new_position)
            bumps += bump
            position = new_position

    return {"position": position, "bumps": bumps, "visited": len(visited)}
```