f1411df0a4
`UsePreferencesQueryResponse` now derives from the sdk's `BskyPreferences` rather than the legacy one, which removes the cast the previous slice put on the assembled response - the query already returns the sdk action's result, so the two now type structurally. `labeler.ts`'s three service reads move to the appview client and return `app.bsky.labeler.defs` views, because `interpretLabelValueDefinitions` takes the lexicon-typed view. `moderation-opts.tsx` reads `Client.appLabelers` instead of `AtpAgent.appLabelers`: the lex static is already branded, so the fallback labeler list satisfies `ModerationPrefsLabeler` without a cast. `MutedWords` follows the prefs types: `expiresAt` is a `DatetimeString` now, built with `toDatetimeString` rather than `Date.toISOString`, and `sanitizeMutedWordValue` comes from `@bsky.app/sdk/utils`.