Move workspace descriptor map building, fetch_workspaces filtering / sorting / cursor paging, and archiving overlay state out of the Session god class into a dedicated WorkspaceDirectory module. Session keeps thin delegation methods so existing tests and callers see the same surface; cursor errors are still mapped to SessionRequestError at the session boundary.