Skip to content

feat: Character Catalog + Image Gen + critical bug fixes - #1

Closed
danvitv wants to merge 8 commits into
feat/lorebook-regex-uifrom
feat/character-catalog
Closed

feat: Character Catalog + Image Gen + critical bug fixes#1
danvitv wants to merge 8 commits into
feat/lorebook-regex-uifrom
feat/character-catalog

Conversation

@danvitv

@danvitv danvitv commented May 6, 2026

Copy link
Copy Markdown
Owner

Summary

  • Character Catalog (Phase 14/14b): 4 providers (JanitorAI, DataCat, JannyAI, Chub.ai), search, filters, infinite scroll, preview sheet, import pipeline, Import by URL dialog
  • Image Generation (Phase 6): 4 providers (OpenAI, Gemini, Naistera, RoutMy+RU Bridge), [IMG:GEN:...] auto-gen tags, ImageGenSheet settings, ImageContentRenderer
  • CI optimization: Gradle cache, arm64-only APK, --no-pub, parallel/caching
  • 4 critical bug fixes: import creates new session (not append), chat list reactivity via Drift .watch(), cold start lightweight metadata query, sync blocking UI eliminated
  • Android/iOS platform support: shared async getAppDataDir()

Changes (47 files, +5050/-114)

New features

  • features/catalog/ — full catalog system (models, 4 providers, UI)
  • features/image_gen/ — image generation (models, 4 providers, orchestrator, UI)
  • core/utils/platform_paths.dart — cross-platform app data dir

Bug fixes

  • Import: new session instead of appending, removed broken timestamp dedup
  • Chat list: invalidateSelf() replaced with Drift .watch() streams
  • Cold start: SessionMetadata query + batch getByIds
  • Character list: CharactersNotifier uses repo.watchAll() stream

CI

  • .github/workflows/build-branch.yml — Gradle cache, arm64-only, --no-pub
  • android/gradle.properties — parallel + caching flags

danvitv added 8 commits May 6, 2026 14:43
- New lib/core/utils/platform_paths.dart with async getAppDataDir()
  using path_provider for Android/iOS, env vars for desktop
- Removed duplicate _getAppDataDir() from app_db.dart and
  image_storage_service.dart
- ImageStorageService.create() now async (Future)
- imageStorageProvider, characterImporterProvider, migrationServiceProvider
  converted to FutureProvider
- Updated all consumers to use .future await pattern
…, JannyAI, Chub)

- Catalog models: CatalogItem, CatalogFilters, CatalogTag, CatalogProvider (freezed)
- Shared classes: CatalogSearchResult, DownloadedCharacter, CharacterData
- catalog_http: Dio-based HTTP client with GET/POST/list helpers
- janitor_provider: Hampter API search, tags, character download
- datacat_provider: session auth, browse/search, Saucepan extraction
- janny_provider: MeiliSearch API, token management, Astro scraping
- chub_provider: REST search, tag aggregation, character download
- catalog_provider: Riverpod StateNotifier, provider switching, pagination
- CharacterRepo.createCharacterFromCatalog / LorebookRepo.createEntryFromCatalog
- Android INTERNET permission for catalog API access
…rs, preview sheet, import

- CatalogCard: avatar with CachedNetworkImage, token badge, NSFW badge, tag chips
- CatalogGrid: infinite scroll, provider/sort/filter controls, results count
- Preview sheet: draggable sheet with full character info + Import button
- Filter sheet: NSFW/NSFL toggles, token range, reset/apply
- ImportUrlDialog: DataCat extract-and-poll with phase tracking
- Wired into character_list_screen Discover tab + Import URL FAB
- Added cached_network_image dependency
…e, sync blocking

- Import: create new session instead of appending to current chat,
  remove broken timestamp dedup that dropped same-second messages
- Chat list: invalidate chatHistoryProvider on all ChatNotifier mutations
- Cold start: lightweight SessionMetadata query + batch CharacterRepo.getByIds
- Sync: Drift .watch() streams for CharactersNotifier and ChatHistoryNotifier
@danvitv

danvitv commented May 6, 2026

Copy link
Copy Markdown
Owner Author

Superseded by #3 — feat/cloud-sync includes all character-catalog commits plus cloud sync work.

@danvitv danvitv closed this May 6, 2026
@danvitv
danvitv deleted the feat/character-catalog branch May 6, 2026 14:03
danvitv added a commit that referenced this pull request May 14, 2026
- Remove 2 NoiseOverlay instances from chat screen — at 0.03 opacity
  barely visible but drawing 20K rects per frame, #1 cause of GPU jank
- Remove BackdropFilter from message bubbles — sigma 12 blur per
  bubble forced expensive GPU rasterization on every scroll frame
- Keep ClipRRect for rounded corners, just drop the blur
danvitv added a commit that referenced this pull request May 22, 2026
- I.1: Swipe animation (CSS transform + opacity slide)
- I.2: Guided swipe (🎯 button → textarea → onGuidedSwipe bridge)
- I.3: Guidance block (🎯 header after name)
- I.4: Greeting switcher (separate nav for greetingIndex)
- I.5: Hidden indicator (👁 + opacity 0.45 + toggle)
- I.6: Memory badge (MEM/STALE/REBUILD)
- I.7: Triggered items (meta-badge with tooltip, names)
- I.8: Message index (#1, #2 in header)
- I.9: Error copy button + provider chip
- I.10: Image attachment with click preview
- I.11: Date separators (Today/Yesterday/Mon DD, YYYY)
- I.12: Selection mode (checkboxes + onSelectionChange)
- I.13: Performance mode (setPerformanceMode → .perf-mode)
- I.14: Rolling gen time animation (cubic ease-out 600ms)
- I.15: Version badge (<sup> in header)

Dart: added isGenerating to _toMap(), onSelectionChange callback,
setPerformanceMode/setSelectionMode bridge methods, isGenerating sync
danvitv added a commit that referenced this pull request May 23, 2026
- I.1: Swipe animation (CSS transform + opacity slide)
- I.2: Guided swipe (🎯 button → textarea → onGuidedSwipe bridge)
- I.3: Guidance block (🎯 header after name)
- I.4: Greeting switcher (separate nav for greetingIndex)
- I.5: Hidden indicator (👁 + opacity 0.45 + toggle)
- I.6: Memory badge (MEM/STALE/REBUILD)
- I.7: Triggered items (meta-badge with tooltip, names)
- I.8: Message index (#1, #2 in header)
- I.9: Error copy button + provider chip
- I.10: Image attachment with click preview
- I.11: Date separators (Today/Yesterday/Mon DD, YYYY)
- I.12: Selection mode (checkboxes + onSelectionChange)
- I.13: Performance mode (setPerformanceMode → .perf-mode)
- I.14: Rolling gen time animation (cubic ease-out 600ms)
- I.15: Version badge (<sup> in header)

Dart: added isGenerating to _toMap(), onSelectionChange callback,
setPerformanceMode/setSelectionMode bridge methods, isGenerating sync
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant