nrobi144
e80473a7d9
feat(cache): Phase 3 — route all screen events through cache
...
All screens now pipe relay events into DesktopLocalCache via
coordinator.consumeEvent(). Existing per-screen EventCollectionState
kept for rendering (incremental migration), but data also enters
cache for persistence across navigation.
- FeedScreen: route global + following feed events
- ThreadScreen: route root note + reply events
- UserProfileScreen: route posts + add cache hydration on mount
(LaunchedEffect queries cache for existing posts → instant display)
- BookmarksScreen: route public + private bookmark events
- ReadsScreen: route long-form feed events (add coordinator param)
- NotificationsScreen: route notification events
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com >
2026-03-26 07:13:25 +02:00
nrobi144
c198df57fd
feat(cache): Phase 2+3 foundation — FeedFilters + DesktopFeedViewModel
...
Phase 2: 8 FeedFilter implementations:
- DesktopGlobalFeedFilter (kind 1, limit 2500)
- DesktopFollowingFeedFilter (kind 1 + followed pubkeys)
- DesktopThreadFilter (root + reply graph walk)
- DesktopProfileFeedFilter (notes by pubkey, limit 1000)
- DesktopBookmarkFeedFilter (notes by ID set)
- DesktopReadsFeedFilter (kind 30023, limit 500)
- DesktopNotificationFeedFilter (events tagging user)
- DesktopSearchFeedFilter (content text search)
All use AdditiveFeedFilter for incremental updates (O(batch)
after initial load). Limits are 5x Android's.
Phase 3 foundation: DesktopFeedViewModel subclass that calls
refreshSuspended() on init to load existing cache data —
fixes navigation persistence (back shows instant data).
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com >
2026-03-26 07:12:46 +02:00
nrobi144
543f7a329c
feat(cache): Phase 1 — cache-centric architecture foundation
...
- Add BoundedLargeCache: LargeCache wrapper with size enforcement
(50k notes, 25k users, 10k addressable). Lock-free reads via
ConcurrentSkipListMap, evicts 10% when cap exceeded.
- Switch DesktopLocalCache from ConcurrentHashMap to BoundedLargeCache.
Exposes filterIntoSet, values, etc. matching Android's query patterns.
- Add consume methods for kinds 1 (TextNote), 7 (Reaction),
9734 (ZapRequest), 9735 (Zap). Uses tagsWithoutCitations() for
reply parsing, originalPost()+taggedAddresses() for reactions,
zappedPost() for zaps. Follows Android LocalCache pattern.
- Add consumeEvent() bridge in coordinator with BasicBundledInsert
(250ms batching). Routes relay onEvent callbacks to cache.
- Fix SharedFlow: extraBufferCapacity=64, DROP_OLDEST. Prevents
blocking emitters and dropped events.
- Set -Xmx2g JVM arg for long desktop sessions.
- Clear cache on logout (coordinator first, then cache).
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com >
2026-03-26 07:12:46 +02:00
nrobi144
61119e6916
docs: deepen cache plan — BoundedLargeCache, FeedNoteCard rewrite details
...
- Resolve LruCache vs LargeCache: use LargeCache (lock-free ConcurrentSkipListMap)
with BoundedLargeCache wrapper for size enforcement on put()
- Confirm LargeCache available on desktop via quartz jvmAndroid source set
- Detail FeedNoteCard rewrite: Note model field mapping, 5 subscription removals
- Fix filter examples to use filterIntoSet (LargeCache API)
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com >
2026-03-26 07:12:46 +02:00
nrobi144
9c160006fa
docs: desktop cache architecture brainstorm and plan
...
Cache-centric architecture for navigation persistence, mirroring
Android Amethyst's pattern. Three-phase incremental migration:
Phase 1 - Store events in DesktopLocalCache with LRU eviction
Phase 2 - Create FeedFilter implementations
Phase 3 - Migrate screens to FeedViewModel
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com >
2026-03-26 07:12:45 +02:00
Vitor Pamplona
46b75abc81
Merge pull request #1950 from vitorpamplona/l10n_crowdin_translations
...
New Crowdin Translations
2026-03-25 16:20:00 -04:00
Crowdin Bot
618edf9dd5
New Crowdin translations by GitHub Action
2026-03-25 20:17:28 +00:00
Vitor Pamplona
0de01ca295
Merge pull request #1949 from vitorpamplona/l10n_crowdin_translations
...
New Crowdin Translations
2026-03-25 16:16:54 -04:00
Vitor Pamplona
2e9beacb13
no message
2026-03-25 16:14:20 -04:00
Crowdin Bot
9db9283952
New Crowdin translations by GitHub Action
2026-03-25 20:07:46 +00:00
Vitor Pamplona
452d2accc9
Merge pull request #1948 from vitorpamplona/claude/add-web-bookmarks-qYwpU
...
feat: implement NIP-B0 Web Bookmarking (kind 39701)
2026-03-25 16:06:09 -04:00
Vitor Pamplona
bf8791088c
Trying to resolve the build issue between spotless and vlcSetup without running vlcSetup when applying spotless from Claude.
2026-03-25 16:05:29 -04:00
Vitor Pamplona
15ccdf0c73
Merge pull request #1938 from vitorpamplona/claude/organize-favorite-relay-feeds-DL3o2
...
feat: separate favorite relay feeds into own category in nav popup
2026-03-25 15:44:59 -04:00
Vitor Pamplona
c903996cc2
Merge pull request #1939 from vitorpamplona/claude/nip89-client-tag-LZYhd
...
feat: NIP-89 client tag on all signed events
2026-03-25 15:42:31 -04:00
Vitor Pamplona
052fa22d59
Merge branch 'main' of https://github.com/vitorpamplona/amethyst
...
* 'main' of https://github.com/vitorpamplona/amethyst :
New Crowdin translations by GitHub Action
2026-03-25 15:38:16 -04:00
Vitor Pamplona
e90945d201
Removing the solution to a warning about spotless dependencies because claude can't run the vlc step
2026-03-25 15:34:32 -04:00
Claude
cbee188ca5
feat: implement NIP-B0 Web Bookmarking (kind 39701)
...
Add support for NIP-B0 web bookmarks with a complete protocol
implementation in Quartz and a full UI in Amethyst for adding,
editing, browsing, and deleting web bookmarks.
Quartz:
- WebBookmarkEvent (kind 39701) as an addressable event
- Tag builder/parser extensions for title, published_at, hashtags
- Registered in EventFactory
Amethyst:
- WebBookmarksScreen with FAB to add, and per-card edit/delete/open
- WebBookmarkEditDialog for add/edit with URL, title, description, tags
- WebBookmarkFeedFilter querying addressable notes by kind + pubkey
- Account.sendWebBookmark() and Account.deleteWebBookmark()
- LocalCache.consume() for WebBookmarkEvent
- Drawer navigation entry with Language icon
- Route.WebBookmarks and navigation registration
https://claude.ai/code/session_01UzfLJttwuJzovtb8HX5F9n
2026-03-25 19:29:55 +00:00
Vitor Pamplona
138428a233
Merge pull request #1947 from vitorpamplona/l10n_crowdin_translations
...
New Crowdin Translations
2026-03-25 15:24:15 -04:00
Crowdin Bot
fd86e3c045
New Crowdin translations by GitHub Action
2026-03-25 19:23:05 +00:00
Vitor Pamplona
283fb96bb7
Merge branch 'main' of https://github.com/vitorpamplona/amethyst
...
* 'main' of https://github.com/vitorpamplona/amethyst :
reuse hex methods.
spotless
delete voice files on failuer
added progress and test plan to doc
fix: delete abandoned compressed video when larger than original fix: eagerly delete intermediate temp files in upload pipeline fix: delete temp file from MediaCompressorFileUtils after image compression refactor: simplify temp file cleanup logic - Remove TOCTOU anti-pattern (file.exists() before file.delete()) - Consolidate double deleteTempUri calls into single conditional - Remove restating comments
analysis for temporary files
fix: clean up temp files after upload completes
perf: optimize ChaCha20 and XChaCha20-Poly1305 for speed
style: apply spotless formatting to ChaCha20/Poly1305 sources
feat: replace libsodium with pure Kotlin ChaCha20/Poly1305 implementation
2026-03-25 15:20:28 -04:00
Vitor Pamplona
6db28dca0b
Merge pull request #1908 from vitorpamplona/claude/remove-libsodium-dependency-DjtWa
...
Replace libsodium with pure Kotlin XChaCha20-Poly1305 implementation
2026-03-25 13:53:48 -04:00
Vitor Pamplona
2474ba1713
Fixes anon accounts becoming empty bubbles in the notifiy section of new posts.
2026-03-25 13:53:06 -04:00
Vitor Pamplona
fc560d2752
reuse hex methods.
2026-03-25 13:22:02 -04:00
Vitor Pamplona
2ead6645c0
Merge pull request #1925 from vitorpamplona/claude/review-cache-cleanup-Yr2P6
...
Add cleanup of temporary files in upload pipeline
2026-03-25 13:20:52 -04:00
Vitor Pamplona
138bb144ee
Merge branch 'main' into claude/review-cache-cleanup-Yr2P6
2026-03-25 13:20:30 -04:00
Vitor Pamplona
e2ac534be0
spotless
2026-03-25 12:55:31 -04:00
davotoula
aa5dad9fac
delete voice files on failuer
2026-03-25 17:42:05 +01:00
Vitor Pamplona
0d92c86459
Merge branch 'main' into claude/remove-libsodium-dependency-DjtWa
2026-03-25 11:50:07 -04:00
Vitor Pamplona
9e9f6c3164
Completing the transition from NIP-44 architecture specific tests to commontTest
2026-03-25 11:48:37 -04:00
Vitor Pamplona
d84d146981
Merge branch 'main' into claude/remove-libsodium-dependency-DjtWa
2026-03-25 11:24:55 -04:00
Vitor Pamplona
617db3613f
Re-enables benchmark with native android ChaCha functions
2026-03-25 11:17:17 -04:00
Vitor Pamplona
60a44d25eb
Merge branch 'main' of https://github.com/vitorpamplona/amethyst
...
* 'main' of https://github.com/vitorpamplona/amethyst :
New Crowdin translations by GitHub Action
New Crowdin translations by GitHub Action
feat: implement NIP-45 HyperLogLog for probabilistic event counting
2026-03-25 10:55:12 -04:00
Vitor Pamplona
2ffb920f75
Fixes NIP-46 decoding test
2026-03-25 10:51:31 -04:00
Vitor Pamplona
f8baf83146
Merge pull request #1941 from vitorpamplona/claude/implement-hyperloglog-nip45-Jai8I
...
feat: implement NIP-45 HyperLogLog support
2026-03-25 09:34:35 -04:00
Vitor Pamplona
08090f57b5
Merge pull request #1945 from vitorpamplona/l10n_crowdin_translations
...
New Crowdin Translations
2026-03-25 09:34:18 -04:00
Crowdin Bot
19ef2ca041
New Crowdin translations by GitHub Action
2026-03-25 13:30:02 +00:00
Vitor Pamplona
3a21396838
Merge pull request #1936 from vitorpamplona/l10n_crowdin_translations
...
New Crowdin Translations
2026-03-25 09:28:32 -04:00
Crowdin Bot
0705d070bd
New Crowdin translations by GitHub Action
2026-03-25 12:40:37 +00:00
Vitor Pamplona
d6541e37c3
merge
2026-03-25 08:37:18 -04:00
Vitor Pamplona
7583f7f8e1
Moves some of the nip-44 based tests to commonTest
2026-03-25 08:33:04 -04:00
Vitor Pamplona
c654d2267c
Protects against crashes when the signer sends an unverifiable payload back to Amethyst
2026-03-25 08:28:31 -04:00
Vitor Pamplona
0a0b6aefa0
Merge pull request #1943 from dadofsambonzuki/attestation-fix
...
Align attestation events with latest NIP format
2026-03-25 07:49:07 -04:00
Vitor Pamplona
a1ad460b90
Merge pull request #1944 from KotlinGeekDev/kmp-completeness
...
Kmp completeness: update feature parity table.
2026-03-25 07:47:38 -04:00
Vitor Pamplona
9f6684b044
Merge pull request #1942 from nrobi144/features/long-form-content
...
feat(desktop): highlight UX, shared stores, profile tabs, editor toolbar
2026-03-25 07:47:21 -04:00
KotlinGeekDev
ac60cbeb02
Update Quartz feature parity table.
2026-03-25 12:42:41 +01:00
Nathan Day
92ae288720
Align attestation tags with latest NIP format
2026-03-25 11:30:29 +00:00
Nathan Day
0b049c656c
Merge branch 'vitorpamplona:main' into main
2026-03-25 11:01:43 +00:00
davotoula
42db03790a
added progress and test plan to doc
2026-03-25 10:23:38 +01:00
davotoula
60b7c6bd0d
fix: delete abandoned compressed video when larger than original
...
fix: eagerly delete intermediate temp files in upload pipeline
fix: delete temp file from MediaCompressorFileUtils after image compression
refactor: simplify temp file cleanup logic
- Remove TOCTOU anti-pattern (file.exists() before file.delete())
- Consolidate double deleteTempUri calls into single conditional
- Remove restating comments
2026-03-25 10:19:16 +01:00
davotoula
390edf311d
analysis for temporary files
2026-03-25 09:29:48 +01:00