af0e028cde
Restore the original TabFilter-based storage for saved feeds and profile tabs. The spell-based storage (kind:777 events embedded in SavedFeed and ProfileTab) was causing data loss: existing saved feeds and profile tabs were silently dropped because the Zod schema rejected the old format. Restored from main: - profileTabsEvent.ts: TabFilter/TabVarDef types, var tag parsing, resolvePointer/resolveFilter for variable substitution - useResolveTabFilter.ts: hook for resolving tab variables - useProfileFeed.ts: useTabFeed for custom profile tab feeds - useSavedFeeds.ts: 3-arg addSavedFeed(label, filter, vars) API - FeedEditModal.tsx / ProfileTabEditModal.tsx: produce TabFilters - schemas.ts: SavedFeedSchema with filter/vars fields Updated consumers: - Feed.tsx SavedFeedContent: uses useResolveTabFilter + useStreamPosts - ProfilePage ProfileSavedFeedContent: uses useResolveTabFilter + useTabFeed - ContentSettings SavedFeedsSection: TabFilter-based CRUD - SearchPage: builds TabFilters for saving, spell tags only for sharing - SpellRunPage: converts spell to TabFilter when saving to home feed - GetFeedTool: resolves saved feed TabFilters directly Spells (kind:777) remain fully functional for their intended use cases: standalone shareable feeds, SpellRunPage, Discover tab, sidebar items, and the AI create_spell tool.