2f482f2c0b
Five sites read `AtpAgent.appLabelers`, which the previous commit stopped populating - a silent regression, since an empty static reads as "no authorities" rather than failing. All now read `Client.appLabelers`, the static that is actually configured: - `lib/moderation.ts`'s `isAppLabeler`, which decides whether a labeler is non-removable in the UI; - `preferences/moderation.ts`'s `useMyLabelersQuery`, which seeds the labeler list with the app authorities; - `feed/custom.ts`'s hand-rolled logged-out `getFeed`, which reproduces the header lex would have emitted because the request bypasses the client. `sessionAccountToSession` (the `AtpSessionData` conversion) had no callers left once the bridge agent went, and the age assurance config read - the one standalone `new AtpAgent` the age assurance slice deliberately left behind - moves to the public appview client, which is what it was approximating. That is the last `AtpAgent` in src. What remains of `@atproto/api` in the session layer is types and `BSKY_LABELER_DID`, which S4d owns. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>