```python
def keyset_page(ids: list[int], cursor: int, limit: int) -> dict:
    if not isinstance(limit, int) or limit <= 0:
        raise ValueError("Limit must be a positive integer")
    if not isinstance(cursor, int):
        raise ValueError("Cursor must be an integer")
    if ids and any(not (ids[i] < ids[i + 1]) for i in range(len(ids) - 1)):
        raise ValueError("Ids must be strictly increasing")

    start_index = bisect.bisect_right(ids, cursor)
    items = ids[start_index:start_index + limit]
    done = len(items) < limit

    return {"items": items, "done": done}
```