Commit Graph

9364 Commits

Author SHA1 Message Date
Crowdin Bot b6829523a7 New Crowdin translations by GitHub Action 2026-03-11 16:28:06 +00:00
Vitor Pamplona 2649d05e25 merge with spotless apply 2026-03-11 12:24:25 -04:00
Vitor Pamplona 0f934ee461 Merge branch 'main' of https://github.com/vitorpamplona/amethyst
* 'main' of https://github.com/vitorpamplona/amethyst:
  feat: add CodeSnippetEvent (NIP-C0) rendering to NoteCompose and ThreadFeedView
2026-03-11 12:22:44 -04:00
Vitor Pamplona 8d968c2fc0 Merge pull request #1806 from vitorpamplona/claude/namecoin-settings-route-qFW0S
Extract Namecoin settings to dedicated screen
2026-03-11 12:21:57 -04:00
Vitor Pamplona c1705507a8 Adds 1.06 change log 2026-03-11 12:21:03 -04:00
Claude 3b3482e753 feat: move NamecoinSettingsSection to its own route and screen
Extract the Namecoin settings from PrivacyOptionsScreen into a
dedicated NamecoinSettingsScreen with its own Route.NamecoinSettings
route. Add a "Namecoin Settings" entry to AllSettingsScreen so users
can navigate to it directly from the settings list.

https://claude.ai/code/session_013gEw6fJYFiFoe4zETo8dpC
2026-03-11 16:19:07 +00:00
Vitor Pamplona dccc644a9e Merge pull request #1804 from vitorpamplona/claude/add-code-snippet-rendering-0G1Mv
Add support for rendering NIP-23 Code Snippet events
2026-03-11 12:12:21 -04:00
Claude 74e44f1256 feat: add CodeSnippetEvent (NIP-C0) rendering to NoteCompose and ThreadFeedView
- Create CodeSnippet.kt with RenderCodeSnippetEvent (feed card view) and
  RenderCodeSnippetHeaderForThread (full thread view)
- Feed card shows: filename/language badge, description, 5-line code preview
  in a monospace box with rounded border
- Thread header shows: full code in scrollable monospace block plus metadata
  (license, runtime, deps)
- Add is CodeSnippetEvent branch to NoteCompose.kt RenderNoteRow when-statement
- Add is CodeSnippetEvent branch to ThreadFeedView.kt header when-statement

