```
def read_switches(kinds: dict, tokens: list[str]) -> dict:
    found = {}
    extra = []
    i = 0
    while i < len(tokens):
        token = tokens[i]
        if token.startswith("--"):
            parts = token[2:].split("=")
            name = parts[0]
            kind = kinds.get(name)
            if kind is None:
                raise ValueError(f"Unknown option name: {name}")
            elif kind == "value":
                if len(parts) > 1:
                    found[name] = parts[1:]
                else:
                    i += 1
                    if i < len(tokens):
                        found[name] = tokens[i]
                    else:
                        raise ValueError("Dangling value option")
            else:
                if len(parts) > 1:
                    raise ValueError(f"Switch {name} cannot have an inline form")
                found[name] = True
        else:
            extra.append(token)
        i += 1
    return {"found": found, "extra": extra}
```