https://claude.ai/code/session_01X6jjsMLGBUmcaWXHJKmrEn
2026-03-11 15:46:18 +00:00
Vitor Pamplona 76090077b6 Displays % of uptime in relay settings 2026-03-11 10:59:43 -04:00
Vitor Pamplona 76e86ee5f7 adds calendar rendering to the thread view 2026-03-11 10:59:21 -04:00
Vitor Pamplona 3fdde60a37 Merge branch 'main' of https://github.com/vitorpamplona/amethyst
* 'main' of https://github.com/vitorpamplona/amethyst:
  New Crowdin translations by GitHub Action
  fix: resolve conflicts with upstream PR #1789 merge
  fix(desktop): remove noisy debug logs and silence SLF4J warnings
  feat(desktop): add bunker heartbeat indicator to sidebar navigation
  fix(desktop): verify user pubkey via get_public_key after nostrconnect login
  fix(desktop): address code review findings for NIP-46 bunker login
  feat(desktop): add nostrconnect:// login flow for QR-based signer pairing
  revert: remove QR code scanning from login
  feat(desktop): webcam QR scanning via ffmpeg for bunker login
  feat(desktop): add webcam QR code scanning for bunker login
  feat(desktop): add QR code scanning for bunker login
  fix(desktop): clear stored credentials on logout
  feat(desktop): update login hints to mention bunker:// option
  fix(desktop): simplify settings logout to just a button
  feat(desktop): add logout option to menu bar and settings
  test: add NIP-46 test suite for desktop, quartz, and fix pre-existing chess test errors
  feat(desktop): add NIP-46 remote signer (bunker://) login
2026-03-11 08:42:44 -04:00
Vitor Pamplona 71574a5ce0 tracks and displays connection tentatives on relay settings 2026-03-11 08:42:32 -04:00
Vitor Pamplona ca9074e6f5 better relay parsing messaging 2026-03-11 08:17:14 -04:00
Vitor Pamplona 4576204c1d Fixes relay list backup 2026-03-11 08:10:50 -04:00
Vitor Pamplona 190bdb0795 Merge pull request #1803 from vitorpamplona/l10n_crowdin_translations
New Crowdin Translations
2026-03-11 07:51:20 -04:00
Crowdin Bot c67781f87d New Crowdin translations by GitHub Action 2026-03-11 11:49:38 +00:00
Vitor Pamplona d01b5aba4e Merge pull request #1791 from nrobi144/feat/nip46-bunker-login
feat(desktop): NIP-46 bunker login with heartbeat indicator
2026-03-11 07:47:38 -04:00
nrobi144 edf764709d fix: resolve conflicts with upstream PR #1789 merge
- Add missing commons domain files (BunkerLoginUseCase, NostrConnectLoginUseCase)
- Restore CoroutineScope in NostrSignerRemote for suspend decrypt call
- Update isolation test: upstream removed `since` filter (PR #1789)
- Add new INostrClient interface methods to TrackingNostrClient mock

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-11 10:35:56 +02:00
nrobi144 36efbd1544 fix(desktop): remove noisy debug logs and silence SLF4J warnings
Remove feedSub/contactList debug prints from FeedScreen, suppress
GiftWrapEvent decryption failure log (expected for others' wraps),
and add slf4j-nop to silence "No SLF4J providers" console warnings.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-11 10:20:19 +02:00
nrobi144 4d1d92db39 feat(desktop): add bunker heartbeat indicator to sidebar navigation
Pulsating green heart icon shows NIP-46 signer connection status in both
DeckSidebar and SinglePaneLayout NavigationRail. Tooltip displays last
ping time. SignerConnectionState moved to commons for KMP sharing.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-11 10:20:18 +02:00
nrobi144 5475d6c2bc fix(desktop): verify user pubkey via get_public_key after nostrconnect login
The nostrconnect flow was trusting params[0] from the signer's connect
message as the user's pubkey. Some signers (e.g. nsec.app) don't put
the actual user pubkey there, causing all relay subscriptions to query
the wrong identity — contact lists, profiles, and DMs all returned empty.

Now calls remoteSigner.getPublicKey() after the handshake to get the
verified pubkey from the signer. Also stabilizes FeedScreen relay
subscriptions with distinctUntilChanged() and adds relay.primal.net
to defaults.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-11 10:20:18 +02:00
nrobi144 3a1e38a2f2 fix(desktop): address code review findings for NIP-46 bunker login
- Add bounds check in fromBunkerUri for missing query params (P2-1)
- Preserve bunker keys on transient force-logout (P2-3)
- Replace debug printlns with DebugConfig.log() (P2-4)
- Replace unused Unstable with Disconnected state (P2-5)
- Move validateBunkerUri to account package (P3-9)
- Fix Compose state update from IO thread (P3-11)
- Add disconnectNip46Client() to onDispose cleanup (P3-12)

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-11 10:16:10 +02:00
nrobi144 12c91aae3d feat(desktop): add nostrconnect:// login flow for QR-based signer pairing
Adds client-initiated NIP-46 (nostrconnect://) flow so users can pair
with a remote signer (e.g. Amber) by scanning a QR code instead of
manually copying a bunker:// URI.

Changes:
- Fix RemoteSignerManager to decrypt NIP-44 content before parsing
- Add CoroutineScope to NostrSignerRemote for async event callbacks
- Add loginWithNostrConnect() to AccountManager with 120s timeout
- Add QrCodeCanvas composable using ZXing for QR generation
- Add "Connect" tab to LoginCard showing QR + copyable URI + waiting state
- Wire nostrconnect flow through LoginScreen

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-11 10:16:10 +02:00
nrobi144 bff6723ba6 revert: remove QR code scanning from login
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-11 10:16:10 +02:00
nrobi144 d030843522 feat(desktop): webcam QR scanning via ffmpeg for bunker login
Replaces webcam-capture (broken on Apple Silicon) with ffmpeg
avfoundation capture. Opens a live preview dialog that scans
for QR codes from the FaceTime camera. Works natively on arm64.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-11 10:16:10 +02:00
nrobi144 6e04482981 feat(desktop): add webcam QR code scanning for bunker login
Uses webcam-capture + ZXing to scan QR codes from the camera.
Click the QR icon on the login screen to open a webcam scanner
dialog that auto-detects bunker:// URIs from Amber's QR display.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-11 10:16:10 +02:00
nrobi144 fd1b435020 feat(desktop): add QR code scanning for bunker login
Adds a QR scan button to the login card that decodes QR codes from
clipboard images or image files using ZXing. Useful for scanning
bunker:// URIs from Amber's QR display.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-11 10:16:09 +02:00
nrobi144 5661c6df27 fix(desktop): clear stored credentials on logout
All user-initiated logouts now pass deleteKey=true to remove
nsec from secure storage, clear last_npub, and delete bunker state.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-11 10:16:09 +02:00
nrobi144 eafedda99e feat(desktop): update login hints to mention bunker:// option
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-11 10:16:09 +02:00
nrobi144 26ea0be4c7 fix(desktop): simplify settings logout to just a button
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-11 10:16:09 +02:00
nrobi144 2346d92f16 feat(desktop): add logout option to menu bar and settings
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-11 10:16:09 +02:00
nrobi144 1821b9ff71 test: add NIP-46 test suite for desktop, quartz, and fix pre-existing chess test errors
Add comprehensive test coverage for NIP-46 bunker login across quartz and desktopApp:

Quartz (4 files, 48 tests):
- ResponseParserTest: all 7 response parsers (success/error/unexpected)
- FromBunkerUriTest: URI parsing, validation, edge cases
- ConvertExceptionsTest: SignerResult→Exception mapping
- NostrConnectEventTest: canDecrypt, talkingWith, verifiedRecipientPubKey

Desktop (6 files, 45 tests):
- BunkerUriUtilsTest: validateBunkerUri + stripBunkerSecret
- AccountManagerKeyLoginTest: nsec/npub/invalid login, save, generate
- AccountManagerLogoutTest: logout, forceLogout, state transitions
- AccountManagerLoadAccountTest: internal/bunker/missing-key scenarios
- AccountManagerBunkerLoginTest: hasBunkerAccount, setConnectingRelays
- AccountManagerHeartbeatTest: start/stop, no-crash with internal signer

Production changes:
- AccountManager: constructor private→internal, add homeDir param for test injection, extract stripBunkerSecret to internal top-level, constants internal
- desktopApp/build.gradle.kts: add mockk test dependency

Fix pre-existing chess test compilation errors:
- ChessStateReconstructorTest: add missing jester subpackage imports
- ChessGameEventTest: altText()→alt() + add nip31Alts import

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-11 10:16:09 +02:00
nrobi144 6c24c52104 feat(desktop): add NIP-46 remote signer (bunker://) login
Support bunker:// URI login for desktop, enabling private key delegation
to remote signers (nsec.app, Amber). Includes heartbeat monitoring,
force-logout on revocation, and ConnectingRelays startup state.

- AccountManager: bunker login/save/load, heartbeat ping, force logout
- LoginCard: auto-detect bunker:// URI, validation, connecting state
- LoginScreen: wire bunker callback, ConnectingRelays screen
- Main.kt: relay timeout, error recovery, scope cleanup, data objects
- ForceLogoutDialog: alert on signer revocation/disconnect

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-11 10:15:24 +02:00
Vitor Pamplona 9f903709e7 Move location permission watcher to the outside of the screens to avoid recreating them 2026-03-10 20:01:55 -04:00
Vitor Pamplona 8cd9449ba6 Improves upload of music and documents. 2026-03-10 19:49:15 -04:00
Vitor Pamplona 8a03f0b501 Replaces Aboutme for NIP-05 in the user search 2026-03-10 19:12:27 -04:00
Vitor Pamplona 2567a7c022 Better alignment and options in the UI. 2026-03-10 18:56:00 -04:00
Vitor Pamplona 178fcbb4c1 removes unused imports 2026-03-10 18:47:00 -04:00
Vitor Pamplona cc4e81146f Saves the position of the screen on import follows dialog 2026-03-10 18:46:18 -04:00
Vitor Pamplona 7a3794eabb New string resource 2026-03-10 18:19:10 -04:00
Vitor Pamplona a8d4705fa6 Merge branch 'main' of https://github.com/vitorpamplona/amethyst
* 'main' of https://github.com/vitorpamplona/amethyst:
  New Crowdin translations by GitHub Action
2026-03-10 16:58:24 -04:00
Vitor Pamplona a1e90b8c9f save the lazy list state and make it scroll in the search view model to avoid coming back on another feed position 2026-03-10 16:56:31 -04:00
Vitor Pamplona 26b7efafe8 enforces specific keys when using nip05/namecoin 2026-03-10 16:41:59 -04:00
Vitor Pamplona ef1d7e1249 Merge pull request #1800 from vitorpamplona/l10n_crowdin_translations
New Crowdin Translations
2026-03-10 16:29:14 -04:00
Vitor Pamplona 9a3b11e522 Adds the ability to upload any file form any new post screen 2026-03-10 16:23:02 -04:00
Crowdin Bot ffff1399b9 New Crowdin translations by GitHub Action 2026-03-10 20:18:49 +00:00
Vitor Pamplona 087e5878a6 Fixes some compilation issues 2026-03-10 16:14:38 -04:00
Vitor Pamplona c0e97c19c0 Improves wording to download to the phone as opposed to the profile gallery 2026-03-10 16:07:45 -04:00
Vitor Pamplona b4184d2235 Moves the upload file button closer to the image upload 2026-03-10 15:54:03 -04:00
Vitor Pamplona b2a8a422b2 - Breaks the new Import Follow interface into two screens
- Improves user suggestion search by evaluating specific nip-05s and npubs
2026-03-10 15:48:04 -04:00